@cryptotaxi247 / netdata-1 / commits / 58c7585e6

"hddtemp" module update

lgz committed Oct 14, 2017 at 20:59 UTC 58c7585e6b48645bf7300ab6e919ec450d6b4cdd
1 file changed +36 -37
python.d/hddtemp.chart.py
+36 -37
@@ -1,10 +1,12 @@
1 # -*- coding: utf-8 -*-
2 # Description: hddtemp netdata python.d module
3 # Author: Pawel Krupa (paulfantom)
4 -# Modified by l2isbad
4 +
5
6 import os
7 -from base import SocketService
7 +from copy import deepcopy
8 +
9 +from bases.FrameworkServices.SocketService import SocketService
10
11 # default module values (can be overridden per job in `config`)
12 #update_every = 2
@@ -22,34 +24,40 @@ retries = 60
24
25 ORDER = ['temperatures']
26
27 +CHARTS = {
28 + 'temperatures': {
29 + 'options': ['disks_temp', 'Disks Temperatures', 'Celsius', 'temperatures', 'hddtemp.temperatures', 'line'],
30 + 'lines': [
31 + # lines are created dynamically in `check()` method
32 + ]}}
33 +
34 +
35 class Service(SocketService):
36 def __init__(self, configuration=None, name=None):
37 SocketService.__init__(self, configuration=configuration, name=name)
38 + self.order = ORDER
39 + self.definitions = deepcopy(CHARTS)
40 self._keep_alive = False
41 self.request = ""
42 self.host = "127.0.0.1"
43 self.port = 7634
32 - self.order = ORDER
33 - self.fahrenheit = ('Fahrenheit', lambda x: x * 9 / 5 + 32) if self.configuration.get('fahrenheit') else False
34 - self.whatever = ('Whatever', lambda x: x * 33 / 22 + 11) if self.configuration.get('whatever') else False
35 - self.choice = (choice for choice in [self.fahrenheit, self.whatever] if choice)
36 - self.calc = lambda x: x
37 - self.disks = []
44 + self.fahrenheit = self.configuration.get('fahrenheit')
45 + self.disks = list()
46
39 - def _get_disks(self):
47 + def get_disks(self):
48 try:
49 disks = self.configuration['devices']
42 - self.info("Using configured disks" + str(disks))
43 - except (KeyError, TypeError) as e:
50 + self.info("Using configured disks {0}".format(disks))
51 + except (KeyError, TypeError):
52 self.info("Autodetecting disks")
53 return ["/dev/" + f for f in os.listdir("/dev") if len(f) == 3 and f.startswith("sd")]
54
47 - ret = []
55 + ret = list()
56 for disk in disks:
57 if not disk.startswith('/dev/'):
58 disk = "/dev/" + disk
59 ret.append(disk)
52 - if len(ret) == 0:
60 + if not ret:
61 self.error("Provided disks cannot be found in /dev directory.")
62 return ret
63
@@ -59,10 +67,9 @@ class Service(SocketService):
67
68 if all(disk in data for disk in self.disks):
69 return True
62 -
70 return False
71
65 - def _get_data(self):
72 + def get_data(self):
73 """
74 Get data from TCP/IP socket
75 :return: dict
@@ -72,21 +79,20 @@ class Service(SocketService):
79 except AttributeError:
80 self.error("no data received")
81 return None
75 - data = {}
82 + data = dict()
83 for i in range(len(raw) // 5):
84 if not raw[i*5+1] in self.disks:
85 continue
86 try:
80 - val = self.calc(int(raw[i*5+3]))
87 + val = self.calc_temperature(int(raw[i*5+3]))
88 except ValueError:
89 val = 0
90 data[raw[i*5+1].replace("/dev/", "")] = val
91
85 - if len(data) == 0:
92 + if not data:
93 self.error("received data doesn't have needed records")
94 return None
88 - else:
89 - return data
95 + return data
96
97 def check(self):
98 """
@@ -94,27 +100,20 @@ class Service(SocketService):
100 :return: boolean
101 """
102 self._parse_config()
97 - self.disks = self._get_disks()
103 + self.disks = self.get_disks()
104
99 - data = self._get_data()
105 + data = self.get_data()
106 if data is None:
107 return False
108
103 - self.definitions = {
104 - 'temperatures': {
105 - 'options': ['disks_temp', 'Disks Temperatures', 'temperatures', 'hddtemp.temperatures', 'line'],
106 - 'lines': [
107 - # lines are created dynamically in `check()` method
108 - ]}
109 - }
110 - try:
111 - self.choice = next(self.choice)
112 - except StopIteration:
113 - self.definitions[ORDER[0]]['options'].insert(2, 'Celsius')
114 - else:
115 - self.calc = self.choice[1]
116 - self.definitions[ORDER[0]]['options'].insert(2, self.choice[0])
109 + if self.fahrenheit:
110 + self.definitions['temperatures']['options'][2] = 'Fahrenheit'
111
112 for name in data:
119 - self.definitions[ORDER[0]]['lines'].append([name])
113 + self.definitions['temperatures']['lines'].append([name])
114 return True
115 +
116 + def calc_temperature(self, value):
117 + if not self.fahrenheit:
118 + return value
119 + return value * 9 / 5 + 32