示例#1
0
    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
示例#2
0
    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
示例#3
0
    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
示例#4
0
    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
示例#5
0
    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
示例#6
0
 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))
示例#7
0
    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
示例#8
0
 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
示例#9
0
    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
示例#10
0
    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
示例#11
0
 def test_wrapper():
     result = nagios.Result("STATSWRAPPER", 0, appname="nagios")
     result.add_performance_data("total", 1)
     return result
示例#12
0
 def testfunc3(*arg, **kwargs):
     result = nagios.Result("TIMER_COMMAND", nagios.Status.OK)
     result.add_performance_data("total", 10)
     return result
示例#13
0
 def get_replication(self, request):
     return nagios.Result(request.option, nagios.Status.UNKNOWN,
                          "mysterious status", request.appname)
示例#14
0
 def get_network_traffic(self, request):
     return nagios.Result(request.option, nagios.Status.UNKNOWN,
                          "mysterious status", request.appname)
示例#15
0
 def get_command_frequency(self, request):
     return nagios.Result(request.option, nagios.Status.UNKNOWN,
                          "mysterious status", request.appname)