improvements.
[monitor.git] / zabbix / zabbixsync.py
index e35798c..ffef361 100755 (executable)
@@ -1,12 +1,14 @@
 #!/usr/bin/python
 
 import sys
+import os
 import site
 from monitor.wrapper import plc, plccache
 from monitor import database
 
 import zabbixsite
 from monitor.database.dborm import zab_session as session
+from monitor.database.zabbixapi.model import confirm_ids, HostGroup
 
 
 plcdb = plccache.l_sites # database.dbLoad("l_plcsites")
@@ -33,6 +35,8 @@ def add_loginbase(loginbase):
        pis = plc.getPIEmails(loginbase)
        iplist = get_site_iplist(loginbase)
 
+       os.system("""echo '%s' | tr ',' '\n' >> /usr/share/monitor/nodelist.txt""" % iplist )
+
        print "zabbixsite.setup_site('%s', %s, %s, '%s')" % (loginbase,techs, pis, iplist)
        zabbixsite.setup_site(loginbase, techs, pis, iplist)
 
@@ -40,7 +44,9 @@ if __name__=="__main__":
 
        from monitor import parser as parsermodule
        parser = parsermodule.getParser(['cacheset'])
-       parser.set_defaults( setupglobal=False, syncsite=True, site=None)
+       parser.set_defaults( setupglobal=False, syncsite=True, site=None, setupids=False)
+       parser.add_option("", "--setupids", action="store_true", dest="setupids",
+                                               help="Setup global IDs.")
        parser.add_option("", "--setupglobal", action="store_true", dest="setupglobal",
                                                help="Setup global settings.")
        parser.add_option("", "--nosite", action="store_false", dest="syncsite",
@@ -49,6 +55,16 @@ if __name__=="__main__":
                                                help="Sync only given site name.")
        opts = parsermodule.parse_args(parser)
 
+       os.system("""echo '' > /usr/share/monitor/nodelist.txt""")
+
+       if opts.setupids:
+               # Not sure why, but this doesn't work if we continue.  so exit.
+               # This step only needs to be called once, but there is no harm in
+               # calling it multiple times.
+               confirm_ids()
+               session.flush()
+               sys.exit(0)
+
        if opts.setupglobal:
                zabbixsite.setup_global()
                session.flush()
@@ -59,10 +75,20 @@ if __name__=="__main__":
                if opts.site:
                        query.update({'login_base' : opts.site})
 
+               # ADD SITES
                sites = api.GetSites(query, ['login_base'])
-               for site in sites[:10]:
+               site_api_list = [ site['login_base'] for site in sites ]
+               for site in sites[:20]:
                        add_loginbase(site['login_base'])
                        session.flush()
 
-       # TODO: for any removed site that is in the db, call zabbixsite.delete_site()
+               if not opts.site:
+                       # NOTE: for all sites in DB but not API, call zabbixsite.delete_site()
+                       hg_list = filter(lambda x: '_hostgroup' in x.name, HostGroup.query.all() )
+                       site_db_list = [ hg.name[:-len('_hostgroup')] for hg in hg_list ]
+                       in_db_not_plc = set(site_db_list) - set(site_api_list)
+                       for login_base in in_db_not_plc:
+                               print "Deleting %s" % login_base
+                               zabbixsite.delete_site(site['login_base'])
+