def get_connections_used(self, request): current = nagios.to_num( self.run_query(request, "db.serverStatus().connections.current")) available = nagios.to_num( self.run_query(request, "db.serverStatus().connections.available")) value = int(float(current / (available + current)) * 100) return self.get_result(request, value, str(value) + '% connections used', 'conns_used', UOM="%")
def get_current_queue_readers(self, request): query = "db.serverStatus().globalLock.currentQueue.readers" value = nagios.to_num(self.run_query(request, query)) print value return self.get_result(request, value, '%s operations waiting for read-lock' % value, 'cur_queue_readers')
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 _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 get_memory_used(self, request): query = "db.serverStatus().mem.resident" value = nagios.to_num(self.run_query(request, query)) return self.get_result(request, value, '%sMB resident size' % value, 'res', UOM='MB')
def get_delta_value(self, statkey, request, query): output = self.run_query(request, query) value = nagios.to_num(output) laststats = self.retrieve_last_status(request) last_value = laststats.setdefault(statkey, 0) laststats[statkey] = value self.save_status(request, laststats) return value - last_value
def _parse_output(self, request, output): for l in output.split('\n')[3:-1]: fields = l.split('|')[1:3] k = fields[0].strip() v = fields[1].strip() value = nagios.to_num(v) if value is not None: yield k, value
def _parse_output(self, request, output): for l in output.split('\n'): try: k, v = l.split(':') value = nagios.to_num(v) if value is not None: yield k, value except ValueError: pass
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_miss_ratio(self, request): # Checks versioning, btree used for monogdb v2.2 version = self.run_query(request,"db.version()").split('.') v22 = False query = "db.serverStatus().indexCounters.missRatio" if (version[0] is 2): if (version[1] <= 2): query = "db.serverStatus().indexCounters.btree.missRatio" value = nagios.to_num(self.run_query(request, query)) return self.get_result(request, value, str(value) + '% missed', 'ratio', UOM="%")
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 _parse_output(self, request, output): for l in output.split('\r\n'): triple = l.split(" ") if triple[0] != "STAT": continue k = triple[1] v = triple[2] value = nagios.to_num(v) if value is not None: yield k, value
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 get_miss_ratio(self, request): # Checks versioning, btree used for monogdb v2.2 version = self.run_query(request, "db.version()").split('.') v22 = False query = "db.serverStatus().indexCounters.missRatio" if (version[0] is 2): if (version[1] <= 2): query = "db.serverStatus().indexCounters.btree.missRatio" value = nagios.to_num(self.run_query(request, query)) return self.get_result(request, value, str(value) + '% missed', 'ratio', UOM="%")
def get_active_clients_writers(self, request): query = "db.serverStatus().globalLock.activeClients.writers" value = nagios.to_num(self.run_query(request, query)) return self.get_result(request, value, '%s active writers clients' % value, 'writers')
def _parse_output(self, request, output): for l in output.split('\r\n'): k, v = l.split(':') value = nagios.to_num(v) if value is not None: yield k, value
def get_current_queue_total(self, request): query = "db.serverStatus().globalLock.currentQueue.total" value = nagios.to_num(self.run_query(request, query)) return self.get_result(request, value, '%s operations waiting for locks' % value, 'cur_queue_total')
def get_active_clients_total(self, request): query = "db.serverStatus().globalLock.activeClients.total" value = nagios.to_num(self.run_query(request, query)) return self.get_result(request, value, '%s total active clients' % value, 'total')
def get_backgroundflushing_average(self, request): query = "db.serverStatus().backgroundFlushing.average_ms" value = nagios.to_num(self.run_query(request, query)) return self.get_result(request, value, '%s average ms spent flushing' % value, 'average_ms')
def get_backgroundflushing_last(self, request): query = "db.serverStatus().backgroundFlushing.last_ms" value = nagios.to_num(self.run_query(request, query)) return self.get_result(request, value, '%s ms spent last flush' % value, 'last_ms')
def get_connections_used(self, request): current = nagios.to_num(self.run_query(request, "db.serverStatus().connections.current")) available = nagios.to_num(self.run_query(request, "db.serverStatus().connections.available")) value = int(float(current / (available + current)) * 100) return self.get_result(request, value, str(value) + '% connections used', 'conns_used', UOM="%")
def get_connections(self, request): query = "db.serverStatus().connections.current" value = nagios.to_num(self.run_query(request, query)) return self.get_result(request, value, '%s current connections' % value, 'conns')
def get_connections(self, request): query = "db.serverStatus().connections.current" value = nagios.to_num(self.run_query(request, query)) return self.get_result(request, value, '%s new connections' % value, 'conns')
def get_miss_ratio(self, request): query = "db.serverStatus().indexCounters.btree.missRatio" value = nagios.to_num(self.run_query(request, query)) return self.get_result(request, value, str(value) + '% missed', 'ratio', UOM="%")
def get_connections_available(self, request): query = "db.serverStatus().connections.available" value = nagios.to_num(self.run_query(request, query)) return self.get_result(request, value, '%s available connections' % value, 'conns_available')