def performance(self, metric, resource):
        """
        Format performance data.

        :param metric: Metric
        :param resource: Resource
        :return: Performance
        """
        # for dev mode
        if len(metric.value) == 1:
            crit = nagiosplugin.Range("~:0".format(int(round(len(metric.value) / 2))))
            warn = None

        # for 3 node cluster
        elif 1 < len(metric.value) < 4:
            crit = nagiosplugin.Range("~:2".format(int(round(len(metric.value) / 2))))
            warn = None

        # anything bigger
        if len(metric.value) >= 4:
            crit = nagiosplugin.Range("~:{}".format(int(round(len(metric.value) / 2))))
            warn = nagiosplugin.Range("{}:{}".format(int(round(len(metric.value) / 2))+1, len(metric.value)-1))

        return nagiosplugin.Performance(
            label="OK ZK nodes",
            value=len(metric.value),
            uom="Number",
            warn=warn,
            crit=crit,
        )
예제 #2
0
 def add_explicit(self):
     seen = set()
     for params in self.filesystems:
         (mp, warn, crit, disksize, normsize, magic) = (
             params.split(",") + [None, None, None, None, None]
         )[0:6]
         seen.add(mp)
         if not warn:
             warn = self.ranges[0]
         if not crit:
             crit = self.ranges[1]
         disksize = float(disksize) if disksize else None
         normsize = float(normsize) if normsize else self.normsize
         magic = float(magic) if magic else self.magic
         params = Parameters(
             self.check,
             mp,
             (nagiosplugin.Range(warn), nagiosplugin.Range(crit)),
             self.cap,
             normsize,
             magic,
             disksize,
         )
         params.register_resource()
     return seen
예제 #3
0
 def __init__(self, check, args):
     self.check = check
     self.allowed_types = [f.strip() for f in args.fstypes.split(',')]
     self.ranges = (nagiosplugin.Range(args.warning),
                    nagiosplugin.Range(args.critical))
     self.cap = (float(args.min_warning), float(args.min_critical))
     self.normsize = float(args.normsize)
     self.magic = float(args.magic)
     self.filesystems = args.filesystem
예제 #4
0
    def __init__(self,
                 name,
                 check_lifetime=True,
                 warning_days=0,
                 critical_days=0,
                 fmt_metric='Valid for {value} days') -> None:
        super().__init__(name, fmt_metric=fmt_metric)

        self.name = name
        self.check_lifetime = check_lifetime
        self.warning_days = warning_days
        self.critical_days = critical_days
        self.warning = nagiosplugin.Range('@%d:' % self.warning_days)
        self.critical = nagiosplugin.Range('@%d:' % self.critical_days)
def main():
    args = parser()
    check = nagiosplugin.Check(
        QJM(args),
        nagiosplugin.ScalarContext('processing', args.process_warn,
                                   args.process_crit),
        nagiosplugin.ScalarContext('sync', args.sync_threshold_warn,
                                   args.sync_threshold_crit),
        stringContext.StringContext('connection', "OK"),
        nagiosplugin.ScalarContext(
            'quorum',
            nagiosplugin.Range("%s:" % str(len(args.qjm.split(',')) / 2)),
            nagiosplugin.Range("%s:" % str(len(args.qjm.split(',')) / 2))))
    check.main()
예제 #6
0
 def magic_range(self, range, cap):
     relsize = self.disksize / self.normsize
     effective_size = relsize**self.magic
     scale = effective_size / relsize
     new_max = round(100.0 - (100.0 - range.end) * scale, 1)
     new = '{}:{}'.format(range.start, max(new_max, cap))
     _log.debug('magic({}, {}) -> {}'.format(self.disksize, range, new))
     return nagiosplugin.Range(new)
예제 #7
0
def main():
    argp = argparse.ArgumentParser()
    argp.add_argument('-H',
                      '--host',
                      required=True,
                      help='The hostname of a Mesos master to check')
    argp.add_argument('-P',
                      '--port',
                      default=5050,
                      help='The Mesos master HTTP port - defaults to 5050')
    argp.add_argument(
        '-n',
        '--slaves',
        default=1,
        help='The minimum number of slaves the cluster must be running')
    argp.add_argument(
        '-F',
        '--framework',
        default=[],
        action='append',
        help=
        'Check that a framework is registered matching the given regex, may be specified multiple times'
    )
    argp.add_argument('-v',
                      '--verbose',
                      action='count',
                      default=0,
                      help='increase output verbosity (use up to 3 times)')

    args = argp.parse_args()

    unhealthy_range = nagiosplugin.Range('%d:%d' % (HEALTHY - 1, HEALTHY + 1))
    slave_range = nagiosplugin.Range('%s:' % (args.slaves, ))

    check = nagiosplugin.Check(
        MesosMaster('http://%s:%d' % (args.host, int(args.port)),
                    args.framework),
        nagiosplugin.ScalarContext('leader redirect', unhealthy_range,
                                   unhealthy_range),
        nagiosplugin.ScalarContext('master health', unhealthy_range,
                                   unhealthy_range),
        nagiosplugin.ScalarContext('active slaves', slave_range, slave_range),
        nagiosplugin.ScalarContext('active leader', '1:1', '1:1'),
        nagiosplugin.ScalarContext('framework', '0:0', '0:0'))
    check.main(verbose=args.verbose)
예제 #8
0
def main():
    argp = argparse.ArgumentParser()
    argp.add_argument('-d',
                      '--discovery',
                      required=True,
                      help='The URL of the discovery server')
    argp.add_argument('-s',
                      '--service',
                      required=True,
                      help='The service name to check')
    argp.add_argument('-e',
                      '--endpoint',
                      default='/health',
                      help='The endpoint to check')
    argp.add_argument('-t', '--timeout', default=5, help='Timeout')
    argp.add_argument('-n',
                      '--instances',
                      default=1,
                      help='Minimum instances before critical')
    argp.add_argument('-w',
                      '--warn',
                      default=-1,
                      help='Minimum instances before warn')
    argp.add_argument('-v',
                      '--verbose',
                      action='count',
                      default=0,
                      help='increase output verbosity (use up to 3 times)')

    args = argp.parse_args()

    unhealthy_range = nagiosplugin.Range('%d:%d' % (HEALTHY - 1, HEALTHY + 1))
    warn_services_range = nagiosplugin.Range('%s:' % (args.warn, ))
    crit_services_range = nagiosplugin.Range('%s:' % (args.instances, ))

    try:
        discovery_state = requests.get(args.discovery + '/state',
                                       timeout=4).json()
    except ValueError, e:
        log.error('ValueError while parsing discovery state: %s', e)
        discovery_state = []
예제 #9
0
def main(config):
    """
    Required configs:

    - host
    """
    kwargs = dict(
        host=config['host'],
        port=config['port']
    )

    return (
        SslConfiguration(**kwargs),
        nap.ScalarContext('sslscore',
                          nap.Range('@65:80'), nap.Range('@0:65')),
        nap.ScalarContext('serverHostname',
                          nap.Range('@65:80'), nap.Range('@0:65')),
        nap.ScalarContext('validationResult',
                          nap.Range('@65:80'), nap.Range('@0:65')),
        nap.ScalarContext('expireInDays',
                          nap.Range('@65:80'), nap.Range('@0:65')),
        SslSummary(**kwargs)
    )
예제 #10
0
 def test_accept_none_warning_critical(self):
     c = ScalarContext('ctx')
     self.assertEqual(nagiosplugin.Range(), c.warning)
     self.assertEqual(nagiosplugin.Range(), c.critical)
 def __init__(self, name, r,
              fmt_metric='{name} expires in {valueunit}',
              result_cls=np.Result):
     super(CertificateContext, self).__init__(name, fmt_metric, result_cls)
     self.r = np.Range(r)
 def __init__(self, r):
     self.r = np.Range(r)
예제 #13
0
 def __init__(self):
     super(StartupTimeContext, self).__init__('startup_time')
     if opts.scope_startup_time:
         self.warning = nagiosplugin.Range(opts.warning)
         self.critical = nagiosplugin.Range(opts.critical)