X-Git-Url: https://arthur.barton.de/gitweb/?a=blobdiff_plain;f=python.d%2Fmdstat.chart.py;h=0f7d2b444ef4b6b5ab7a20b6a8e2f49050f9f927;hb=f5fef72a72cfc1c799b7a9b37ff2dfa25e731420;hp=5198dbd83536839a6d1030289188fe62b277b3b2;hpb=4d99487f06b2309a2c2f74f38f27e12709106228;p=netdata.git diff --git a/python.d/mdstat.chart.py b/python.d/mdstat.chart.py index 5198dbd8..0f7d2b44 100644 --- a/python.d/mdstat.chart.py +++ b/python.d/mdstat.chart.py @@ -19,30 +19,40 @@ class Service(SimpleService): 'lines': []}} self.proc_mdstat = '/proc/mdstat' self.regex_disks = compile(r'((?<=\ )[a-zA-Z_0-9]+(?= : active)).*?((?<= \[)[0-9]+)/([0-9]+(?=\] ))') - self.regex_status = compile(r'([a-zA-Z_0-9]+)( : active)[^:]*?([a-z]+) = ([0-9.]+(?=%))') + self.regex_status = compile(r'([a-zA-Z_0-9]+)( : active)[^:]*?([a-z]+) = ([0-9.]+(?=%)).*?((?<=finish=)[0-9.]+)min speed=([0-9]+)') def check(self): raw_data = self._get_raw_data() if not raw_data: self.error('Cant read mdstat data from %s' % (self.proc_mdstat)) return False + + md_list = [md[0] for md in self.regex_disks.findall(raw_data)] + + if not md_list: + self.error('No active arrays in %s' % (self.proc_mdstat)) + return False else: - md_list = [md[0] for md in self.regex_disks.findall(raw_data)] for md in md_list: self.order.append(md) self.order.append(''.join([md, '_status'])) + self.order.append(''.join([md, '_rate'])) self.definitions['agr_health']['lines'].append([''.join([md, '_health']), md, 'absolute']) self.definitions[md] = {'options': - [None, 'MD disks stats', 'disks', md, 'md.disks', 'stacked'], + [None, '%s disks stats' % md, 'disks', md, 'md.disks', 'stacked'], 'lines': [[''.join([md, '_total']), 'total', 'absolute'], [''.join([md, '_inuse']), 'inuse', 'absolute']]} self.definitions[''.join([md, '_status'])] = {'options': - [None, 'MD current status', 'percent', md, 'md.status', 'line'], + [None, '%s current status' % md, 'percent', md, 'md.status', 'line'], 'lines': [[''.join([md, '_resync']), 'resync', 'absolute', 1, 100], [''.join([md, '_recovery']), 'recovery', 'absolute', 1, 100], + [''.join([md, '_reshape']), 'reshape', 'absolute', 1, 100], [''.join([md, '_check']), 'check', 'absolute', 1, 100]]} + self.definitions[''.join([md, '_rate'])] = {'options': + [None, '%s operation status' % md, 'rate', md, 'md.rate', 'line'], + 'lines': [[''.join([md, '_finishin']), 'finish min', 'absolute', 1, 100], + [''.join([md, '_rate']), 'megabyte/s', 'absolute', -1, 100]]} self.info('Plugin was started successfully. MDs to monitor %s' % (md_list)) - to_netdata = {} return True @@ -76,9 +86,14 @@ class Service(SimpleService): to_netdata[''.join([md[0], '_health'])] = int(md[1]) - int(md[2]) to_netdata[''.join([md[0], '_check'])] = 0 to_netdata[''.join([md[0], '_resync'])] = 0 + to_netdata[''.join([md[0], '_reshape'])] = 0 to_netdata[''.join([md[0], '_recovery'])] = 0 + to_netdata[''.join([md[0], '_finishin'])] = 0 + to_netdata[''.join([md[0], '_rate'])] = 0 for md in mdstat_status: to_netdata[''.join([md[0], '_' + md[2]])] = round(float(md[3]) * 100) + to_netdata[''.join([md[0], '_finishin'])] = round(float(md[4]) * 100) + to_netdata[''.join([md[0], '_rate'])] = round(float(md[5]) / 1000 * 100) return to_netdata