File: //usr/lib/python2.7/site-packages/lap/cas.py
import json
import socket
from datetime import datetime
socket.setdefaulttimeout(5)
def __run__(params):
metrics = params.get("metrics",False)
perfdata = []
try:
maxtime = params.get("maxtime",0)
if params.get("type_socket") == 'unix':
now = datetime.now()
connection = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
connection.connect(params.get("unix_socket"))
connection.close()
else:
connection = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
now = datetime.now()
connection.connect((params.get("hostname", "localhost"), params.get("port")))
if params.get("banner_monitoring") == 'true':
recvdata = connection.recv(1024)
connection.close()
dt = datetime.now() - now
if maxtime > 0 and dt.seconds > maxtime:
return [2, 'CRITICAL: banner time exceeded in %d max expected were %d' % (dt.seconds,maxtime)]
else:
connection.close()
if metrics:
try:
KEYS = params.get("keys")
HOST, PORT = "localhost", 5141
for key in KEYS:
data = "log:metrics:%s" % key.lower()
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.sendto(data + "\n", (HOST, PORT))
reveived = json.loads(sock.recv(1024))[0].get('minute')
perfdata.append((key.lower(),str(reveived)))
perfdata = "|".join([ "=".join(x) for x in perfdata])
except Exception as e:
return [2, 'CRITICAL: Unable to get metrics due to: %s' % e]
except socket.timeout:
return [2, 'CRITICAL: Socket timeout']
except socket.gaierror:
return [2, 'CRITICAL: Unable to resolve domain']
except socket.error, e:
return [2, 'CRITICAL: Socket error: %s' % str(e)]
except Exception, e:
return [2,'CRITICAL: %s' % repr(e)]
else:
return [0, "OK - %s" % json.dumps(perfdata), perfdata]