]> 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 1beae67a4ec9f3ab3787b987c547902ee74c32ee..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`)
@@ -38,12 +39,31 @@ class Service(SocketService):
         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 data.count('|') % 5 == 0:
+        if all(disk in data for disk in self.disks):
             return True
 
         return False
@@ -60,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:
@@ -78,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