From db8f4979e65d23d93de99ffa428c9b9a3d3fd952 Mon Sep 17 00:00:00 2001 From: Syrone Wong Date: Thu, 1 Jun 2023 08:34:42 +0800 Subject: [PATCH] fix: ping peer response handling causes treating all members online fix async/await usage --- backend/app.js | 6 +++--- backend/utils/ping.js | 26 +++++++++++++++----------- 2 files changed, 18 insertions(+), 14 deletions(-) diff --git a/backend/app.js b/backend/app.js index 95aeb65..037ba24 100644 --- a/backend/app.js +++ b/backend/app.js @@ -65,9 +65,9 @@ if (process.env.ZU_LAST_SEEN_FETCH !== "false") { cron.schedule(schedule, () => { console.debug("Running scheduled job"); const networks = db.get("networks").value(); - networks.forEach((network) => { - console.debug("Processing " + network.id); - pingAll(network); + networks.forEach(async (network) => { + console.debug("Processing network " + network.id); + await pingAll(network); }); }); } diff --git a/backend/utils/ping.js b/backend/utils/ping.js index 0f37589..218107f 100644 --- a/backend/utils/ping.js +++ b/backend/utils/ping.js @@ -1,22 +1,26 @@ +const _ = require("lodash"); + const api = require("./controller-api"); const db = require("./db"); async function pingAll(network) { await Promise.all( network.members.map(async (member) => { - console.debug("Processing " + member.id); + console.debug("Processing member " + member.id); api .get("peer/" + member.id) - .then(async function () { - // write lastOneline field in db - db.get("networks") - .filter({ id: network.id }) - .map("members") - .first() - .filter({ id: member.id }) - .first() - .set("lastOnline", new Date().getTime()) - .write(); + .then(function (controllerResp) { + if (!_.isEmpty(controllerResp.data)) { + // write lastOnline field in db + db.get("networks") + .filter({ id: network.id }) + .map("members") + .first() + .filter({ id: member.id }) + .first() + .set("lastOnline", new Date().getTime()) + .write(); + } }) .catch(function (err) { console.debug("Couldn't fetch", member.id);