فهرست منبع

Fixed issue with dashboard and improved event loop

lllllllillllllillll 1 سال پیش
والد
کامیت
b62e209e6f
3فایلهای تغییر یافته به همراه20 افزوده شده و 46 حذف شده
  1. 0 13
      controllers/dashboard.js
  2. 17 23
      server.js
  3. 3 10
      views/dashboard.html

+ 0 - 13
controllers/dashboard.js

@@ -291,21 +291,8 @@ async function containerCards() {
     cardList = list;
     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) => {
 export const Containers = async (req, res) => {
     await getHidden();
     await getHidden();
     await containerCards();
     await containerCards();
-    sentList = cardList;
     res.send(cardList);
     res.send(cardList);
 }
 }

+ 17 - 23
server.js

@@ -6,7 +6,6 @@ import Docker from 'dockerode';
 import { router } from './router/index.js';
 import { router } from './router/index.js';
 import { sequelize } from './database/models.js';
 import { sequelize } from './database/models.js';
 import { currentLoad, mem, networkStats, fsSize } from 'systeminformation';
 import { currentLoad, mem, networkStats, fsSize } from 'systeminformation';
-import { sendCheck } from './controllers/dashboard.js';
 
 
 export var docker = new Docker();
 export var docker = new Docker();
 export { setEvent, cpu, ram, tx, rx, disk }
 export { setEvent, cpu, ram, tx, rx, disk }
@@ -80,34 +79,29 @@ let serverMetrics = async () => {
 setInterval(serverMetrics, 1000);
 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) => {
 router.get('/sse_event', (req, res) => {
     res.writeHead(200, { 'Content-Type': 'text/event-stream', 'Cache-Control': 'no-cache', 'Connection': 'keep-alive', });
     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(`event: ${eventType}\n`);
             res.write(`data: there was an event!\n\n`);
             res.write(`data: there was an event!\n\n`);
         }
         }
-    }, 500);
+    }, 1000);
     req.on('close', () => {
     req.on('close', () => {
         clearInterval(eventCheck);
         clearInterval(eventCheck);
     });
     });
-});
+});
+
+

+ 3 - 10
views/dashboard.html

@@ -22,7 +22,7 @@
   </head>
   </head>
   <body >
   <body >
   
   
-  <div class="page" hx-ext="sse" sse-connect="/sse_event">
+  <div class="page">
 
 
     <%- include('navbar.html') %>
     <%- include('navbar.html') %>
     
     
@@ -137,15 +137,8 @@
             </div>
             </div>
 
 
             <!-- HTMX -->
             <!-- HTMX -->
-            <div class="col-12">
-              <div class="row row-cards" data-hx-get="/containers" data-hx-trigger="load, sse:docker" data-hx-swap="innerHTML">
-
-              </div>
-            </div>
-
-            <!-- HTMX -->
-            <div class="col-12">
-              <div class="row row-cards" data-hx-get="/installing" data-hx-trigger="sse:install" data-hx-swap="innerHTML">
+            <div class="col-12" hx-ext="sse" sse-connect="/sse_event">
+              <div class="row row-cards" id="containerCards" data-hx-get="/containers" data-hx-trigger="load, sse:docker" data-hx-swap="innerHTML">
 
 
               </div>
               </div>
             </div>
             </div>