@cryptotaxi247 / netdata-1 / commits / ff7fae213

add resync/check/recovery progress charts

lgz committed Jan 1, 2017 at 18:06 UTC ff7fae21368bac6dca440108436fa6809a07f57c
1 file changed +16 -2
python.d/mdstat.chart.py
+16 -2
@@ -19,6 +19,7 @@ class Service(SimpleService):
19 'lines': []}}
20 self.proc_mdstat = '/proc/mdstat'
21 self.regex_disks = compile(r'((?<=\ )[a-zA-Z_0-9]+(?= : active)).*?((?<= \[)[0-9]+)/([0-9]+(?=\] ))')
22 + self.regex_status = compile(r'([a-zA-Z_0-9]+)( : active)[^:]*?([a-z]+) = ([0-9.]+(?=%))')
23
24 def check(self):
25 raw_data = self._get_raw_data()
@@ -29,11 +30,17 @@ class Service(SimpleService):
30 md_list = [md[0] for md in self.regex_disks.findall(raw_data)]
31 for md in md_list:
32 self.order.append(md)
33 + self.order.append(''.join([md, '_status']))
34 self.definitions['agr_health']['lines'].append([''.join([md, '_health']), md, 'absolute'])
35 self.definitions[md] = {'options':
36 [None, 'MD disks stats', 'disks', md, 'md.stats', 'stacked'],
37 'lines': [[''.join([md, '_total']), 'total', 'absolute'],
38 [''.join([md, '_inuse']), 'inuse', 'absolute']]}
39 + self.definitions[''.join([md, '_status'])] = {'options':
40 + [None, 'MD current status', 'percent', md, 'md.status', 'line'],
41 + 'lines': [[''.join([md, '_resync']), 'resync', 'absolute'],
42 + [''.join([md, '_recovery']), 'recovery', 'absolute'],
43 + [''.join([md, '_check']), 'check', 'absolute']]}
44 self.info('Plugin was started successfully. MDs to monitor %s' % (md_list))
45
46 return True
@@ -58,12 +65,19 @@ class Service(SimpleService):
65 :return: dict
66 """
67 raw_mdstat = self._get_raw_data()
61 - mdstat = self.regex_disks.findall(raw_mdstat)
68 + mdstat_disks = self.regex_disks.findall(raw_mdstat)
69 + mdstat_status = self.regex_status.findall(raw_mdstat)
70 to_netdata = {}
71
64 - for md in mdstat:
72 + for md in mdstat_disks:
73 to_netdata[''.join([md[0], '_total'])] = int(md[1])
74 to_netdata[''.join([md[0], '_inuse'])] = int(md[2])
75 to_netdata[''.join([md[0], '_health'])] = int(md[1]) - int(md[2])
76 + to_netdata[''.join([md[0], '_check'])] = 0
77 + to_netdata[''.join([md[0], '_resync'])] = 0
78 + to_netdata[''.join([md[0], '_recovery'])] = 0
79 +
80 + for md in mdstat_status:
81 + to_netdata[''.join([md[0], '_' + md[2]])] = round(float(md[3]))
82
83 return to_netdata