コード例 #1
0
 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
コード例 #2
0
 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)
コード例 #3
0
 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')
コード例 #4
0
 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
コード例 #5
0
 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
コード例 #6
0
 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
コード例 #7
0
 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