]> arthur.barton.de Git - netdata.git/blob - python.d/hddtemp.chart.py
hddtemp check raw data
[netdata.git] / python.d / hddtemp.chart.py
1 # -*- coding: utf-8 -*-
2 # Description: hddtemp netdata python.d module
3 # Author: Pawel Krupa (paulfantom)
4
5 from base import SocketService
6
7 # default module values (can be overridden per job in `config`)
8 #update_every = 2
9 priority = 60000
10 retries = 60
11
12 # default job configuration (overridden by python.d.plugin)
13 # config = {'local': {
14 #             'update_every': update_every,
15 #             'retries': retries,
16 #             'priority': priority,
17 #             'host': 'localhost',
18 #             'port': 7634
19 #          }}
20
21 ORDER = ['temperatures']
22
23 CHARTS = {
24     'temperatures': {
25         'options': ['disks_temp', 'temperature', 'Celsius', 'Disks temperature', 'hddtemp.temp', 'line'],
26         'lines': [
27             # lines are created dynamically in `check()` method
28         ]}
29 }
30
31
32 class Service(SocketService):
33     def __init__(self, configuration=None, name=None):
34         SocketService.__init__(self, configuration=configuration, name=name)
35         self._keep_alive = False
36         self.request = ""
37         self.host = "127.0.0.1"
38         self.port = 7634
39         self.order = ORDER
40         self.definitions = CHARTS
41
42     def _check_raw_data(self, data):
43         if not data.endswith('|'):
44             return False
45
46         if data.count('|') % 5 == 0:
47             return True
48
49         return False
50
51     def _get_data(self):
52         """
53         Get data from TCP/IP socket
54         :return: dict
55         """
56         try:
57             raw = self._get_raw_data().split("|")[:-1]
58         except AttributeError:
59             self.error("no data received")
60             return None
61         data = {}
62         for i in range(len(raw) // 5):
63             try:
64                 val = int(raw[i*5+3])
65             except ValueError:
66                 val = 0
67             data[raw[i*5+1].replace("/dev/", "")] = val
68
69         if len(data) == 0:
70             self.error("received data doesn't have needed records")
71             return None
72         else:
73             return data
74
75     def check(self):
76         """
77         Parse configuration, check if hddtemp is available, and dynamically create chart lines data
78         :return: boolean
79         """
80         self._parse_config()
81         data = self._get_data()
82         if data is None:
83             return False
84
85         for name in data:
86             self.definitions[ORDER[0]]['lines'].append([name])
87
88         return True
89
90