2
0
mirror of https://github.com/munin-monitoring/contrib.git synced 2018-11-08 00:59:34 +01:00
contrib-munin/plugins/monit/monit_parser
2012-02-13 18:24:46 +01:00

62 lines
1.6 KiB
Python
Executable File

#!/usr/bin/python
# Monit status parser plugin for munin
# This is very raw, but it should work for you out of the box. You of course
# need to have monit configured such that the 'monit status' command works.
# Todd Troxell <ttroxell@debian.org>
STATUS_CMD = "monit status"
import sys
import re
from commands import getstatusoutput
def sanitize(s):
OK_CHARS = "abcdefghijklmnopqrstuvwxyz0123456789"
out = str()
for char in s:
if char.lower() in OK_CHARS:
out += char
return out
procs = dict()
status, output = getstatusoutput(STATUS_CMD)
if status != 0:
print "Errror running status command: %s" % (output)
sys.exit(status)
output = output.split('\n')
cur_proc = None
for line in output:
m = re.match("^Process '(.*)'.*$", line)
if m:
cur_proc = sanitize(m.group(1))
try:
procs[cur_proc]
except KeyError:
procs[cur_proc] = dict()
continue
m = re.match(" memory kilobytes total\s+([0-9]+).*$", line)
if m:
procs[cur_proc]["total_memory"] = m.group(1)
continue
m = re.match(" cpu percent total\s+([.0-9]+)%.*$", line)
if m:
procs[cur_proc]["total_cpu"] = m.group(1)
continue
if len(sys.argv) > 1 and sys.argv[1] == 'config':
print 'graph_title Per process stats from Monit'
print 'graph_vlabel numbers'
print 'graph_category monit'
for process in procs:
for stat in procs[process]:
print "monit_%s_%s.label %s.%s" % (process, stat, process, stat)
sys.exit(0)
for process in procs:
for stat in procs[process]:
print "monit_%s_%s.value %s" % (process, stat, procs[process][stat])