|
@@ -58,14 +58,21 @@ def dict_merge(a, b, overwrite_lists=True):
|
|
def merge_alfred_batman(alfreddata, batmandata):
|
|
def merge_alfred_batman(alfreddata, batmandata):
|
|
merged = {}
|
|
merged = {}
|
|
|
|
|
|
|
|
+ # lookup dict to map MACs to node ids
|
|
batlookup = {}
|
|
batlookup = {}
|
|
|
|
+ # list of (yet un-)handled BATMAN nodes
|
|
|
|
+ unhandled_batnodes = set()
|
|
|
|
+
|
|
|
|
+ # fill above variables from BATMAN data
|
|
for nodeid in batmandata:
|
|
for nodeid in batmandata:
|
|
batlookup[nodeid] = nodeid
|
|
batlookup[nodeid] = nodeid
|
|
|
|
+ unhandled_batnodes.add(str(nodeid))
|
|
for bda in batmandata[nodeid]['aliases']:
|
|
for bda in batmandata[nodeid]['aliases']:
|
|
batlookup[bda] = nodeid
|
|
batlookup[bda] = nodeid
|
|
|
|
|
|
|
|
+ # iterate over ALFRED data
|
|
for nodeid in alfreddata:
|
|
for nodeid in alfreddata:
|
|
- nodeinfo = alfreddata[nodeid]
|
|
|
|
|
|
+ nodeinfo = dict_merge({}, alfreddata[nodeid])
|
|
candidates = set()
|
|
candidates = set()
|
|
candidates.add(nodeid)
|
|
candidates.add(nodeid)
|
|
if 'mac' in nodeinfo:
|
|
if 'mac' in nodeinfo:
|
|
@@ -86,9 +93,20 @@ def merge_alfred_batman(alfreddata, batmandata):
|
|
nodeinfo['neighbours'] = {}
|
|
nodeinfo['neighbours'] = {}
|
|
|
|
|
|
for candidate_raw in candidates:
|
|
for candidate_raw in candidates:
|
|
- candidate = batlookup[candidate_raw] if candidate_raw in batlookup else candidate_raw
|
|
|
|
|
|
+ candidate = batlookup.get(candidate_raw, candidate_raw)
|
|
if candidate in batmandata:
|
|
if candidate in batmandata:
|
|
nodeinfo = dict_merge(nodeinfo, batmandata[candidate])
|
|
nodeinfo = dict_merge(nodeinfo, batmandata[candidate])
|
|
|
|
+ if candidate in unhandled_batnodes:
|
|
|
|
+ unhandled_batnodes.remove(str(candidate))
|
|
|
|
+
|
|
|
|
+ merged[nodeid] = nodeinfo
|
|
|
|
+
|
|
|
|
+ # handle BATMAN nodes which aren't in ALFRED
|
|
|
|
+ for nodeid in unhandled_batnodes:
|
|
|
|
+ logger.debug("unhandled BATMAN node '%s'", nodeid)
|
|
|
|
+ nodeinfo = dict_merge({}, batmandata[nodeid])
|
|
|
|
+ if not 'node_id' in nodeinfo:
|
|
|
|
+ nodeinfo['node_id'] = nodeid
|
|
|
|
|
|
merged[nodeid] = nodeinfo
|
|
merged[nodeid] = nodeinfo
|
|
|
|
|