mirror of
https://github.com/dec0dOS/zero-ui.git
synced 2025-07-06 04:51:44 -07:00
feat: last online
This commit is contained in:
parent
206d12ded3
commit
40f98cc9df
9 changed files with 82 additions and 64 deletions
|
@ -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;
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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,
|
||||
};
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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
|
||||
);
|
||||
}
|
||||
};
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue