feat: last online

This commit is contained in:
dec0dOS 2022-08-26 02:25:16 +03:00
parent 206d12ded3
commit 40f98cc9df
9 changed files with 82 additions and 64 deletions

View file

@ -23,11 +23,15 @@ app.use(express.urlencoded({ extended: false }));
if (process.env.ZU_DISABLE_AUTH !== "true") {
app.use(
bearerToken({
headerKey: "Bearer",
headerKey: "token",
})
);
}
if (process.env.NODE_ENV === "production") {
console.debug = function () {};
}
if (
process.env.NODE_ENV === "production" &&
process.env.ZU_SECURE_HEADERS !== "false"
@ -56,6 +60,18 @@ initAdmin().then(function (admin) {
db.defaults({ users: [admin], networks: [] }).write();
});
if (process.env.ZU_LAST_SEEN_FETCH !== "false") {
let schedule = process.env.ZU_LAST_SEEN_SCHEDULE || "*/5 * * * *";
cron.schedule(schedule, () => {
console.debug("Running scheduled job");
const networks = db.get("networks").value();
networks.forEach((network) => {
console.debug("Processing " + network.id);
pingAll(network);
});
});
}
const routerAPI = express.Router();
const routerController = express.Router();
@ -76,13 +92,4 @@ app.use(async function (err, req, res) {
res.status(500).json({ error: "500 Internal server error" });
});
// ping all networks every 5 minutes
cron.schedule('5 * * * *', () => {
const networks = db.get('networks').value();
networks.forEach((network) => {
pingAll(network);
})
});
module.exports = app;

View file

@ -25,13 +25,14 @@ async function getMemberAdditionalData(data) {
network.defaults({ members: [] }).get("members").write();
// END MIGRATION SECTION
const additionalData = db
const member = db
.get("networks")
.find({ id: data.nwid })
.get("members")
.find({ id: data.id })
.get("additionalConfig")
.value();
.find({ id: data.id });
const additionalData = member.get("additionalConfig").value();
const lastOnline = member.get("lastOnline").value() || 0;
const peer = await getPeer(data.id);
let peerData = {};
@ -57,11 +58,11 @@ async function getMemberAdditionalData(data) {
return {
id: data.nwid + "-" + data.id,
type: "Member",
clock: Math.floor(new Date().getTime() / 1000),
clock: new Date().getTime(),
networkId: data.nwid,
nodeId: data.id,
controllerId: ZT_ADDRESS,
lastOnline: lastOnline,
...additionalData,
...peerData,
config: data,

View file

@ -23,8 +23,7 @@ async function getNetworkAdditionalData(data) {
return {
id: data.id,
type: "Network",
clock: Math.floor(new Date().getTime() / 1000),
clock: new Date().getTime(),
...additionalData.value(),
config: data,
};

View file

@ -1,22 +1,29 @@
const api = require("./controller-api");
const db = require("./db");
export default pingAll;
async function pingAll (network) {
await Promise.all(network.members.map((async (member) => {
try {
await api.get("peer/" + member.id);
// write lastOnelineTime field in db
db.get("networks")
.filter({ id: network.id })
.map("members")
.first()
.filter({ id: member.id })
.first()
.set("lastOnlineTime", new Date().getTime())
.write();
} catch (err) {
return;
}
})));
};
async function pingAll(network) {
await Promise.all(
network.members.map(async (member) => {
console.debug("Processing " + 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();
})
.catch(function (err) {
console.debug("Couldn't fetch", member.id);
return;
});
})
);
}
module.exports = pingAll;

View file

@ -5,6 +5,8 @@ module.exports = async function () {
const res = await api.get("status");
return res.data.address;
} catch (err) {
console.error(err);
console.error(
"Couldn't connect to the controller on " + err.config.baseURL
);
}
};