Dashboard: server-side data processing

Signed-off-by: Romein van Buren <romein@vburen.nl>
This commit is contained in:
2022-07-12 09:40:49 +02:00
parent 87b583e0dd
commit 25cb7652e1
5 changed files with 92 additions and 49 deletions

View File

@ -5,6 +5,13 @@ const { makeId } = require('core/makeid');
const decoder = new TextDecoder('utf-8');
let uws;
const mapService = (s, beat) => ({
id: s.id,
name: s.name,
cluster: s.cluster,
lastBeat: beat,
});
async function createDashboardSocket(server) {
uws = server.ws({
route: '/statusdashboard/socket',
@ -34,21 +41,33 @@ async function createDashboardSocket(server) {
.find({ webservice: { $in: services.map(s => s.id) } })
.sort({ date: -1 })
.toArray();
const mappedServices = {};
for (const s of services) {
const lastBeat = heartbeats.find(h => h.webservice === s.id);
mappedServices[s.id] = {
name: s.name,
lastBeat: lastBeat || {},
cluster: s.cluster,
};
const servicesUp = [];
const servicesDown = [];
const servicesUnknown = [];
console.log(heartbeats);
for (let service of services) {
const beat = heartbeats.find(b => b.webservice === service.id);
service = mapService(service, beat);
if (!beat) {
servicesUnknown.push(service);
}
else if (beat.down) {
servicesDown.push(service);
}
else {
servicesUp.push(service);
}
}
try {
ws.send(JSON.stringify({
cmd: 'data',
data: mappedServices,
servicesUp,
servicesDown,
servicesUnknown,
}));
}
catch {