moved nodecommon.py into monitor module
[monitor.git] / zabbix / zabbixsync.py
1 #!/usr/bin/python
2
3 import sys
4 import site
5 from monitor.wrapper import plc, plccache
6 from monitor import database
7
8 import zabbixsite
9 from monitor.database.dborm import zab_session as session
10
11
12 plcdb = plccache.l_sites # database.dbLoad("l_plcsites")
13 netid2ip = plccache.plcdb_netid2ip # database.dbLoad("plcdb_netid2ip")
14 lb2hn = plccache.plcdb_lb2hn # database.dbLoad("plcdb_lb2hn")
15
16 def get_site_iplist(loginbase):
17         node_list = lb2hn[loginbase]
18
19         # TODO: ip_list string cannot be longer than 255 characters.
20         # TODO: if it is, then we need to break up the discovery rule.
21         ip_list = ""
22         for node in node_list:
23                 if len(node['nodenetwork_ids']) > 0:
24                         ip = netid2ip[node['nodenetwork_ids'][0]]
25                         if len(ip_list) > 0: ip_list += ","
26                         ip_list += ip
27
28         return ip_list
29         
30 def add_loginbase(loginbase):
31         
32         techs = plc.getTechEmails(loginbase)
33         pis = plc.getPIEmails(loginbase)
34         iplist = get_site_iplist(loginbase)
35
36         print "zabbixsite.setup_site('%s', %s, %s, '%s')" % (loginbase,techs, pis, iplist)
37         zabbixsite.setup_site(loginbase, techs, pis, iplist)
38
39 if __name__=="__main__":
40
41         from monitor import parser as parsermodule
42         parser = parsermodule.getParser(['cacheset'])
43         parser.set_defaults( setupglobal=False, syncsite=True, site=None)
44         parser.add_option("", "--setupglobal", action="store_true", dest="setupglobal",
45                                                 help="Setup global settings.")
46         parser.add_option("", "--nosite", action="store_false", dest="syncsite",
47                                                 help="Do not sync sites.")
48         parser.add_option("", "--site", dest="site",
49                                                 help="Sync only given site name.")
50         opts = parsermodule.parse_args(parser)
51
52         if opts.setupglobal:
53                 zabbixsite.setup_global()
54                 session.flush()
55
56         if opts.syncsite:
57                 api = plc.getCachedAuthAPI()
58                 query = {'peer_id' : None}
59                 if opts.site:
60                         query.update({'login_base' : opts.site})
61
62                 sites = api.GetSites(query, ['login_base'])
63                 for site in sites[:10]:
64                         add_loginbase(site['login_base'])
65                         session.flush()
66
67         # TODO: for any removed site that is in the db, call zabbixsite.delete_site()
68