From b62e209e6f9dc31bf0658b7fa6670021bfa0c085 Mon Sep 17 00:00:00 2001 From: lllllllillllllillll Date: Wed, 21 Feb 2024 17:05:43 -0800 Subject: [PATCH] Fixed issue with dashboard and improved event loop --- controllers/dashboard.js | 13 ------------- server.js | 40 +++++++++++++++++----------------------- views/dashboard.html | 13 +++---------- 3 files changed, 20 insertions(+), 46 deletions(-) diff --git a/controllers/dashboard.js b/controllers/dashboard.js index 3b11040..8ec58bf 100644 --- a/controllers/dashboard.js +++ b/controllers/dashboard.js @@ -291,21 +291,8 @@ async function containerCards() { cardList = list; } -export async function sendCheck() { - await getHidden(); - await containerCards(); - if (cardList != sentList) { - cardList = sentList; - return true; - } else { - return false; - } -} - - export const Containers = async (req, res) => { await getHidden(); await containerCards(); - sentList = cardList; res.send(cardList); } diff --git a/server.js b/server.js index e6ae3b3..6cb4b19 100644 --- a/server.js +++ b/server.js @@ -6,7 +6,6 @@ import Docker from 'dockerode'; import { router } from './router/index.js'; import { sequelize } from './database/models.js'; import { currentLoad, mem, networkStats, fsSize } from 'systeminformation'; -import { sendCheck } from './controllers/dashboard.js'; export var docker = new Docker(); export { setEvent, cpu, ram, tx, rx, disk } @@ -80,34 +79,29 @@ let serverMetrics = async () => { setInterval(serverMetrics, 1000); -// Docker events -docker.getEvents((err, stream) => { - if (err) throw err; - stream.on('data', (chunk) => { - event = true; - eventType = 'docker'; - }); -}); - -// Check if the container cards need to be updated -setInterval(async () => { - if (event == false) { return; } - sse = await sendCheck(); - event = false; -}, 500); - - +let sent_list = ''; router.get('/sse_event', (req, res) => { res.writeHead(200, { 'Content-Type': 'text/event-stream', 'Cache-Control': 'no-cache', 'Connection': 'keep-alive', }); - let eventCheck = setInterval(async () => { - if (sse == true) { - sse = false; + + let eventCheck = setInterval(async() => { + let all_containers = ''; + + await docker.listContainers({ all: true }).then(containers => { + containers.forEach(container => { + all_containers += `${container.Names}: ${container.State}\n`; + }); + }); + if (all_containers != sent_list) { + sent_list = all_containers; + setEvent(true, 'docker'); res.write(`event: ${eventType}\n`); res.write(`data: there was an event!\n\n`); } - }, 500); + }, 1000); req.on('close', () => { clearInterval(eventCheck); }); -}); \ No newline at end of file +}); + + diff --git a/views/dashboard.html b/views/dashboard.html index 884fb01..6a1c5d0 100644 --- a/views/dashboard.html +++ b/views/dashboard.html @@ -22,7 +22,7 @@ -
+
<%- include('navbar.html') %> @@ -137,15 +137,8 @@
-
-
- -
-
- - -
-
+
+