diff options
Diffstat (limited to 'glances/thresholds.py')
-rw-r--r-- | glances/thresholds.py | 116 |
1 files changed, 116 insertions, 0 deletions
diff --git a/glances/thresholds.py b/glances/thresholds.py new file mode 100644 index 00000000..845e19cb --- /dev/null +++ b/glances/thresholds.py @@ -0,0 +1,116 @@ +# -*- coding: utf-8 -*- +# +# This file is part of Glances. +# +# Copyright (C) 2017 Nicolargo <nicolas@nicolargo.com> +# +# Glances is free software; you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# Glances is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +""" +Thresholds classes: OK, CAREFUL, WARNING, CRITICAL +""" + +import sys + + +class GlancesThresholds(object): + """Class to manage thresholds dict for all Glances plugins: + key: Glances stats (example: cpu_user) + value: Threasold* instance + """ + + threshold_list = ['OK', 'CAREFUL', 'WARNING', 'CRITICAL'] + + def __init__(self): + self.current_module = sys.modules[__name__] + self._thresholds = {} + + def get(self, stat_name=None): + """Return the threshold dict. + If stat_name is None, return the threshold for all plugins (dict of Threshold*) + Else return the Threshold* instance for the given plugin + """ + if stat_name is None: + return self._thresholds + + if stat_name in self._thresholds: + return self._thresholds[stat_name] + else: + return {} + + def add(self, stat_name, threshold_description): + """Add a new threshold to the dict (key = stat_name)""" + if threshold_description not in self.threshold_list: + return False + else: + self._thresholds[stat_name] = getattr(self.current_module, + 'GlancesThreshold' + threshold_description.capitalize())() + return True + + +# Global variable uses to share thresholds between Glances componants +glances_thresholds = GlancesThresholds() + + +class _GlancesThreshold(object): + + """Father class for all other Thresholds""" + + def description(self): + return self._threshold['description'] + + def value(self): + return self._threshold['value'] + + def __repr__(self): + return str(self._threshold) + + def __str__(self): + return self.description() + + def __cmp__(self, other): + """Override the default comparaison behavior""" + return self.value().__cmp__(other.value()) + + +class GlancesThresholdOk(_GlancesThreshold): + + """Ok Threshold class""" + + _threshold = {'description': 'OK', + 'value': 0} + + +class GlancesThresholdCareful(_GlancesThreshold): + + """Careful Threshold class""" + + _threshold = {'description': 'CAREFUL', + 'value': 1} + + +class GlancesThresholdWarning(_GlancesThreshold): + + """Warning Threshold class""" + + _threshold = {'description': 'WARNING', + 'value': 2} + + +class GlancesThresholdCritical(_GlancesThreshold): + + """Warning Threshold class""" + + _threshold = {'description': 'CRITICAL', + 'value': 3} |