From: paulfantom Date: Sun, 14 Aug 2016 11:41:19 +0000 (+0200) Subject: Changing hddtemp.chart.py to accept specified devices. Same way as [telegraph does... X-Git-Tag: v1.3.0~27^2~5 X-Git-Url: https://arthur.barton.de/gitweb/?a=commitdiff_plain;h=8ef42532167c2f4f2e48736b43385bf2f51b7925;hp=17d80a1ef354d6938d2844ed52d89b1cf3e22669;p=netdata.git Changing hddtemp.chart.py to accept specified devices. Same way as [telegraph does it](https://github.com/influxdata/telegraf/tree/master/plugins/inputs/hddtemp) --- diff --git a/conf.d/python.d/hddtemp.conf b/conf.d/python.d/hddtemp.conf index f3cb667a..0c78449b 100644 --- a/conf.d/python.d/hddtemp.conf +++ b/conf.d/python.d/hddtemp.conf @@ -60,11 +60,14 @@ # port: PORT # the port to connect to # -# By default this module will try to autodetect number of disks. -# However this can be overridden by setting variable `disk_count` to -# desired number of disks. Example for two disks: +# By default this module will try to autodetect disks +# (autodetection works only for disk which names start with "sd"). +# However this can be overridden by setting variable `disks` to +# array of desired disks. Example for two disks: # -# disk_count: 2 +# devices: +# - sda +# - sdb # # ---------------------------------------------------------------------- diff --git a/python.d/hddtemp.chart.py b/python.d/hddtemp.chart.py index beef6416..8fe592be 100644 --- a/python.d/hddtemp.chart.py +++ b/python.d/hddtemp.chart.py @@ -39,23 +39,31 @@ class Service(SocketService): self.port = 7634 self.order = ORDER self.definitions = CHARTS - self.disk_count = 1 - self.exclude = [] + self.disks = [] - def _get_disk_count(self): - all_disks = [f for f in os.listdir("/dev") if len(f) == 3 and f.startswith("sd")] - for disk in self.exclude: - try: - all_disks.remove(disk) - except: - self.debug("Disk not found") - return len(all_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 * self.disk_count) == 0: + if all(disk in data for disk in self.disks): return True return False @@ -72,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: @@ -90,18 +100,7 @@ class Service(SocketService): :return: boolean """ self._parse_config() - try: - self.exclude = list(self.configuration['exlude']) - except (KeyError, TypeError) as e: - self.info("No excluded disks") - self.debug(str(e)) - - try: - self.disk_count = int(self.configuration['disk_count']) - except (KeyError, TypeError) as e: - self.info("Autodetecting number of disks") - self.disk_count = self._get_disk_count() - self.debug(str(e)) + self.disks = self._get_disks() data = self._get_data() if data is None: