File: //proc/thread-self/root/lib/fm-agent/library/threshold.py
import logging
import operator
import sys
import time
class Threshold(object):
def __init__(self, **kwargs):
self.log = logging.getLogger(self.__class__.__name__)
self.id = kwargs.get("id")
# I renamed 'delay' to 'duration' to indicate that we're not delaying
# reporting an exceeded threshold, but instead we're checking if it is
# being exceded for a duration of time.
self.duration = kwargs.get("delay", 0)
# I renamed 'value' to 'limit' to distinguish it from the check value.
self.limit = kwargs.get("value", 0)
self.operator = kwargs.get("operator", None)
self.reported = False
# The logging library interferes with cPickle, so we must remove the logger
# instance then reset it when we serialize/unserialize.
def __getstate__(self):
state = dict(self.__dict__)
del state["log"]
return state
def __setstate__(self, state):
self.__dict__.update(state)
self.log = logging.getLogger(self.__class__.__name__)
def limit_exceeded(self, value):
if self.operator is None:
self.log.debug("Threshold %s is a null threshold", self.id)
return None
operation = getattr(operator, self.operator)
self.log.debug(
"Testing if value (%.2f) is %s threshold %s's limit (%.2f)",
value,
self.operator,
self.id,
self.limit,
)
return operation(value, self.limit)