def check(self, request): if os.geteuid() != 0: os.seteuid(0) p = PingPing(request.alloutput, request.host, request.timeout, request.packetsize) if p.is_unknown_host: return nagios.Result("PING", nagios.Status.UNKNOWN, "Unknown host: %s" % (request.host), request.appname) p.run(request.count) # ATTENTION: if nothing receive, it's critical anyway if p.receive_count == 0: status_code = nagios.Status.CRITICAL else: status_code = self.verdict(p.lost_rate, request.warn, request.crit) msg = "Packet loss = %s %%, RTA = %.3f ms" % (p.lost_rate, p.rta) # save traceroute(request, tr_msg) if status_code > nagios.Status.OK: tr_msg = self.check_traceroute(request) self.save_output(request, tr_msg) msg += " " + tr_msg # generate result r = nagios.Result("PING", status_code, msg, request.appname) r.add_performance_data("lost_rate", p.lost_rate, UOM="%", warn=request.warn, crit=request.crit) r.add_performance_data("rta", p.rta, UOM="ms") return r
def get_bytes_transfer(self, request): # read data from command line, calculate and verdict attrs = ["Bytes_received", "Bytes_sent"] values = [] total = 0 status_code = nagios.Status.OK for attr in attrs: v = float(self.get_delta_value(attr, request)) / 1024 / 1024 values.append(v) total += v status_code = self.superimpose(status_code, v, request.warn, request.crit) # build result r = nagios.Result(request.option, status_code, '%sMB in total' % total, request.appname) r.add_performance_data('total', total, 'MB', warn=request.warn, crit=request.crit) r.add_performance_data('bytes_received', values[0], 'MB', warn=request.warn, crit=request.crit) r.add_performance_data('bytes_sent', values[1], 'MB', warn=request.warn, crit=request.crit) return r
def get_transactions(self, request): # read data from command line, calculate and verdict attrs = ["Handler_commit", "Handler_rollback"] values = [] total = 0 status_code = nagios.Status.OK for attr in attrs: v = self.get_delta_value(attr, request) values.append(v) total += v status_code = self.superimpose(status_code, v, request.warn, request.crit) # build result r = nagios.Result(request.option, status_code, '%s transactions' % total, request.appname) r.add_performance_data('total', total, warn=request.warn, crit=request.crit) r.add_performance_data('commit', values[0], warn=request.warn, crit=request.crit) r.add_performance_data('rollback', values[1], warn=request.warn, crit=request.crit) return r
def get_queue_length(self, request): stats = {} query = "smembers resque:queues" output = self.run_query(request, query) total = 0 status_code = nagios.Status.OK query_pattern = "llen resque:queue:%s" for q in output.split('\n'): if q: v = self.run_query(request, query_pattern % q) stats[q] = int(v) total += stats[q] sc = self.verdict(v, request.warn, request.crit) if sc == nagios.Status.WARNING and status_code == nagios.Status.OK: status_code = nagios.Status.WARNING elif sc == nagios.Status.CRITICAL: status_code = nagios.Status.CRITICAL r = nagios.Result(request.option, status_code, '%s jobs in queues' % total, request.appname) r.add_performance_data('total', total, warn=request.warn, crit=request.crit) for k, v in stats.iteritems(): r.add_performance_data(k, v, warn=request.warn, crit=request.crit) return r
def get_overall_health(self, request): disklist = self._get_disks(request) # load the SMART info of adaptec raid controller status_code, message = self.check_health_status(request, disklist) r = nagios.Result(request.option, status_code, message, request.appname) return r
def test_result_str(self): # a result w/out pf data r = nagios.Result('SLOW_QUERIES', nagios.Status.OK, '2 queries', 'MYSQL') expected = 'SLOW_QUERIES OK: 2 queries' self.assertEqual(expected, str(r)) # one performance data added r.add_performance_data('slow_queries', 2, warn=10, crit=20) expected = 'SLOW_QUERIES OK: 2 queries | slow_queries=2;10;20' self.assertEqual(expected, str(r)) # two performance data added r.add_performance_data('slow_queries_rate', 0.2, warn=0.5, crit=1) expected = 'SLOW_QUERIES OK: 2 queries | slow_queries=2;10;20 slow_queries_rate=0.2;0.5;1' self.assertEqual(expected, str(r))
def get_select_stats(self, request): # read data from command line, calculate and verdict attrs = [ "Select_full_join", "Select_full_range_join", "Select_range", "Select_range_check", "Select_scan" ] values = [] total = 0 status_code = nagios.Status.OK for attr in attrs: v = self.get_delta_value(attr, request) values.append(v) total += v status_code = self.superimpose(status_code, v, request.warn, request.crit) # build result r = nagios.Result(request.option, status_code, '%s joins' % total, request.appname) r.add_performance_data('total', total, warn=request.warn, crit=request.crit) r.add_performance_data('select_full_join', values[0], warn=request.warn, crit=request.crit) r.add_performance_data('select_full_range_join', values[1], warn=request.warn, crit=request.crit) r.add_performance_data('select_range', values[2], warn=request.warn, crit=request.crit) r.add_performance_data('select_range_check', values[3], warn=request.warn, crit=request.crit) r.add_performance_data('select_scan', values[4], warn=request.warn, crit=request.crit) return r
def get_result(self, request, sub_perfs, message): status_code = nagios.Status.OK r = nagios.Result(request.option, status_code, message, request.appname) critical = request.crit for disk, attribute in sub_perfs.iteritems(): if not critical: critical = attribute.threshold status_code = self.superimpose(status_code, attribute.value, request.warn, critical, reverse=True) r.add_performance_data(disk, attribute.value, warn=request.warn, crit=critical) r.set_status_code(status_code) return r
def get_adaptec_health(self, request): if sys.platform == "win32": raise nagios.StatusUnknownError( request, "Adaptec Health only supported on linux.") disklist = self._get_disks(request) diskdict = self._detect_adaptec(disklist, request) if not diskdict: raise nagios.StatusUnknownError( request, "No Adaptec Raid Controller detected.") message = "" cmd = nagios.rootify("/usr/StorMan/arcconf getlogs 1 stats") output = commands.getoutput(cmd) if not self._validate_arcconf_output(request, output): return xml = output[output.index("<ControllerLog" ):output.index("</ControllerLog>") + 16] dom = parseString(xml) status_code = nagios.Status.OK if not request.warn: warn = 1 else: warn = request.warn sub_perfs = [] for statsnodee in dom.getElementsByTagName("physicaldrivestats"): value = int(statsnodee.getAttribute("smartWarnCnt")) disk = diskdict[statsnodee.getAttribute("id")] if value > 0: if message == "": message = "smart warnings:" message += " %s=%s" % (disk, value) status_code = self.superimpose(status_code, value, warn, request.crit) sub_perfs.append((disk, value)) if message == "": message = "no smart warning" r = nagios.Result(request.option, status_code, message, request.appname) for disk, value in sub_perfs: r.add_performance_data(disk, value, warn=warn, crit=request.crit) return r
def get_row_opertions(self, request): # read data from command line, calculate and verdict attrs = [ "Innodb_rows_deleted", "Innodb_rows_inserted", "Innodb_rows_updated", "Innodb_rows_read" ] values = [] total = 0 status_code = nagios.Status.OK for attr in attrs: v = self.get_delta_value(attr, request) values.append(v) total += v status_code = self.superimpose(status_code, v, request.warn, request.crit) # build result r = nagios.Result(request.option, status_code, '%s row operations' % total, request.appname) r.add_performance_data('total', total, warn=request.warn, crit=request.crit) r.add_performance_data('rows_deleted', values[0], warn=request.warn, crit=request.crit) r.add_performance_data('rows_inserted', values[1], warn=request.warn, crit=request.crit) r.add_performance_data('rows_updated', values[2], warn=request.warn, crit=request.crit) r.add_performance_data('rows_read', values[3], warn=request.warn, crit=request.crit) return r
def test_wrapper(): result = nagios.Result("STATSWRAPPER", 0, appname="nagios") result.add_performance_data("total", 1) return result
def testfunc3(*arg, **kwargs): result = nagios.Result("TIMER_COMMAND", nagios.Status.OK) result.add_performance_data("total", 10) return result
def get_replication(self, request): return nagios.Result(request.option, nagios.Status.UNKNOWN, "mysterious status", request.appname)
def get_network_traffic(self, request): return nagios.Result(request.option, nagios.Status.UNKNOWN, "mysterious status", request.appname)
def get_command_frequency(self, request): return nagios.Result(request.option, nagios.Status.UNKNOWN, "mysterious status", request.appname)