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