瀏覽代碼

yanic: Use more recent node information if multiple are present.

 If there are multiple occurances for the same node in multiple input files
 make sure to use the more recent one. This may happen when a node is moved
 between sites and the old nodeinfo has not been purged yet.

Signed-off-by: Maximilian Wilhelm <max@sdn.clinic>
Maximilian Wilhelm 4 年之前
父節點
當前提交
2a383fcaa7
共有 1 個文件被更改,包括 17 次插入0 次删除
  1. 17 0
      yanic/ff_merge_nodes_json

+ 17 - 0
yanic/ff_merge_nodes_json

@@ -8,6 +8,7 @@ import argparse
 import json
 import os
 import sys
+import time
 
 parser = argparse.ArgumentParser (description = 'Merge nodes.json files')
 parser.add_argument ('files', help = 'Path for nodes.json file(s)', nargs = '+')
@@ -27,6 +28,22 @@ for file_path in args.files:
 		sys.exit (1)
 
 	for node in nodes['nodes']:
+		node_id = node['nodeinfo']['node_id']
+
+		# If node_id has already been seen make sure to use the newer entry
+		if node_id in all_nodes:
+			try:
+				node_lastseen = time.strptime (node['lastseen'], "%Y-%m-%dT%H:%M:%S%z")
+				existing_node_lastseen = time.strptime (existing_node_lastseen['lastseen'], "%Y-%m-%dT%H:%M:%S%z")
+
+				# If the node information already stored in all_nodes is more
+				# recent than the node we just found, don't overwrite it.
+				if existing_node_lastseen > node_lastseen:
+					continue
+			except Exception:
+				# If parsing a timestamp fails just carry on
+				continue
+
 		all_nodes[node['nodeinfo']['node_id']] = node
 
 	for key in nodes.keys ():