]> arthur.barton.de Git - netdata.git/blobdiff - python.d/hddtemp.chart.py
Changing hddtemp.chart.py to accept specified devices. Same way as [telegraph does...
[netdata.git] / python.d / hddtemp.chart.py
index 487e0ad330696aa1a4eaaa0436ecab3cf1e86076..8fe592beb696ceda5e83fcdefbc0492675ddee63 100644 (file)
@@ -2,6 +2,7 @@
 # Description: hddtemp netdata python.d module
 # Author: Pawel Krupa (paulfantom)
 
+import os
 from base import SocketService
 
 # default module values (can be overridden per job in `config`)
@@ -32,11 +33,40 @@ CHARTS = {
 class Service(SocketService):
     def __init__(self, configuration=None, name=None):
         SocketService.__init__(self, configuration=configuration, name=name)
+        self._keep_alive = False
         self.request = ""
         self.host = "127.0.0.1"
         self.port = 7634
         self.order = ORDER
         self.definitions = CHARTS
+        self.disks = []
+
+    def _get_disks(self):
+        try:
+            disks = self.configuration['devices']
+            print(disks)
+        except (KeyError, TypeError) as e:
+            self.info("Autodetecting disks")
+            return ["/dev/" + f for f in os.listdir("/dev") if len(f) == 3 and f.startswith("sd")]
+
+        ret = []
+        for disk in disks:
+            if not disk.startswith('/dev/'):
+                disk = "/dev/" + disk
+            if os.path.exists(disk):
+                ret.append(disk)
+        if len(ret) == 0:
+            self.error("Provided disks cannot be found in /dev directory.")
+        return ret
+
+    def _check_raw_data(self, data):
+        if not data.endswith('|'):
+            return False
+
+        if all(disk in data for disk in self.disks):
+            return True
+
+        return False
 
     def _get_data(self):
         """
@@ -50,6 +80,8 @@ class Service(SocketService):
             return None
         data = {}
         for i in range(len(raw) // 5):
+            if not raw[i*5+1] in self.disks:
+                continue
             try:
                 val = int(raw[i*5+3])
             except ValueError:
@@ -68,6 +100,8 @@ class Service(SocketService):
         :return: boolean
         """
         self._parse_config()
+        self.disks = self._get_disks()
+
         data = self._get_data()
         if data is None:
             return False