diff options
author | Ilya Mashchenko <ilya@netdata.cloud> | 2020-12-12 00:00:01 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-12-12 00:00:01 +0300 |
commit | 6e0b9c97bafdd1bda8e501792c608da8d5328220 (patch) | |
tree | e3a0dad05386a400c477f50ce46c768e4d8ba8e4 /collectors/python.d.plugin/alarms/alarms.chart.py | |
parent | d0a194b897668f0ed4c9c91a179e24cc81448cf3 (diff) |
python.d/alarms: add alarms obsoletion and disable by default (#10375)
Diffstat (limited to 'collectors/python.d.plugin/alarms/alarms.chart.py')
-rw-r--r-- | collectors/python.d.plugin/alarms/alarms.chart.py | 65 |
1 files changed, 43 insertions, 22 deletions
diff --git a/collectors/python.d.plugin/alarms/alarms.chart.py b/collectors/python.d.plugin/alarms/alarms.chart.py index 39b2cfc5cf..4cc8525c24 100644 --- a/collectors/python.d.plugin/alarms/alarms.chart.py +++ b/collectors/python.d.plugin/alarms/alarms.chart.py @@ -8,43 +8,64 @@ from json import loads from bases.FrameworkServices.UrlService import UrlService update_every = 10 -disabled_by_default = False +disabled_by_default = True -DEFAULT_STATUS_MAP = {'CLEAR': 0, 'WARNING': 1, 'CRITICAL': 2} -ORDER = [ - 'alarms', -] +def charts_template(sm): + order = [ + 'alarms', + ] + + mappings = ', '.join(['{0}={1}'.format(k, v) for k, v in sm.items()]) + charts = { + 'alarms': { + 'options': [None, 'Alarms ({0})'.format(mappings), 'status', 'alarms', 'alarms.status', 'line'], + 'lines': [], + 'variables': [ + ['alarms_num'], + ] + } + } + return order, charts + + +DEFAULT_STATUS_MAP = {'CLEAR': 0, 'WARNING': 1, 'CRITICAL': 2} -CHARTS = { -} +DEFAULT_URL = 'http://127.0.0.1:19999/api/v1/alarms?all' class Service(UrlService): def __init__(self, configuration=None, name=None): UrlService.__init__(self, configuration=configuration, name=name) - self.order = ORDER - self.definitions = CHARTS - self.url = self.configuration.get('url', 'http://127.0.0.1:19999/api/v1/alarms?all') - self.status_map = self.configuration.get('status_map', DEFAULT_STATUS_MAP) - self.chart_title = f"Alarms ({', '.join([f'{k}={self.status_map[k]}' for k in self.status_map])})" - - def validate_charts(self, name, data, algorithm='absolute', multiplier=1, divisor=1): - for dim in data: - if name not in self.charts: - chart_params = [name] + ['alarms', self.chart_title, 'status', 'alarms', 'alarms.status', 'line'] - self.charts.add_chart(params=chart_params) - if dim not in self.charts[name]: - self.charts[name].add_dimension([dim, dim, algorithm, multiplier, divisor]) + self.sm = self.configuration.get('status_map', DEFAULT_STATUS_MAP) + self.order, self.definitions = charts_template(self.sm) + self.url = self.configuration.get('url', DEFAULT_URL) + self.collected_alarms = set() def _get_data(self): raw_data = self._get_raw_data() if raw_data is None: return None + raw_data = loads(raw_data) alarms = raw_data.get('alarms', {}) - data = {a: self.status_map[alarms[a]['status']] for a in alarms if alarms[a]['status'] in self.status_map} - self.validate_charts('alarms', data) + + data = {a: self.sm[alarms[a]['status']] for a in alarms if alarms[a]['status'] in self.sm} data['alarms_num'] = len(data) + self.update_charts(alarms, data) return data + + def update_charts(self, alarms, data): + if not self.charts: + return + + for a in data: + if a not in self.collected_alarms: + self.collected_alarms.add(a) + self.charts['alarms'].add_dimension([a, a, 'absolute', '1', '1']) + + for a in list(self.collected_alarms): + if a not in alarms: + self.collected_alarms.remove(a) + self.charts['alarms'].del_dimension(a, hide=False) |