* add code to import xml templates using curl.
[monitor.git] / zabbix / zabbixsync.py
index 54b30d5..3af935b 100755 (executable)
@@ -2,17 +2,16 @@
 
 import sys
 import site
-from monitor.wrapper import plc
+from monitor.wrapper import plc, plccache
 from monitor import database
 
 import zabbixsite
-from monitor.database.dborm import session
+from monitor.database.dborm import zab_session as session
 
-print "test"
 
-plcdb = database.dbLoad("l_plcsites")
-netid2ip = database.dbLoad("plcdb_netid2ip")
-lb2hn = database.dbLoad("plcdb_lb2hn")
+plcdb = plccache.l_sites # database.dbLoad("l_plcsites")
+netid2ip = plccache.plcdb_netid2ip # database.dbLoad("plcdb_netid2ip")
+lb2hn = plccache.plcdb_lb2hn # database.dbLoad("plcdb_lb2hn")
 
 def get_site_iplist(loginbase):
        node_list = lb2hn[loginbase]
@@ -37,13 +36,32 @@ def add_loginbase(loginbase):
        zabbixsite.setup_site(loginbase, techs, pis, iplist)
 
 if __name__=="__main__":
-       #sites = api.GetSites({'peer_id' : None}, ['login_base'])
-       for loginbase in ['princeton', 'princetondsl', 'monitorsite']:
-               add_loginbase(loginbase)
+
+       from monitor import parser as parsermodule
+       parser = parsermodule.getParser()
+       parser.set_defaults( setupglobal=False, syncsite=True, site=None)
+       parser.add_option("", "--setupglobal", action="store_true", dest="setupglobal",
+                                               help="Setup global settings.")
+       parser.add_option("", "--nosite", action="store_false", dest="syncsite",
+                                               help="Do not sync sites.")
+       parser.add_option("", "--site", dest="site",
+                                               help="Sync only given site name.")
+       opts = parsermodule.parse_args(parser)
+
+       if opts.setupglobal:
+               zabbixsite.setup_global()
                session.flush()
-       # TODO: for any site that is in the db, call zabbixsite.delete_site()
 
+       if opts.syncsite:
+               api = plc.getAuthAPI()
+               query = {'peer_id' : None}
+               if opts.site:
+                       query.update({'login_base' : opts.site})
+
+               sites = api.GetSites(query, ['login_base'])
+               for site in sites:
+                       add_loginbase(site['login_base'])
+                       session.flush()
+
+       # TODO: for any removed site that is in the db, call zabbixsite.delete_site()
 
-## Hosts & Templates
-# no need to define hosts?
-# add template?  It appears that the xml-based tempate system is sufficient.