Automatic creation:creates nagios config from a set of sites and monitor their nodes
authoramine <amine@41d37cc5-eb28-0410-a9bf-d37491348ade>
Fri, 3 Aug 2007 14:54:05 +0000 (14:54 +0000)
committeramine <amine@41d37cc5-eb28-0410-a9bf-d37491348ade>
Fri, 3 Aug 2007 14:54:05 +0000 (14:54 +0000)
nagios/AutomaticConfig/GetConfig.py [new file with mode: 0644]
nagios/AutomaticConfig/GetConfig.pyc [new file with mode: 0644]
nagios/AutomaticConfig/GetMonitoring.py [new file with mode: 0755]
nagios/AutomaticConfig/ServiceName [new file with mode: 0644]

diff --git a/nagios/AutomaticConfig/GetConfig.py b/nagios/AutomaticConfig/GetConfig.py
new file mode 100644 (file)
index 0000000..d876fe2
--- /dev/null
@@ -0,0 +1,101 @@
+import os, sys, time, string
+from optparse import OptionParser
+import xmlrpclib
+
+
+class GetConfig:
+
+    subversion_id = "$Id$"
+
+    def __init__ (self):
+        self.url="https://localhost:443/PLCAPI/"
+        self.server=xmlrpclib.Server(self.url,allow_none=True)
+        self.path="/etc/nagios/config-sample/"
+        self.path1="/etc/nagios/"
+
+    def create_hostgroup(self, file, nodes_infos):
+        f1=open(file,"a")
+        i=0
+        j=0
+        memberhost=""
+        alias=[]
+        list=[]
+        site_name=nodes_infos[0]['Site_name']##initialize the first site name
+        
+        while 1:
+            if(i<len(nodes_infos) and site_name==nodes_infos[i]['Site_name']):
+                memberhost=memberhost+nodes_infos[i]['node_hostname']+","
+                i=i+1
+            elif (i<len(nodes_infos) and site_name!=nodes_infos[i]['Site_name']):
+                alias.append(site_name)
+                list.append(memberhost)
+                memberhost=""
+                memberhost=memberhost+nodes_infos[i]['node_hostname']+","
+                site_name=nodes_infos[i]['Site_name']  
+                alias.append(site_name)
+                i=i+1 
+                
+            elif (i>=len(nodes_infos)):
+                alias.append(site_name)
+                list.append(memberhost)
+                break
+        
+        
+        print list
+        print alias
+        while (j < len(list)):
+            f1.write("\ndefine hostgroup { \n")
+            f1.write("hostgroup_name                     "+str(j)+"\n")
+            f1.write("alias                         %s\n"%alias[j])
+            f1.write("members                       %s\n } \n"%list[j])
+            j=j+1
+        f1.close()
+        
+    def generate_file(self,sample_file, file,login,nodes_infos):
+        
+        f1=open(self.path+sample_file,"rb")
+        f2=open(self.path1+file,"wb")
+        f2.write(f1.read())
+        f1.close()
+        f2.close()
+        if (login=="h"):
+            self.create_host(self.path1+file,nodes_infos)
+        elif (login=="s"):
+            self.create_service(self.path1+file,nodes_infos)
+        elif (login=="g"):
+            self.create_hostgroup(self.path1+file, nodes_infos)
+    
+                    
+                    
+    def create_host(self,file,nodes_infos):
+        f1=open(file,"a")
+        i=0
+        while (i<len(nodes_infos)):
+            f1.write("\n define host { \n")
+            f1.write("host_name                     %s\n"%nodes_infos[i]['node_hostname'])
+            f1.write("use                              linux-server\n")
+            f1.write("alias                         %s\n"%nodes_infos[i]['node_hostname'])
+            f1.write("address                       %s\n } \n"%nodes_infos[i]['node_ip'])
+            i=i+1
+        f1.close()
+
+            
+    def create_service(self,file,nodes_infos):
+        i=0
+        f1=open(file,"a")
+        f2=open("ServiceName","r")
+        while (i<len(nodes_infos)):
+            while 1:
+                txt=f2.readline()
+                service=txt.strip()
+                if txt=='':
+                    f2.seek(0)
+                    break
+                f1.write("\ndefine service { \n")
+                f1.write("host_name                     %s\n"%nodes_infos[i]['node_hostname'])
+                f1.write("use                        remote-service\n")
+                f1.write("service_description           %s\n"%service)
+                f1.write("check_command                 %s!%s \n } \n"%(service,nodes_infos[i]['node_hostname']))
+            i=i+1
+        f2.close()
+        f1.close()
diff --git a/nagios/AutomaticConfig/GetConfig.pyc b/nagios/AutomaticConfig/GetConfig.pyc
new file mode 100644 (file)
index 0000000..cfdeea3
Binary files /dev/null and b/nagios/AutomaticConfig/GetConfig.pyc differ
diff --git a/nagios/AutomaticConfig/GetMonitoring.py b/nagios/AutomaticConfig/GetMonitoring.py
new file mode 100755 (executable)
index 0000000..2d00dfa
--- /dev/null
@@ -0,0 +1,128 @@
+#!/usr/bin/env python
+
+import os, sys, time
+from optparse import OptionParser
+import xmlrpclib
+from GetConfig import *
+
+class GetMonitoring:
+
+    subversion_id = "$Id$"
+
+    def __init__ (self):
+        self.url="https://localhost:443/PLCAPI/"
+        self.server=xmlrpclib.Server(self.url,allow_none=True)
+        
+       #self.path=os.path.dirname(sys.argv[0])
+
+    def auth_root (self):
+       return {'Username':self.args[0],
+               'AuthMethod':'password',
+               'AuthString':self.args[1],
+                'Role' : 'root'
+                } 
+    
+
+#################################
+###############################
+   
+    def GetSiteNodes(self,sites_names):
+        i=0
+        
+        tab_node_infos=[]##its an array containing struct of Site,nodes hostname and ip for each nodes
+                         ##to be monitored
+        while (i< len(sites_names)):
+            filter_site={'abbreviated_name':sites_names[i]}
+            return_value=['site_id']
+            ##Getting the site_id from the given  site name args
+            site_id=self.server.GetSites(self.auth_root(),filter_site,return_value)
+            if (site_id==[]):
+                print "Site Not found or duplicated Site Name please check your Site's Name::",sites_names[i]
+                exit
+                
+            ##Getting nodes_id relative to the site to be monitored
+            filter_node={'site_id':site_id[0]['site_id']}
+            node_ids =self.server.GetNodes(self.auth_root(),filter_node,['node_id','hostname'])
+            ##Getting information for nodes to be monitored
+            j=0
+            while(j < len(node_ids)):
+               
+                sn_info={'Site_name':None,
+                         'node_hostname':None,
+                         'node_ip':None
+                         }
+                sn_info['Site_name']=sites_names[i]
+
+                filter=node_ids[j]['node_id']
+                node_infos=self.server.GetNodeNetworks(self.auth_root(),filter,['ip'])
+                sn_info['node_hostname']=node_ids[j]['hostname']
+                #tab_node_infos.append(self.sn_info['node_hostname'])
+                sn_info['node_ip']=node_infos[0]['ip']
+                tab_node_infos.append(sn_info)
+                j=j+1
+            
+            i=i+1
+        #print node_ids
+        return tab_node_infos
+
+#######################################
+######################################
+
+    
+    def main (self):
+        try:
+            
+            ##################
+            ######options
+            usage = """usage: %prog [options]  UserName(email) passwd Sites Names  [-h for help]"""
+            parser=OptionParser(usage=usage,version=self.subversion_id)
+            # verbosity
+            parser.add_option("-v","--verbose", action="store_true", dest="verbose", default=False, 
+                              help="Run in verbose mode")
+           
+            (self.options, self.args) = parser.parse_args()
+            i=0
+            
+            site_name=[]
+            nodes_infos=[]
+
+            getConfig=GetConfig()
+            
+            if (len (self.args) < 3 ):
+                print "please check your command"
+                print usage        
+                    
+            else:
+                i=2
+                while (i < len(self.args)) :
+                    site_name.append(self.args[i])
+                    i=i+1
+
+                nodes_infos=self.GetSiteNodes(site_name)
+                getConfig.generate_file("services-sample.cfg","services.cfg","s",nodes_infos)
+                getConfig.generate_file("hosts-sample.cfg","hosts.cfg","h",nodes_infos)
+                getConfig.generate_file("hostgroups-sample.cfg","hostgroups.cfg","g",nodes_infos)
+                
+                print "Info on what will be monitored grouped by Site:-------->"
+                for node in nodes_infos:
+                    print "------------>",node
+
+                
+                    
+            res=os.system("nagios -v /etc/nagios/nagios.cfg")
+            if (not res):
+                os.system("service nagios reload")
+               
+                
+            ######################
+            ########end options
+            ##################
+                
+          
+        except Exception, e:
+            print str(e)
+            sys.exit(1)
+
+if __name__ == "__main__":
+    GetMonitoring().main()       
diff --git a/nagios/AutomaticConfig/ServiceName b/nagios/AutomaticConfig/ServiceName
new file mode 100644 (file)
index 0000000..dd67613
--- /dev/null
@@ -0,0 +1,2 @@
+check_ssh
+check-host-alive