if not plugin.options.sensorid: plugin.back2nagios(3, "Need at least one sensor id!") # Make list of sensor ids if "," in plugin.options.sensorid: plugin.options.sensorid = plugin.options.sensorid.split(",") else: plugin.options.sensorid = [plugin.options.sensorid] # Check all sensor ids are hex re_hex = re.compile("^[0-9A-Fa-f]+$") for sid in plugin.options.sensorid: if not re_hex.search(sid): plugin.back2nagios(3, 'Sensor id "%s" must be integer or hex!' % sid) plugin.verbose(1, "Sensor id(s): " + " - ".join([str(s) for s in plugin.options.sensorid])) searchpattern = re.compile( r"(\d+)\s+Sensor:\s*([0-9A-Za-z]+)\s+Raw:\s*(-?[0-9\.]+)?\s+Value:\s*(-?[0-9\.]+)\s+Unit:\s*(\S+)\b" ) for sensorid in plugin.options.sensorid: filename = os.path.join(plugin.options.path, "%s%s" % (plugin.options.basefilename, sensorid)) try: plugin.verbose(2, "Reading sensor %s" % sensorid) data = file(filename).readlines() except IOError: plugin.back2nagios(3, 'Could not read file "%s"' % filename) if plugin.options.verbose >= 3: plugin.verbose(3, "Read line(s):" % data)
plugin.add_cmdlineoption('-c', '', 'crit', 'warning thresold', default='50') plugin.add_cmdlineoption('', '--statistics', 'statistics', 'Output worker statistics', action='store_true') plugin.parse_cmdlineoptions() if plugin.options.proto not in ['http', 'https']: plugin.back2nagios(3, 'Unknown protocol "' + plugin.options.proto + '"') if not plugin.options.port: if plugin.options.proto == 'https': plugin.options.port = '443' else: plugin.options.port = '80' url = plugin.options.proto + '://' + plugin.options.host + ':' + plugin.options.port + '/' + plugin.options.url + '?auto' plugin.verbose(1, 'Status URL: ' + url) if plugin.options.httpauth: httpauth = plugin.options.httpauth.split(':') if len(httpauth) != 2: plugin.back2nagios(3, 'Wrong format of authentication data! Need "USERNAME:PASSWORD", got "' + plugin.options.httpauth + '"') passman = urllib2.HTTPPasswordMgrWithDefaultRealm() passman.add_password(None, url, httpauth[0], httpauth[1]) authhandler = urllib2.HTTPBasicAuthHandler(passman) opener = urllib2.build_opener(authhandler) urllib2.install_opener(opener) try: data = urllib2.urlopen(url).read() except urllib2.HTTPError, e: plugin.back2nagios(2, 'Could not read data! ' + str(e))
'PERFORMANCE': ['AVGACTSVCLAT', 'AVGPSVSVCLAT', 'AVGACTSVCEXT', 'AVGACTHSTLAT', 'AVGPSVHSTLAT', 'AVGACTHSTEXT', ], 'PEAK': [ 'MAXACTSVCLAT', 'MAXPSVSVCLAT', 'MAXACTSVCEXT', 'MAXACTHSTLAT', 'MAXPSVHSTLAT', 'MAXACTHSTEXT', ], } plugin.add_cmdlineoption('-C', '', 'checks', 'Use built-in checks (predefined lists of variables)', default='') plugin.add_cmdlineoption('-V', '', 'vars', 'List of "nagiostats" variables to check', default='') plugin.add_cmdlineoption('-n', '', 'nagiostats', 'Full path to nagiostat', default='') plugin.add_cmdlineoption('-w', '', 'warn', 'warning thresold', default='') plugin.add_cmdlineoption('-c', '', 'crit', 'warning thresold', default='') plugin.parse_cmdlineoptions() if not plugin.options.nagiostats: plugin.verbose(2, 'Auto-detecting path to "nagiostats"...') for nagiostats in NAGIOSTATSs: if os.path.exists(nagiostats): plugin.options.nagiostats = nagiostats plugin.verbose(2, 'Found it at "%s"' % nagiostats) break if not os.path.exists(plugin.options.nagiostats): plugin.back2nagios(3, 'Could not find "nagiostats"') if not plugin.options.checks and not plugin.options.vars: plugin.back2nagios(3, 'Need either "-C" or "-V"') # Checks and Variables varlist = [] varlist_unknown = []
#if plugin.options.v6: # plugin.verbose(1, 'Using IPv6') # Get IP from interface try: ip_iface = get_ipv4_address(plugin.options.iface) except IOError, (errno, strerror): if errno == 19: plugin.back2nagios(2, 'Interface "%s" does not exist!' % plugin.options.iface) elif errno == 99: plugin.back2nagios(2, 'Interface "%s" has no IP!' % plugin.options.iface) plugin.back2nagios(2, 'I/O error(%s): %s, interface "%s"' % (errno, strerror, plugin.options.iface)) plugin.verbose(1, 'Found IP "%s" on interface "%s"' % (ip_iface, plugin.options.iface)) # Get IP(s) from DNS if not ',' in plugin.options.dns: # Only one DNS object try: ip_dns = socket.gethostbyname(plugin.options.dns) except socket.gaierror: ip_dns = None plugin.back2nagios(1, 'Could not find "%s" in DNS!' % plugin.options.dns) if ip_iface == ip_dns: plugin.back2nagios(0, 'Found %s for "%s" in DNS and on interface "%s"' % (ip_dns, plugin.options.dns, plugin.options.iface)) else: plugin.back2nagios(2, 'Found %s for "%s" in DNS, but %s for interface "%s"' % (ip_dns, plugin.options.dns, ip_iface, plugin.options.iface))