X-Git-Url: https://arthur.barton.de/gitweb/?a=blobdiff_plain;f=python.d%2Fsensors.chart.py;h=e83aacfd81c9db1a87ce1f6fb831a6f355a2bf9d;hb=a29af3d0cde1eb8aa1667816bcd0a8d467afa82a;hp=8f7b903c3775ea5e041c3c00ba0e3067cdc852db;hpb=039ec24c358092d5a855e78e6266fd3ba173415e;p=netdata.git diff --git a/python.d/sensors.chart.py b/python.d/sensors.chart.py index 8f7b903c..e83aacfd 100644 --- a/python.d/sensors.chart.py +++ b/python.d/sensors.chart.py @@ -13,17 +13,17 @@ ORDER = ['temperature', 'fan', 'voltage', 'current', 'power', 'energy', 'humidit # This is a prototype of chart definition which is used to dynamically create self.definitions CHARTS = { 'temperature': { - 'options': [None, ' temperature', 'Celsius', 'temperature', 'sensors.temp', 'line'], + 'options': [None, ' temperature', 'Celsius', 'temperature', 'sensors.temperature', 'line'], 'lines': [ [None, None, 'absolute', 1, 1000] ]}, 'voltage': { - 'options': [None, ' voltage', 'Volts', 'voltage', 'sensors.volt', 'line'], + 'options': [None, ' voltage', 'Volts', 'voltage', 'sensors.voltage', 'line'], 'lines': [ [None, None, 'absolute', 1, 1000] ]}, 'current': { - 'options': [None, ' current', 'Ampere', 'current', 'sensors.curr', 'line'], + 'options': [None, ' current', 'Ampere', 'current', 'sensors.current', 'line'], 'lines': [ [None, None, 'absolute', 1, 1000] ]}, @@ -33,7 +33,7 @@ CHARTS = { [None, None, 'absolute', 1, 1000000] ]}, 'fan': { - 'options': [None, ' fans speed', 'Rotations/min', 'fans', 'sensors.fans', 'line'], + 'options': [None, ' fans speed', 'Rotations/min', 'fans', 'sensors.fan', 'line'], 'lines': [ [None, None, 'absolute', 1, 1000] ]}, @@ -49,6 +49,13 @@ CHARTS = { ]} } +LIMITS = { + 'temperature': [-127, 1000], + 'voltage': [-127, 127], + 'current': [-127, 127], + 'fan': [0, 65535] +} + TYPE_MAP = { 0: 'voltage', 1: 'fan', @@ -70,6 +77,9 @@ class Service(SimpleService): SimpleService.__init__(self, configuration=configuration, name=name) self.order = [] self.definitions = {} + self.celsius = ('Celsius', lambda x: x) + self.fahrenheit = ('Fahrenheit', lambda x: x * 9 / 5 + 32) if self.configuration.get('fahrenheit') else False + self.choice = (choice for choice in [self.fahrenheit, self.celsius] if choice) self.chips = [] def _get_data(self): @@ -82,7 +92,15 @@ class Service(SimpleService): for sf in sfi: val = sensors.get_value(chip, sf.number) break - data[prefix + "_" + str(feature.name.decode())] = int(val * 1000) + typeName = TYPE_MAP[feature.type] + if typeName in LIMITS: + limit = LIMITS[typeName]; + if val < limit[0] or val > limit[1]: + continue + if 'temp' in str(feature.name.decode()): + data[prefix + "_" + str(feature.name.decode())] = int(self.calc(val) * 1000) + else: + data[prefix + "_" + str(feature.name.decode())] = int(val * 1000) except Exception as e: self.error(e) return None @@ -92,7 +110,6 @@ class Service(SimpleService): return data def _create_definitions(self): - prev_chip = "" for type in ORDER: for chip in sensors.ChipIterator(): chip_name = sensors.chip_snprintf_name(chip) @@ -105,19 +122,19 @@ class Service(SimpleService): continue if TYPE_MAP[feature.type] == type: # create chart - if chip_name != prev_chip: - name = chip_name + "_" + TYPE_MAP[feature.type] - if name not in self.order: - self.order.append(name) - chart_def = list(CHARTS[type]['options']) - chart_def[1] = chip_name + chart_def[1] - self.definitions[name] = {'options': chart_def} - self.definitions[name]['lines'] = [] + name = chip_name + "_" + TYPE_MAP[feature.type] + if name not in self.order: + self.order.append(name) + chart_def = list(CHARTS[type]['options']) + chart_def[1] = chip_name + chart_def[1] + if chart_def[2] == 'Celsius': + chart_def[2] = self.choice[0] + self.definitions[name] = {'options': chart_def} + self.definitions[name]['lines'] = [] line = list(CHARTS[type]['lines'][0]) line[0] = chip_name + "_" + str(feature.name.decode()) line[1] = sensors.get_label(chip, feature) self.definitions[name]['lines'].append(line) - prev_chip = chip_name def check(self): try: @@ -125,10 +142,20 @@ class Service(SimpleService): except Exception as e: self.error(e) return False + + try: + self.choice = next(self.choice) + except StopIteration: + # That can not happen but.. + self.choice = ('Celsius', lambda x: x) + self.calc = self.choice[1] + else: + self.calc = self.choice[1] try: self._create_definitions() except Exception as e: self.error(e) return False + return True