"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