|
@@ -8,7 +8,10 @@ from .graphite import GraphitePush
|
|
|
__all__ = [
|
|
|
'AlfredParser', 'BatmanParser',
|
|
|
'DashingClient', 'GraphitePush',
|
|
|
- 'dict_merge' ]
|
|
|
+ 'dict_merge', 'merge_alfred_batman', 'mac2id' ]
|
|
|
+
|
|
|
+def mac2id(mac):
|
|
|
+ return mac.lower().replace(':', '')
|
|
|
|
|
|
def dict_merge(a, b):
|
|
|
'''recursively merges dict's. not just simple a['key'] = b['key'], if
|
|
@@ -24,4 +27,22 @@ def dict_merge(a, b):
|
|
|
result[k] = deepcopy(v)
|
|
|
return result
|
|
|
|
|
|
+def merge_alfred_batman(alfreddata, batmandata):
|
|
|
+ merged = {}
|
|
|
+ for nodeid in alfreddata:
|
|
|
+ nodeinfo = alfreddata[nodeid]
|
|
|
+ candidates = set()
|
|
|
+ candidates.add(nodeid)
|
|
|
+ if 'mac' in nodeinfo: candidates.add(mac2id(nodeinfo['mac']))
|
|
|
+ if 'macs' in nodeinfo:
|
|
|
+ for mac in nodeinfo['macs']:
|
|
|
+ candidates.add(mac2id(mac))
|
|
|
+
|
|
|
+ for candidate in candidates:
|
|
|
+ if candidate in batmandata:
|
|
|
+ nodeinfo = dict_merge(nodeinfo, batmandata[candidate])
|
|
|
+
|
|
|
+ merged[nodeid] = nodeinfo
|
|
|
+
|
|
|
+ return merged
|
|
|
|