From 4e6e2e76de62a59006fe3f5b82470a88a512ba2f Mon Sep 17 00:00:00 2001 From: Marvin Zhang Date: Thu, 21 Feb 2019 14:18:26 +0800 Subject: [PATCH] return existing nodes --- constants/node.py | 4 +-- routes/nodes.py | 63 ++++++++++++++++++++++++++++------------------- 2 files changed, 40 insertions(+), 27 deletions(-) diff --git a/constants/node.py b/constants/node.py index 0e0b1dbc..8dc2f494 100644 --- a/constants/node.py +++ b/constants/node.py @@ -1,3 +1,3 @@ class NodeType: - OFFLINE = 0 - ONLINE = 1 + ONLINE = 'online' + OFFLINE = 'offline' diff --git a/routes/nodes.py b/routes/nodes.py index 82c58de7..b49cd856 100644 --- a/routes/nodes.py +++ b/routes/nodes.py @@ -13,8 +13,8 @@ class NodeApi(BaseApi): col_name = 'nodes' arguments = ( - ('ip', str), - ('port', int), + # ('ip', str), + # ('port', int), ('name', str), ('description', str), ) @@ -35,36 +35,49 @@ class NodeApi(BaseApi): return db_manager.get('nodes', id=id) # get a list of items - else: - res = requests.get('%s/workers' % FLOWER_API_ENDPOINT) - for k, v in json.loads(res.content.decode('utf-8')).items(): - node_name = k - node_celery = v - node = db_manager.get('nodes', id=node_name) + res = requests.get('%s/workers' % FLOWER_API_ENDPOINT) + online_node_ids = [] + for k, v in json.loads(res.content.decode('utf-8')).items(): + node_name = k + node_celery = v + node = db_manager.get('nodes', id=node_name) - # new node - if node is None: - node = {} - for _k, _v in v.items(): - node[_k] = _v - node['_id'] = node_name - node['name'] = node_name - node['status'] = NodeType.ONLINE - db_manager.save('nodes', node) + # new node + if node is None: + node = {} + for _k, _v in node_celery.items(): + node[_k] = _v + node['_id'] = node_name + node['name'] = node_name + node['status'] = NodeType.ONLINE + db_manager.save('nodes', node) - # existing node - else: - for _k, _v in v.items(): - node[_k] = _v - node['name'] = node_name - node['status'] = NodeType.ONLINE - db_manager.save('nodes', node) + # existing node + else: + for _k, _v in v.items(): + node[_k] = _v + node['name'] = node_name + node['status'] = NodeType.ONLINE + db_manager.save('nodes', node) + online_node_ids.append(node_name) + + # iterate db nodes to update status + nodes = [] items = db_manager.list('nodes', {}) + for item in items: + if item['_id'] in online_node_ids: + item['status'] = NodeType.ONLINE + else: + item['status'] = NodeType.OFFLINE + db_manager.update_one('nodes', item['_id'], { + 'status': item['status'] + }) + nodes.append(item) return jsonify({ 'status': 'ok', - 'items': items + 'items': nodes }) def spider(self, id=None):