Source code for check_pa.modules.load

# -*- coding: utf-8 -*-

import logging

import nagiosplugin as np

from check_pa.xml_reader import XMLReader, Finder

_log = logging.getLogger('nagiosplugin')


[docs]def create_check(args): """ Creates and configures a check for the load command. :return: the load check. """ return np.Check( Load(args.host, args.token), np.ScalarContext('load', args.warn, args.crit), LoadSummary())
[docs]class Load(np.Resource): def __init__(self, host, token): self.host = host self.token = token self.cmd = '<show><running><resource-monitor><minute><last>1<%2Flast' \ '>' \ '<%2Fminute><%2Fresource-monitor><%2Frunning><%2Fshow>' self.xml_obj = XMLReader(self.host, self.token, self.cmd)
[docs] def probe(self): """ Querys the REST-API and create load metrics. :return: a load metric. """ _log.info('Reading XML from: %s', self.xml_obj.build_request_url()) soup = self.xml_obj.read() cpuavg = soup.find('cpu-load-average') for entry in cpuavg.find_all('entry'): coreid = int(Finder.find_item(entry, 'coreid')) cpu_load = float(Finder.find_item(entry, 'value')) yield np.Metric('CPU%d' % coreid, cpu_load, '%', min=0, max=100, context='load')
[docs]class LoadSummary(np.Summary):
[docs] def ok(self, results): l = [] for cpu in results.results: s = '%s: %s%%' % (cpu.metric.name, cpu.metric.value) _log.debug('Add result %r', s) l.append(s) _log.debug('CPU count: %d' % len(l)) output = ", ".join(l) return str(output)