File: //usr/lib/python2.7/site-packages/lap/capacity_locamail.py
#!/usr/bin/python
import commands
def __run__(params):
try:
director_capacity_critical = params.get("director_capacity_critical")
director_capacity_warning = params.get("director_capacity_warning")
node_capacity_critical = params.get("node_capacity_critical")
node_capacity_warning = params.get("node_capacity_warning")
status,output = commands.getstatusoutput("""ls /etc/default/locaweb/description | grep simpsons""")
cluster = output
status,output = commands.getstatusoutput("""sudo /usr/bin/doveadm director ring status | awk {'print $1'}""")
n_director_servers = len(output.split("\n")) - 1
max_director_connections_critical = n_director_servers * director_capacity_critical
max_director_connections_warning = n_director_servers * director_capacity_warning
status,output = commands.getstatusoutput("""sudo /usr/bin/doveadm director status | awk {'print $3'} | awk '{s+=$1} END {print s}'""")
all_connections = int(output.split("\n")[-1])
director_critical = False
director_warning = False
node_critical = False
node_warning = False
if all_connections > max_director_connections_critical:
director_critical = True
elif all_connections > max_director_connections_warning:
director_warning = True
perfdata = []
perfdata.append(("connections", str(all_connections)))
perfdata = "|".join([ "=".join(x) for x in perfdata])
status,output = commands.getstatusoutput("""sudo /usr/bin/doveadm director status | awk {'print $3'}""")
for node in output.split("\n"):
if node.isdigit():
node = int(node)
if node > node_capacity_critical:
node_critical = True
break
elif node > node_capacity_warning:
node_warning = True
break
if director_critical:
return [2,"CRITICAL: Cluster %s is over capacity with %d/%d users connected with %d directors" % (cluster,all_connections,max_director_connections_critical,n_director_servers),perfdata]
elif node_critical:
return [2,"CRITICAL: Cluster have nodes with more than %s connections" % node_capacity_critical,perfdata]
elif director_warning:
return [1,"WARNING: Cluster %s is with %d/%d users connected with %d directors" % (cluster,all_connections,max_director_connections_critical,n_director_servers),perfdata]
elif node_warning:
return [1,"WARNING: Cluster have nodes with more than %s connections" % node_capacity_warning,perfdata]
else:
return [0,"OK: %s users connected in cluster %s" % (all_connections,cluster),perfdata]
except Exception as e:
return [2,"CRITICAL: %s" % e]