File: //usr/lib/python2.7/site-packages/lap/isr.py
import redis
import psutil
import commands
import datetime
import os
from scipy import stats
def list_processes():
processes = []
for pid in psutil.process_iter():
try:
processes.append(psutil.Process(pid).name)
except:
continue
return processes
def dovecot_proxy():
cmd = "sudo doveadm proxy list 2>/dev/null | awk {'print $2'} | sort | uniq -c"
status, response = commands.getstatusoutput(cmd)
if status == 0:
return [ line.strip().split() for line in response.split("\n") ]
return []
def load():
r = redis.Redis(host='127.0.0.1', db=0, port=6379)
now = datetime.datetime.now() - datetime.timedelta(seconds=60)
key = "status:%s:%s:%s:%s:%s" % (now.year, now.month, now.day, now.hour, now.minute)
info = {}
[ info.update({key: value}) for key, value in r.zrevrange(key, 0, -1, withscores=True) ]
key_saved_ms = "saved_ms:%s:%s:%s:%s:%s" % (now.year,now.month,now.day,now.hour,now.minute)
if r.exists(key_saved_ms):
# Percentil / Delivery time of Saved Messages
percentil = stats.scoreatpercentile(map(int,list(r.smembers(key_saved_ms))),90)
info.update({"saved_ms_percentil": percentil})
key_delivery_delay = "deliver_delay:%s:%s:%s:%s:%s" % (now.year,now.month,now.day,now.hour,now.minute)
if r.exists(key_delivery_delay):
# Percentil / Delivery time of Sent Messages by Postfix
percentil_delay = stats.scoreatpercentile(map(float,list(r.smembers(key_delivery_delay))),90)
info.update({"delivery_delay_percentil": percentil_delay})
return info
def __run__(params):
perfdata = []
data = load()
for key, value in data.iteritems():
if key.startswith("latency_"):
# Calculate average latency
k = key.replace("latency_", "")
value = value / data.get(k)
perfdata.append((key, str(value)))
# Dovecot proxy
try:
for line in dovecot_proxy():
if len(line) != 0:
perfdata.append(("proxy_%s" % (line[2]), str(line[0])))
except:
pass
CMD='/usr/bin/collectdctl'
if os.path.isfile(CMD) and os.path.isfile('/etc/collectd/collectd.conf.d/memcached.conf'):
M = commands.getoutput(' %s listval|grep memcached_connections-current' % CMD)
MC = commands.getoutput('%s getval %s ' % ( CMD, M ) ).split('=')[1]
perfdata.append(("mc_connection", MC[0:4].replace('.','')))
# Count processes for common machines
for p in ["smtpd", ]:
total = len([ proc for proc in list_processes() if proc == p ])
perfdata.append(("proc_%s" % (p), str(total)))
perfdata = "|".join([ "=".join(x) for x in perfdata])
return [0, "OK", perfdata]
if __name__== '__main__':
print __run__({})