status srv01
This commit is contained in:
parent
dcd6609030
commit
b0b6f8e0cd
42
alfred_merge.py
Executable file
42
alfred_merge.py
Executable file
|
@ -0,0 +1,42 @@
|
||||||
|
#!/usr/bin/env python3
|
||||||
|
import subprocess
|
||||||
|
import json
|
||||||
|
|
||||||
|
from collections import MutableMapping
|
||||||
|
|
||||||
|
def rec_merge(d1, d2):
|
||||||
|
'''
|
||||||
|
Update two dicts of dicts recursively,
|
||||||
|
if either mapping has leaves that are non-dicts,
|
||||||
|
the second's leaf overwrites the first's.
|
||||||
|
'''
|
||||||
|
for k, v in d1.items(): # in Python 2, use .iteritems()!
|
||||||
|
if k in d2:
|
||||||
|
# this next check is the only difference!
|
||||||
|
if all(isinstance(e, MutableMapping) for e in (v, d2[k])):
|
||||||
|
d2[k] = rec_merge(v, d2[k])
|
||||||
|
# we could further check types and merge as appropriate here.
|
||||||
|
d3 = d1.copy()
|
||||||
|
d3.update(d2)
|
||||||
|
return d3
|
||||||
|
|
||||||
|
|
||||||
|
class alfred_merge:
|
||||||
|
def __init__(self,request_data_type_1 = 158, request_data_type_2 = 159):
|
||||||
|
self.request_data_type_1 = request_data_type_1
|
||||||
|
self.request_data_type_2 = request_data_type_2
|
||||||
|
|
||||||
|
def aliases(self):
|
||||||
|
output = subprocess.check_output(["/usr/local/sbin/alfred-json","-z", "-r",str(self.request_data_type_1),"-f","json"])
|
||||||
|
alfred_data_1 = json.loads(output.decode("utf-8"))
|
||||||
|
output = subprocess.check_output(["/usr/local/sbin/alfred-json","-z", "-r",str(self.request_data_type_2),"-f","json"])
|
||||||
|
alfred_data_2 = json.loads(output.decode("utf-8"))
|
||||||
|
|
||||||
|
return json.dumps(rec_merge(alfred_data_1, alfred_data_2))
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
ad = alfred_merge()
|
||||||
|
al = ad.aliases()
|
||||||
|
print(al)
|
||||||
|
|
|
@ -84,9 +84,9 @@ def main(params):
|
||||||
# integrate static aliases data
|
# integrate static aliases data
|
||||||
for aliases in params['aliases']:
|
for aliases in params['aliases']:
|
||||||
with open(aliases, 'r') as f:
|
with open(aliases, 'r') as f:
|
||||||
nodeinfo = validate_nodeinfos(json.load(f))
|
# nodeinfo = validate_nodeinfos(json.load(f))
|
||||||
nodes.import_nodeinfo(nodedb['nodes'], nodeinfo,
|
nodes.import_nodeinfo(nodedb['nodes'], json.load(f),
|
||||||
now, assume_online=False)
|
now, assume_online=False, statics=True)
|
||||||
|
|
||||||
nodes.reset_statistics(nodedb['nodes'])
|
nodes.reset_statistics(nodedb['nodes'])
|
||||||
for alfred in alfred_instances:
|
for alfred in alfred_instances:
|
||||||
|
@ -157,7 +157,6 @@ def main(params):
|
||||||
rrd.update_database(nodedb['nodes'])
|
rrd.update_database(nodedb['nodes'])
|
||||||
rrd.update_images()
|
rrd.update_images()
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
parser = argparse.ArgumentParser()
|
parser = argparse.ArgumentParser()
|
||||||
|
|
||||||
|
|
|
@ -13,6 +13,9 @@ def export_nodelist(now, nodedb):
|
||||||
node_out["status"] = dict()
|
node_out["status"] = dict()
|
||||||
node_out["status"]["online"] = node["flags"]["online"]
|
node_out["status"]["online"] = node["flags"]["online"]
|
||||||
|
|
||||||
|
if "firstseen" in node:
|
||||||
|
node_out["status"]["firstcontact"] = node["firstseen"]
|
||||||
|
|
||||||
if "lastseen" in node:
|
if "lastseen" in node:
|
||||||
node_out["status"]["lastcontact"] = node["lastseen"]
|
node_out["status"]["lastcontact"] = node["lastseen"]
|
||||||
|
|
||||||
|
|
21
lib/nodes.py
21
lib/nodes.py
|
@ -56,12 +56,23 @@ def mark_online(node, now):
|
||||||
node['flags']['online'] = True
|
node['flags']['online'] = True
|
||||||
|
|
||||||
|
|
||||||
def import_nodeinfo(nodes, nodeinfos, now, assume_online=False):
|
def overrideFields(dest, src, fields):
|
||||||
|
for field in fields:
|
||||||
|
if field in src:
|
||||||
|
dest[field] = src[field]
|
||||||
|
else:
|
||||||
|
dest.pop(field, None)
|
||||||
|
|
||||||
|
|
||||||
|
def import_nodeinfo(nodes, nodeinfos, now, assume_online=False, statics=False):
|
||||||
for nodeinfo in filter(lambda d: 'node_id' in d, nodeinfos):
|
for nodeinfo in filter(lambda d: 'node_id' in d, nodeinfos):
|
||||||
node = nodes.setdefault(nodeinfo['node_id'], {'flags': dict()})
|
node = nodes.setdefault(nodeinfo['node_id'], {'flags': {'online': False, 'gateway': False}})
|
||||||
node['nodeinfo'] = nodeinfo
|
|
||||||
node['flags']['online'] = False
|
if statics:
|
||||||
node['flags']['gateway'] = False
|
node['nodeinfo'] = node.setdefault('nodeinfo', {})
|
||||||
|
overrideFields(node['nodeinfo'], nodeinfo, ['hostname', 'location', 'node_id'])
|
||||||
|
else:
|
||||||
|
node['nodeinfo'] = nodeinfo
|
||||||
|
|
||||||
if assume_online:
|
if assume_online:
|
||||||
mark_online(node, now)
|
mark_online(node, now)
|
||||||
|
|
Loading…
Reference in a new issue