From 8ee6db881db405e504cb6d049d808bdbf06eddd2 Mon Sep 17 00:00:00 2001 From: lideming Date: Wed, 24 Feb 2021 13:13:27 +0800 Subject: [PATCH] Get peer status of network members --- src/controllers/networkController.js | 35 +++++++++++++++++----------- src/controllers/zt.js | 21 ++++++++++++++++- 2 files changed, 42 insertions(+), 14 deletions(-) diff --git a/src/controllers/networkController.js b/src/controllers/networkController.js index 0d6e46b..f48a0d3 100644 --- a/src/controllers/networkController.js +++ b/src/controllers/networkController.js @@ -13,30 +13,38 @@ const util = require('util'); storage.initSync({dir: 'etc/storage'}); async function get_network_with_members(nwid) { - const [network, member_ids] = await Promise.all([ + const [network, peers, members] = await Promise.all([ zt.network_detail(nwid), + zt.peers(), zt.members(nwid) + .then(member_ids => + Promise.all( + Object.keys(member_ids) + .map(id => Promise.all([ + zt.member_detail(nwid, id), + storage.getItem(id) + ])) + ) + ).then(results => results.map(([member, name]) => { + member.name = name || ''; + return member; + })) ]); - const members = await Promise.all( - Object.keys(member_ids) - .map(id => Promise.all([ - zt.member_detail(nwid, id), - storage.getItem(id) - ])) - ).then(results => results.map(([member, name]) => { - member.name = name || ''; - return member; - })); + for (const member of members) { + member.peer = peers.find(x => x.address === member.address); + } return {network, members}; } async function get_network_member(nwid, memberid) { - const [network, member, name] = await Promise.all([ + const [network, member, peer, name] = await Promise.all([ zt.network_detail(nwid), zt.member_detail(nwid, memberid), + zt.peer(memberid), storage.getItem(memberid) ]); member.name = name || ''; + member.peer = peer; return {network, member}; } @@ -485,7 +493,8 @@ exports.member_detail = async function(req, res) { navigate.whence = '/controller/network/' + network.nwid + '#members'; res.render('member_detail', {title: 'Network member detail', navigate: navigate, network: network, member: member}); } catch (err) { - res.render(req.params.object, {title: req.params.object, navigate: navigate, error: 'Error resolving detail for member ' + req.params.id + ' of network ' + req.params.nwid + ': ' + err}); + console.error(err); + res.render('error', {title: req.params.object, navigate: navigate, error: 'Error resolving detail for member ' + req.params.id + ' of network ' + req.params.nwid + ': ' + err}); } }; diff --git a/src/controllers/zt.js b/src/controllers/zt.js index ceff3f4..f735d40 100644 --- a/src/controllers/zt.js +++ b/src/controllers/zt.js @@ -8,7 +8,7 @@ const got = require('got'); const ipaddr = require('ip-address'); const token = require('./token'); -ZT_ADDR = process.env.ZT_ADDR || 'localhost:9993'; +const ZT_ADDR = process.env.ZT_ADDR || 'localhost:9993'; const init_options = async function() { let tok = null; @@ -308,3 +308,22 @@ exports.network_easy_setup = async function(nwid, throw(err); } } + +exports.peers = async function() { + const options = await init_options(); + const response = await got(ZT_ADDR + '/peer', options); + return response.body; +} + +exports.peer = async function(id) { + const options = await init_options(); + try { + const response = await got(ZT_ADDR + '/peer/' + id, options); + return response.body; + } catch (error) { + if (error instanceof got.HTTPError && error.statusCode == 404) { + return null; + } + throw error; + } +}