1
0
mirror of https://github.com/opinkerfi/nagios-plugins.git synced 2024-11-12 21:43:46 +01:00
nagios-plugins/check_mtr/check_mtr
2012-02-08 15:57:57 +00:00

69 lines
1.5 KiB
Python
Executable File

#!/usr/bin/python
from pynag.Plugins import UNKNOWN, WARNING, CRITICAL, OK, simple as Plugin
from subprocess import Popen, PIPE
from pprint import pprint
## Create the plugin option
np = Plugin()
np.add_arg('l', 'long-output', 'Allows for long multiline output', required=0, action='store_true')
# Parse the plugin options
np.activate()
p = Popen("mtr -c 4 --raw %s" % (np['host']), shell=True, stdout=PIPE, stderr=PIPE, close_fds=True)
stdout, stderr = p.communicate('through stdin to stdout')
if p.returncode > 0:
if p.returncode == 127: # File not found, lets print path
np.nagios_exit(UNKNOWN, "Unable to find mtr, check that it is installed")
else:
np.nagios_exit(UNKNOWN, "Unable to run mtr: %s" % (stderr.strip()))
mtr_output = {}
for line in stdout.split("\n"):
if not line:
continue
line.strip()
(l_type, l_id, l_data) = line.split(" ", 3)
if mtr_output.has_key(l_id) == False:
mtr_output[l_id] = { 'p': [] }
if l_type == "p":
mtr_output[l_id][l_type].append(int(l_data))
else:
mtr_output[l_id][l_type] = l_data
for k in range(0, len(mtr_output)):
obj = str(k)
avg = sum(mtr_output[obj]['p']) / len(mtr_output[obj]['p'])
np.add_perfdata('hop%s' % (obj), avg)
np.add_message(OK, "%s average %imsec" % (mtr_output[obj]['h'], float(avg / 1000)))
if np['long-output']:
(code, message) = np.check_messages(joinallstr = "\n")
else:
(code, message) = np.check_messages()
# Exit with the relevant code
np.nagios_exit( code, message )
#h 5 92.43.192.110
#d 5 neumann.mbl.is
#p 5 35334
#p 4 22419
#h 5 92.43.192.110
#d 5 neumann.mbl.is