def _parse_output(self, request, output): fields = output.split('\n')[1].strip().split() headers = [ "insert", "query", "update", "delete", "getmore", "command", "flushes", "mapped", "vsize", "res", "faults", "locked %", "idx miss %", "qr|qw", "ar|aw", "netIn", "netOut", "conn", "time" ] for k, v in zip(headers, fields): if k == "time": uptime = [int(t) for t in v.split(":")] if len(uptime) != 3: raise nagios.OutputFormatError(request, output) sec = datetime.timedelta(hours=uptime[0], minutes=uptime[1], seconds=uptime[2]).total_seconds() yield k, sec elif "|" in k: for k, v in zip(k.split("|"), v.split("|")): value = nagios.to_num(v) if value: yield k, value else: pattern = re.compile('(\d+)[mkb]?') matchResult = pattern.match(v) if not matchResult: raise nagios.OutputFormatError(request, output) value = int(matchResult.groups(1)[0]) yield k, value
def _single_value_stat(self, request, query): rows = self.run_query(request, query) if len(rows) > 0 or len(rows[0]) > 0: value = nagios.to_num(rows[0][0]) if value is None: raise nagios.OutputFormatError(request, rows) return value else: raise nagios.StatusUnknownError(request.option)
def get_total_keys(self, request): cmd = "redis-cli dbsize" output = commands.getoutput(cmd) dbsize_pattern = re.compile(".*?(\d+)") matchResult = dbsize_pattern.match(output) if not matchResult: raise nagios.OutputFormatError(request, output) value = int(matchResult.groups(1)[0]) return self.get_result(request, value, '%s total keys' % value, 'total_keys')
def _multi_value_stats(self, request, query): sub_stats = {} rows = self.run_query(request, query) for substatname, value in rows: value = nagios.to_num(value) if value is None: raise nagios.OutputFormatError(request, rows) sub_stats[substatname] = value stat = reduce(lambda x, y: x + y, sub_stats.itervalues(), 0) return stat, sub_stats
def _parse_output(self, request, output): for l in output.split('\n'): pair = l.split('=') if len(pair) == 2: k = pair[0].strip() v = pair[1].strip() value = nagios.to_num(v) if value is None: raise nagios.OutputFormatError(request, output) yield k, value
def _validate_output(self, request, output): if "command not found" in output or \ "Can't connect to MySQL server on" in output: raise nagios.ServiceInaccessibleError(request, output) elif "Access denied for user" in output: raise nagios.AuthenticationFailedError(request, output) elif "mysqladmin: connect to server at" in output: raise nagios.OutputFormatError(request, output) elif output.strip() == "": return False return True
def _validate_output(self, request, output): if ("command not found" in output or "psql: could not connect to server" in output): raise nagios.ServiceInaccessibleError(request, output) elif (("psql: FATAL: role" in output and "does not exist" in output) or "psql: fe_sendauth: no password supplied" in output): raise nagios.AuthenticationFailedError(request, output) elif "does not exist" in output or "psql:" in output: raise nagios.OutputFormatError(request, output) elif output.strip() == "": return False return True