Cache more stuff from plc in local files.
authorStephen Soltesz <soltesz@cs.princeton.edu>
Tue, 11 Dec 2007 22:45:50 +0000 (22:45 +0000)
committerStephen Soltesz <soltesz@cs.princeton.edu>
Tue, 11 Dec 2007 22:45:50 +0000 (22:45 +0000)
syncplcdb.py

index 0bae012..35ac57b 100755 (executable)
@@ -20,6 +20,7 @@ def dsites_from_lsites(l_sites):
        return (d_sites, id2lb)
 
 def dsn_from_dsln(d_sites, id2lb, l_nodes):
+       lb2hn = {}
        dsn = {}
        hn2lb = {}
        for node in l_nodes:
@@ -31,38 +32,61 @@ def dsn_from_dsln(d_sites, id2lb, l_nodes):
                                print i, " ", id2lb[i]
                        raise Exception, "Node has missing site id!! %s %d" %(node['hostname'], node['site_id'])
                if not login_base in dsn:
+                       lb2hn[login_base] = []
                        dsn[login_base] = {}
                        dsn[login_base]['plc'] = d_sites[login_base]
                        dsn[login_base]['monitor'] = {} # event log, or something
 
                hostname = node['hostname']
+               lb2hn[login_base].append(node)
                dsn[login_base][hostname] = {}
                dsn[login_base][hostname]['plc'] = node
                dsn[login_base][hostname]['comon'] = {}
                dsn[login_base][hostname]['monitor'] = {}
 
                hn2lb[hostname] = login_base
-       return (dsn, hn2lb)
+       return (dsn, hn2lb, lb2hn)
+
+def create_netid2ip(l_nodes, l_nodenetworks):
+       netid2ip = {}
+       for node in l_nodes:
+               for netid in node['nodenetwork_ids']:
+                       found = False
+                       for nn in l_nodenetworks:
+                               if nn['nodenetwork_id'] == netid:
+                                       found = True
+                                       netid2ip[netid] = nn['ip']
+                       if not found:
+                               print "ERROR! %s" % node
+
+       return netid2ip
 
 def create_plcdb():
 
        # get sites, and stats
-       l_sites = plc.getSites({'peer_id':None}, ['login_base', 'site_id'])
+       l_sites = plc.getSites({'peer_id':None}, ['login_base', 'site_id', 'abbreviated_name', 'latitude', 'longitude'])
        if len(l_sites) == 0:
                sys.exit(1)
        (d_sites,id2lb) = dsites_from_lsites(l_sites)
 
        # get nodes at each site, and 
-       l_nodes = plc.getNodes({'peer_id':None}, ['hostname', 'site_id', 'version', 'last_updated', 'date_created', 'last_contact', 'pcu_ids'])
-       (plcdb, hn2lb) = dsn_from_dsln(d_sites, id2lb, l_nodes)
+       l_nodes = plc.getNodes({'peer_id':None}, ['hostname', 'site_id', 'version', 'last_updated', 'date_created', 'last_contact', 'pcu_ids', 'nodenetwork_ids'])
+
+       l_nodenetworks = plc.getNodeNetworks()
+       (plcdb, hn2lb, lb2hn) = dsn_from_dsln(d_sites, id2lb, l_nodes)
+       netid2ip = create_netid2ip(l_nodes, l_nodenetworks)
 
        # save information for future.
        id2lb = id2lb
        hn2lb = hn2lb
        db = plcdb
 
-       if config.cachenodes:
+       if ('cachenodes' in dir(config) and config.cachenodes) or \
+               'cachenodes' not in dir(config):
                soltesz.dbDump("plcdb_hn2lb", hn2lb)
+               soltesz.dbDump("plcdb_lb2hn", lb2hn)
+               soltesz.dbDump("plcdb_netid2ip", netid2ip)
+               soltesz.dbDump("l_plcnodenetworks", l_nodenetworks)
                soltesz.dbDump("l_plcnodes", l_nodes)
                soltesz.dbDump("l_plcsites", l_sites)