4 from monitor.wrapper import plc
5 from monitor.generic import *
6 from monitor.database.info.model import *
20 #print "IMPORTING PLCCACHE: ",
21 #traceback.print_stack()
28 print >>sys.stderr, "initing plccache"
30 print >>sys.stderr, "collecting plcsites"
31 dbsites = PlcSite.query.all()
32 l_sites = [ s.plc_site_stats for s in dbsites ]
34 print >>sys.stderr, "collecting plcnodes"
35 dbnodes = PlcNode.query.all()
36 l_nodes = [ s.plc_node_stats for s in dbnodes ]
38 print >>sys.stderr, "collecting plcpcus"
39 dbpcus = PlcPCU2.query.all()
43 for k in ['username', 'protocol', 'node_ids', 'ip',
44 'pcu_id', 'hostname', 'site_id', 'notes',
45 'model', 'password', 'ports']:
46 pcu[k] = getattr(s, k)
49 print >>sys.stderr, "building id2lb"
50 (d_sites,id2lb) = dsites_from_lsites_id(l_sites)
51 print >>sys.stderr, "building lb2hn"
52 (plcdb, hn2lb, lb2hn) = dsn_from_dsln(d_sites, id2lb, l_nodes)
60 def GetNodesByIds(ids):
63 node = PlcNode.get_by(node_id=node_id)
64 ret.append(node.plc_node_stats)
67 def GetNodesBySite(loginbase):
68 site = PlcSite.get_by(loginbase=loginbase)
69 return GetNodesByIds(site.plc_site_stats['node_ids'])
71 def GetNodeByName(hostname):
72 print "GetNodeByName %s" % hostname
73 node = PlcNode.get_by(hostname=hostname)
74 return node.plc_node_stats
76 def GetSitesByName(sitelist):
79 site = PlcSite.get_by(loginbase=site)
80 ret.append(site.plc_site_stats)
83 def GetSitesById(idlist):
85 for site_id in idlist:
86 site = PlcSite.get_by(site_id=site_id)
87 ret.append(site.plc_site_stats)
90 def deleteExtra(l_plc, objectClass=PlcSite, dbKey='loginbase', plcKey='login_base'):
91 dbobjs = objectClass.query.all()
92 dbobj_key = [ getattr(s, dbKey) for s in dbobjs ]
93 plcobj_key = [ s[plcKey] for s in l_plc ]
94 extra_key = set(dbobj_key) - set(plcobj_key)
96 print >>sys.stderr, "deleting %s" % obj
97 dbobj = objectClass.get_by(**{dbKey : obj})
101 l_sites = plc.api.GetSites({'peer_id':None},
102 ['login_base', 'site_id', 'abbreviated_name', 'latitude',
103 'longitude', 'max_slices', 'slice_ids', 'node_ids',
104 'enabled', 'date_created' ])
105 l_nodes = plc.api.GetNodes({'peer_id':None},
106 ['hostname', 'node_id', 'ports', 'site_id', 'boot_state', 'run_level',
107 'version', 'last_updated', 'date_created', 'key',
108 'last_contact', 'pcu_ids', 'interface_ids'])
109 l_pcus = plc.api.GetPCUs()
111 print >>sys.stderr, "sync sites"
113 dbsite = PlcSite.findby_or_create(site_id=site['site_id'])
114 dbsite.loginbase = site['login_base']
115 dbsite.date_checked = datetime.now()
116 dbsite.plc_site_stats = site
117 deleteExtra(l_sites, PlcSite, 'loginbase', 'login_base')
118 deleteExtra(l_sites, HistorySiteRecord, 'loginbase', 'login_base')
121 print >>sys.stderr, "sync pcus"
123 dbpcu = PlcPCU2.findby_or_create(pcu_id=pcu['pcu_id'])
124 dbpcu.date_checked = datetime.now()
125 for key in pcu.keys():
126 print >>sys.stderr, "setting %s = %s" % (key, pcu[key])
127 setattr(dbpcu, key, pcu[key])
129 deleteExtra(l_pcus, PlcPCU2, 'pcu_id', 'pcu_id')
130 deleteExtra(l_pcus, HistoryPCURecord, 'plc_pcuid', 'pcu_id')
131 deleteExtra(l_pcus, FindbadPCURecord, 'plc_pcuid', 'pcu_id')
134 print >>sys.stderr, "sync nodes"
136 dbnode = PlcNode.findby_or_create(node_id=node['node_id'])
137 dbnode.hostname = node['hostname']
138 dbnode.date_checked = datetime.now()
139 dbnode.plc_node_stats = node
140 deleteExtra(l_nodes, PlcNode, 'node_id', 'node_id')
141 deleteExtra(l_nodes, HistoryNodeRecord, 'plc_nodeid', 'node_id')
142 deleteExtra(l_nodes, PlcNode, 'hostname', 'hostname')
143 deleteExtra(l_nodes, HistoryNodeRecord, 'hostname', 'hostname')
144 deleteExtra(l_nodes, FindbadNodeRecord, 'hostname', 'hostname')
151 if __name__ == '__main__':