From 82a17d43e5329fea99340b25dfda4ec646ea1095 Mon Sep 17 00:00:00 2001 From: Stephen Soltesz Date: Fri, 18 Jun 2010 21:21:08 +0000 Subject: [PATCH] move some routines from plccache to generic to avoid pulling in db routines --- monitor/common.py | 2 ++ monitor/generic.py | 68 +++++++++++++++++++++++++++++++++++ monitor/wrapper/plccache.py | 70 +------------------------------------ 3 files changed, 71 insertions(+), 69 deletions(-) create mode 100644 monitor/generic.py diff --git a/monitor/common.py b/monitor/common.py index 08a6d99..78ca093 100644 --- a/monitor/common.py +++ b/monitor/common.py @@ -289,3 +289,5 @@ class Time: def ts_to_dt(cls, ts): d = datetime.fromtimestamp(ts) return d + + diff --git a/monitor/generic.py b/monitor/generic.py new file mode 100644 index 0000000..50488e9 --- /dev/null +++ b/monitor/generic.py @@ -0,0 +1,68 @@ +import sys + +def d_from_l(l, key, using=None, key_as=str, using_as=None): + d = {} + for obj in l: + if not str(obj[key]) in d: + if using is None: + d[key_as(obj[key])] = obj + else: + if using_as is None: + d[key_as(obj[key])] = obj[using] + else: + d[key_as(obj[key])] = using_as(obj[using]) + else: + print "Two objects have the same %s key %s!" % (key, obj[key]) + continue + return d + +def dpcus_from_lpcus(l_pcus): + d_pcus = d_from_l(l_pcus, 'pcu_id') + return d_pcus + +def dnodes_from_lnodes(l_nodes): + d_nodes = d_from_l(l_nodes, 'hostname') + return d_nodes + +def dsites_from_lsites(l_sites): + d_sites = d_from_l(l_sites, 'login_base') + return d_sites + +def dsites_from_lsites_id(l_sites): + d_sites = d_from_l(l_sites, 'login_base') + id2lb = d_from_l(l_sites, 'site_id', 'login_base', int, str) + return (d_sites, id2lb) + +def dsn_from_dsln(d_sites, id2lb, l_nodes): + lb2hn = {} + dsn = {} + hn2lb = {} + for id in id2lb: + if id2lb[id] not in lb2hn: + lb2hn[id2lb[id]] = [] + + for node in l_nodes: + # this won't reach sites without nodes, which I guess isn't a problem. + if node['site_id'] in id2lb.keys(): + login_base = id2lb[node['site_id']] + else: + print >>sys.stderr, "%s has a foreign site_id %s" % (node['hostname'], node['site_id']) + continue + for i in id2lb: + 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, lb2hn) diff --git a/monitor/wrapper/plccache.py b/monitor/wrapper/plccache.py index 524b045..3ddf6f2 100755 --- a/monitor/wrapper/plccache.py +++ b/monitor/wrapper/plccache.py @@ -2,78 +2,10 @@ import sys from monitor.wrapper import plc +from monitor.generic import * from monitor.database.info.model import * import profile -def d_from_l(l, key): - d = {} - for obj in l: - if not str(obj[key]) in d: - d[str(obj[key])] = obj - else: - print "Two objects have the same %s key %s!" % (key, obj[key]) - continue - return d - -def dpcus_from_lpcus(l_pcus): - d_pcus = d_from_l(l_pcus, 'pcu_id') - return d_pcus - -def dnodes_from_lnodes(l_nodes): - d_nodes = d_from_l(l_nodes, 'hostname') - return d_nodes - -def dsites_from_lsites(l_sites): - d_sites = d_from_l(l_sites, 'login_base') - return d_sites - -def dsites_from_lsites_id(l_sites): - d_sites = {} - id2lb = {} - for site in l_sites: - if not site['login_base'] in d_sites: - d_sites[site['login_base']] = site - id2lb[site['site_id']] = site['login_base'] - else: - #print "Two sites have the same login_base value %s!" % site['login_base'] - #sys.exit(1) - continue - return (d_sites, id2lb) - -def dsn_from_dsln(d_sites, id2lb, l_nodes): - lb2hn = {} - dsn = {} - hn2lb = {} - for id in id2lb: - if id2lb[id] not in lb2hn: - lb2hn[id2lb[id]] = [] - - for node in l_nodes: - # this won't reach sites without nodes, which I guess isn't a problem. - if node['site_id'] in id2lb.keys(): - login_base = id2lb[node['site_id']] - else: - print >>sys.stderr, "%s has a foreign site_id %s" % (node['hostname'], - node['site_id']) - continue - for i in id2lb: - 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, lb2hn) l_sites = None l_nodes = None -- 2.43.0