From 48cf6ca5ba5ac0dc966a1f5cc66fca1d1fcf0582 Mon Sep 17 00:00:00 2001 From: Stephen Soltesz Date: Thu, 3 Jun 2010 18:31:01 +0000 Subject: [PATCH] rename and split plc2nagios file --- .../{plc2nagios.py => plc_hosts_to_nagios.py} | 0 tools/plc_users_to_nagios.py | 243 ++++++++++++++++++ 2 files changed, 243 insertions(+) rename tools/{plc2nagios.py => plc_hosts_to_nagios.py} (100%) create mode 100755 tools/plc_users_to_nagios.py diff --git a/tools/plc2nagios.py b/tools/plc_hosts_to_nagios.py similarity index 100% rename from tools/plc2nagios.py rename to tools/plc_hosts_to_nagios.py diff --git a/tools/plc_users_to_nagios.py b/tools/plc_users_to_nagios.py new file mode 100755 index 0000000..37e15a3 --- /dev/null +++ b/tools/plc_users_to_nagios.py @@ -0,0 +1,243 @@ +#!/usr/bin/python + +class NagiosObject(object): + trans = {'d2_coords': '2d_coords'} + + def __init__(self, id, **kwargs): + self.id = id + self.kwords = kwargs.keys() + for key in self.kwords: + self.__setattr__(key, kwargs[key]) + + def toString(self): + ret = "" + ret += "define %s {\n" % self.id + for key in self.kwords: + if key in self.trans: + ret += " %s %s\n" % (self.trans[key], self.__getattribute__(key)) + else: + ret += " %s %s\n" % (key, self.__getattribute__(key)) + ret += "}\n" + return ret + +class Host(NagiosObject): + def __init__(self, **kwargs): + NagiosObject.__init__(self, "host", **kwargs) + +class HostGroup(NagiosObject): + def __init__(self, **kwargs): + NagiosObject.__init__(self, "hostgroup", **kwargs) + +class HostEscalation(NagiosObject): + def __init__(self, **kwargs): + NagiosObject.__init__(self, "hostescalation", **kwargs) + +class Contact(NagiosObject): + def __init__(self, **kwargs): + NagiosObject.__init__(self, "contact", **kwargs) + +class ContactGroup(NagiosObject): + def __init__(self, **kwargs): + NagiosObject.__init__(self, "contactgroup", **kwargs) + +class Service(NagiosObject): + def __init__(self, **kwargs): + NagiosObject.__init__(self, "service", **kwargs) + +class ServiceDependency(NagiosObject): + def __init__(self, **kwargs): + NagiosObject.__init__(self, "servicedependency", **kwargs) + +class ServiceEscalation(NagiosObject): + def __init__(self, **kwargs): + NagiosObject.__init__(self, "serviceescalation", **kwargs) + +class ServiceGroup(NagiosObject): + def __init__(self, **kwargs): + NagiosObject.__init__(self, "servicegroup", **kwargs) + +def getContactsAndContactGroupsFor(lb, type, email_list): + + contact_list = [] + for person in email_list: + c1 = Contact(contact_name=person, + host_notifications_enabled=1, + service_notifications_enabled=1, + host_notification_period="24x7", + service_notification_period="24x7", + host_notification_options="d,r,s", + service_notification_options="c,r", + host_notification_commands="notify-by-email", + service_notification_commands="notify-by-email", + email=person) + contact_list.append(c1) + + cg1 = ContactGroup(contactgroup_name="%s-%s" % (lb,type), + alias="%s-%s" % (lb,type), + members=",".join(email_list)) + + contact_list.append(cg1) + + return contact_list + + +globalservices = [] +for service in [('NET', "Network Services"), + ('SSH', "SSH Service"), + ('SSH806', "Auxiliary SSH Service"), + ('HTTP', "PlanetFlow HTTP"), + ('COTOP', "HTTP based COTOP"), + ]: + #('PLSOFT', "PlanetLab Software"), + #('MGMT', "Remote Management")]: + globalservices.append(ServiceGroup(servicegroup_name=service[0], alias=service[1])) + + +globalhost = [Host( name="planetlab-host", + use="generic-host", + check_period="24x7", + check_interval="120", + retry_interval="10", + max_check_attempts="6", + check_command="check-host-alive", + contact_groups="admins", + register="0")] + +for obj in globalhost + globalservices: + print obj.toString() + +from monitor.wrapper import plccache + +plcdb = plccache.l_sites +netid2ip = plccache.d_from_l(plccache.plc.api.GetInterfaces(), 'interface_id') +lb2hn = plccache.plcdb_lb2hn + +sites = plccache.plc.api.GetSites([10243, 22, 10247, 138, 139, 10050, 10257, 18, 20, + 21, 10134, 24, 10138, 10141, 30, 31, 33, 10279, 41, 29, 10193, 10064, 81, + 10194, 10067, 87, 10208, 10001, 233, 157, 10100, 10107]) + +for site in sites: + shortname = site['abbreviated_name'] + lb = site['login_base'] + hg = HostGroup(hostgroup_name=lb, alias=shortname) + lat = site['latitude'] + lon = site['longitude'] + lon_x = -1 + lat_y = -1 + if lat is not None and lon is not None: + scale = 5 + lon_x = int(180 + lon) * scale + lat_y = int(180 - (lat + 90)) * scale + + if site['login_base'] in lb2hn: + nodes = lb2hn[site['login_base']] + else: + continue + + if len(nodes) == 0: + continue + + print hg.toString() + + # NOTE: do duplcate groups create duplicate emails? + cl1 = getContactsAndContactGroupsFor(lb, "techs", plccache.plc.getTechEmails(lb)) + cl2 = getContactsAndContactGroupsFor(lb, "pis", plccache.plc.getPIEmails(lb)) + # NOTE: slice users will change often. + cl3 = getContactsAndContactGroupsFor(lb, "sliceusers", plccache.plc.getSliceUserEmails(lb)) + + for c in [cl1,cl2,cl3]: + for i in c: + print i.toString() + + for node in nodes: + hn = node['hostname'] + if len(node['interface_ids']) == 0: + continue + + ip = netid2ip[str(node['interface_ids'][0])]['ip'] + + if lon_x is not -1 and lat_y is not -1: + coords="%s,%s" % (lon_x, lat_y) + else: + coords="0,0" + + h = Host(use="planetlab-host", + host_name=hn, + alias=hn, + address=ip, + d2_coords=coords, + statusmap_image="icon-system.png", + hostgroups=lb) + + print h.toString() + + s1 = Service(use="generic-service", + host_name=hn, + service_description="aSSH", + display_name="aSSH", + servicegroups="NET,SSH", + check_command="check_ssh!-t 120") + s2 = Service(use="generic-service", + host_name=hn, + service_description="bSSH806", + display_name="bSSH806", + servicegroups="NET,SSH806", + check_command="check_ssh!-p 806 -t 120") + s3 = Service(use="generic-service", + host_name=hn, + service_description="cHTTP", + display_name="cHTTP", + servicegroups="NET,HTTP", + check_command="check_http!-t 120") + s4 = Service(use="generic-service", + host_name=hn, + service_description="dCOTOP", + display_name="dCOTOP", + servicegroups="NET,COTOP", + check_command="check_http!-p 3120 -t 120") + + se1 = ServiceEscalation( host_name=hn, + service_description='aSSH', + first_notification=0, + last_notification=2, + notification_interval=24*60*3.5, + escalation_options="r,c", + contact_groups="%s-techs" % lb) + + se2 = ServiceEscalation( host_name=hn, + service_description='aSSH', + first_notification=2, + last_notification=4, + notification_interval=24*60*3.5, + escalation_options="r,c", + contact_groups="%s-techs,%s-pis" % (lb,lb)) + + se3 = ServiceEscalation( host_name=hn, + service_description='aSSH', + first_notification=4, + last_notification=0, + notification_interval=24*60*3.5, + escalation_options="r,c", + contact_groups="%s-techs,%s-pis,%s-sliceusers" % (lb,lb,lb)) + + sd1 = ServiceDependency(host_name=hn, + service_description="aSSH", + dependent_host_name=hn, + dependent_service_description="bSSH806", + execution_failure_criteria="w,u,c,p",) + + sd2 = ServiceDependency(host_name=hn, + service_description="aSSH", + dependent_host_name=hn, + dependent_service_description="cHTTP", + execution_failure_criteria="w,u,c,p",) + + sd3 = ServiceDependency(host_name=hn, + service_description="aSSH", + dependent_host_name=hn, + dependent_service_description="dCOTOP", + execution_failure_criteria="w,u,c,p",) + + for service in [s1,s2,s3,s4,se1,se2,se3,sd1,sd2,sd3]: + print service.toString() + -- 2.43.0