瀏覽代碼

Improved dashboard controller and router.
removed console.log()s.

lllllllillllllillll 1 年之前
父節點
當前提交
25280ae174
共有 3 個文件被更改,包括 101 次插入119 次删除
  1. 75 24
      controllers/dashboard.js
  2. 14 14
      router/index.js
  3. 12 81
      server.js

+ 75 - 24
controllers/dashboard.js

@@ -2,10 +2,11 @@ import { Readable } from 'stream';
 import { Permission, Container } from '../database/models.js';
 import { Permission, Container } from '../database/models.js';
 import { modal } from '../components/modal.js';
 import { modal } from '../components/modal.js';
 import { permissionsModal } from '../components/permissions_modal.js';
 import { permissionsModal } from '../components/permissions_modal.js';
-import { setEvent, sse, cpu, ram, tx, rx, disk, docker } from '../server.js';
+import { setEvent, cpu, ram, tx, rx, disk, docker } from '../server.js';
 import { dockerContainerStats } from 'systeminformation';
 import { dockerContainerStats } from 'systeminformation';
 import { containerCard } from '../components/containerCard.js';
 import { containerCard } from '../components/containerCard.js';
 
 
+let [ hidden, cardList, sentList ] = [ '', '', ''];
 
 
 export const Dashboard = (req, res) => {
 export const Dashboard = (req, res) => {
     res.render("dashboard", {
     res.render("dashboard", {
@@ -15,17 +16,6 @@ export const Dashboard = (req, res) => {
     });
     });
 }
 }
 
 
-
-export const searchDashboard = (req, res) => {
-    // console.log(req.params);
-    res.render("dashboard", {
-        name: req.session.user,
-        role: req.session.role,
-        avatar: req.session.avatar,
-    });
-}
-
-
 export const Start = (req, res) => {
 export const Start = (req, res) => {
     let name = req.header('hx-trigger-name');
     let name = req.header('hx-trigger-name');
     let state = req.header('hx-trigger');
     let state = req.header('hx-trigger');
@@ -44,8 +34,6 @@ export const Start = (req, res) => {
 
 
 export const Stop = (req, res) => {
 export const Stop = (req, res) => {
         
         
-    console.log(`Clicked on stop`);
-
     let name = req.header('hx-trigger-name');
     let name = req.header('hx-trigger-name');
     let state = req.header('hx-trigger');
     let state = req.header('hx-trigger');
 
 
@@ -58,8 +46,6 @@ export const Stop = (req, res) => {
 }
 }
 
 
 export const Pause = (req, res) => {
 export const Pause = (req, res) => {
-        
-    console.log(`Clicked on pause`);
 
 
     let name = req.header('hx-trigger-name');
     let name = req.header('hx-trigger-name');
     let state = req.header('hx-trigger');
     let state = req.header('hx-trigger');
@@ -77,8 +63,6 @@ export const Pause = (req, res) => {
 
 
 export const Restart = (req, res) => {
 export const Restart = (req, res) => {
         
         
-    console.log(`Clicked on restart`);
-
     let name = req.header('hx-trigger-name');
     let name = req.header('hx-trigger-name');
     var containerName = docker.getContainer(name);
     var containerName = docker.getContainer(name);
     containerName.restart();
     containerName.restart();
@@ -161,7 +145,6 @@ export const Modal = async (req, res) => {
 
 
 }
 }
 
 
-
 export const Stats = async (req, res) => {
 export const Stats = async (req, res) => {
     let name = req.header('hx-trigger-name');
     let name = req.header('hx-trigger-name');
     let color = req.header('hx-trigger');
     let color = req.header('hx-trigger');
@@ -188,11 +171,8 @@ export const Stats = async (req, res) => {
 }
 }
 
 
 
 
-
 export const Hide = async (req, res) => {
 export const Hide = async (req, res) => {
     let name = req.header('hx-trigger-name');
     let name = req.header('hx-trigger-name');
-    let id = req.header('hx-trigger');
-
     let exists = await Container.findOne({ where: {name: name}});
     let exists = await Container.findOne({ where: {name: name}});
     if (!exists) {
     if (!exists) {
         const newContainer = await Container.create({ name: name, visibility: false, });
         const newContainer = await Container.create({ name: name, visibility: false, });
@@ -203,7 +183,6 @@ export const Hide = async (req, res) => {
     res.send("ok");
     res.send("ok");
 }
 }
 
 
-
 export const Reset = async (req, res) => {
 export const Reset = async (req, res) => {
     Container.update({ visibility: true }, { where: {} });
     Container.update({ visibility: true }, { where: {} });
     setEvent(true, 'docker');
     setEvent(true, 'docker');
@@ -257,4 +236,76 @@ export const Installing = (req, res) => {
     }
     }
     let card = containerCard(install_info);
     let card = containerCard(install_info);
     res.send(card);
     res.send(card);
-}
+}
+
+
+
+// Get hidden containers
+async function getHidden() {
+    hidden = await Container.findAll({ where: {visibility:false}});
+    hidden = hidden.map((container) => container.name);
+}
+
+// Create list of docker containers cards
+async function containerCards() {
+    let list = '';
+    const allContainers = await docker.listContainers({ all: true });
+    for (const container of allContainers) {
+        if (!hidden.includes(container.Names[0].slice(1))) {
+
+            let imageVersion = container.Image.split('/');
+            let service = imageVersion[imageVersion.length - 1].split(':')[0];
+            let containerId = docker.getContainer(container.Id);
+            let containerInfo = await containerId.inspect();
+            let ports_list = [];
+            try {
+            for (const [key, value] of Object.entries(containerInfo.HostConfig.PortBindings)) {
+                let ports = {
+                    check: 'checked',
+                    external: value[0].HostPort,
+                    internal: key.split('/')[0],
+                    protocol: key.split('/')[1]
+                }
+                ports_list.push(ports);
+            }
+            } catch {}
+
+            let external_port = ports_list[0]?.external || 0;
+            let internal_port = ports_list[0]?.internal || 0;
+
+            let container_info = {
+                name: container.Names[0].slice(1),
+                service: service,
+                id: container.Id,
+                state: container.State,
+                image: container.Image,
+                external_port: external_port,
+                internal_port: internal_port,
+                ports: ports_list,
+                link: 'localhost',
+            }
+            let card = containerCard(container_info);
+            list += card;
+        }
+    }
+    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);
+}

+ 14 - 14
router/index.js

@@ -4,7 +4,7 @@ export const router = express.Router();
 // Controllers
 // Controllers
 import { Login, submitLogin, Logout } from "../controllers/login.js";
 import { Login, submitLogin, Logout } from "../controllers/login.js";
 import { Register, submitRegister } from "../controllers/register.js";
 import { Register, submitRegister } from "../controllers/register.js";
-import { Dashboard, searchDashboard, Start, Stop, Pause, Restart, Logs, Modal, Stats, Hide, Reset, Chart, Installing } from "../controllers/dashboard.js";
+import { Dashboard, Start, Stop, Pause, Restart, Logs, Modal, Stats, Hide, Reset, Chart, Installing, Containers } from "../controllers/dashboard.js";
 import { Apps, appSearch } from "../controllers/apps.js";
 import { Apps, appSearch } from "../controllers/apps.js";
 import { Users } from "../controllers/users.js";
 import { Users } from "../controllers/users.js";
 import { Images, removeImage } from "../controllers/images.js";
 import { Images, removeImage } from "../controllers/images.js";
@@ -26,14 +26,9 @@ const auth = (req, res, next) => {
     }
     }
 };
 };
 
 
-// Routes
-router.get("/login", Login);
-router.post("/login", submitLogin);
-router.get("/register", Register);
-router.post("/register", submitRegister);  
-router.get("/logout", Logout);
-
+// Admin routes
 router.get("/", auth, Dashboard);
 router.get("/", auth, Dashboard);
+router.get("/containers", auth, Containers);
 router.post("/start", auth, Start);
 router.post("/start", auth, Start);
 router.post("/stop", auth, Stop);
 router.post("/stop", auth, Stop);
 router.post("/pause", auth, Pause);
 router.post("/pause", auth, Pause);
@@ -46,17 +41,14 @@ router.post("/reset", auth, Reset);
 router.get("/chart", auth, Chart);
 router.get("/chart", auth, Chart);
 router.get("/installing", auth, Installing);
 router.get("/installing", auth, Installing);
 
 
-
 router.get("/images", auth, Images);
 router.get("/images", auth, Images);
-router.post("/removeImage", removeImage);
+router.post("/removeImage", auth, removeImage);
 
 
 router.get("/volumes", auth, Volumes);
 router.get("/volumes", auth, Volumes);
 router.post("/removeVolume", auth, removeVolume);
 router.post("/removeVolume", auth, removeVolume);
 
 
 router.get("/networks", auth, Networks);
 router.get("/networks", auth, Networks);
-router.post("/removeNetwork", removeNetwork);
-
-router.get("/portal", Portal)
+router.post("/removeNetwork", auth, removeNetwork);
 
 
 router.get("/apps", auth, Apps);
 router.get("/apps", auth, Apps);
 router.get("/apps/:page", auth, Apps);
 router.get("/apps/:page", auth, Apps);
@@ -65,13 +57,21 @@ router.post("/apps", auth, appSearch);
 router.get("/users", auth, Users);
 router.get("/users", auth, Users);
 router.get("/syslogs", auth, Syslogs);
 router.get("/syslogs", auth, Syslogs);
 
 
-router.get("/account", Account);
 router.get("/variables", auth, Variables);
 router.get("/variables", auth, Variables);
 router.get("/settings", auth, Settings);
 router.get("/settings", auth, Settings);
 
 
+// User routes
+router.get("/portal", Portal);
+router.get("/account", Account);
 router.get("/supporters", Supporters);
 router.get("/supporters", Supporters);
 router.post("/thank", Thanks);
 router.post("/thank", Thanks);
 
 
+router.get("/login", Login);
+router.post("/login", submitLogin);
+router.get("/register", Register);
+router.post("/register", submitRegister);  
+router.get("/logout", Logout);
+
 
 
 // Functions
 // Functions
 import { Install } from "../functions/install.js"
 import { Install } from "../functions/install.js"

+ 12 - 81
server.js

@@ -4,12 +4,12 @@ import memorystore from 'memorystore';
 import ejs from 'ejs';
 import ejs from 'ejs';
 import Docker from 'dockerode';
 import Docker from 'dockerode';
 import { router } from './router/index.js';
 import { router } from './router/index.js';
-import { sequelize, Container } 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 { containerCard } from './components/containerCard.js';
-export var docker = new Docker();
+import { sendCheck } from './controllers/dashboard.js';
 
 
-export { setEvent, sse, cpu, ram, tx, rx, disk }
+export var docker = new Docker();
+export { setEvent, cpu, ram, tx, rx, disk }
 
 
 const app = express();
 const app = express();
 const MemoryStore = memorystore(session);
 const MemoryStore = memorystore(session);
@@ -54,14 +54,11 @@ app.listen(port, async () => {
 });
 });
 
 
 let [ cpu, ram, tx, rx, disk ] = [0, 0, 0, 0, 0];
 let [ cpu, ram, tx, rx, disk ] = [0, 0, 0, 0, 0];
-let [ hidden, cardList, sentList ] = ['', '', ''];
-let event = false;
-let sse = false;
-let eventInfo = '';
+let [ event, sse, eventType ] = [false, false, ''];
 
 
 function setEvent(value, type) {
 function setEvent(value, type) {
     event = value;
     event = value;
-    eventInfo = type;
+    eventType = type;
 }
 }
 
 
 // Server metrics
 // Server metrics
@@ -82,86 +79,23 @@ let serverMetrics = async () => {
 }
 }
 setInterval(serverMetrics, 1000);
 setInterval(serverMetrics, 1000);
 
 
-// Get hidden containers
-async function getHidden() {
-    hidden = await Container.findAll({ where: {visibility:false}});
-    hidden = hidden.map((container) => container.name);
-}
-
-// Create list of docker containers cards
-let containerCards = async () => {
-    let list = '';
-    const allContainers = await docker.listContainers({ all: true });
-    for (const container of allContainers) {
-        if (!hidden.includes(container.Names[0].slice(1))) {
-
-            let imageVersion = container.Image.split('/');
-            let service = imageVersion[imageVersion.length - 1].split(':')[0];
-            let containerId = docker.getContainer(container.Id);
-            let containerInfo = await containerId.inspect();
-            let ports_list = [];
-            try {
-            for (const [key, value] of Object.entries(containerInfo.HostConfig.PortBindings)) {
-                let ports = {
-                    check: 'checked',
-                    external: value[0].HostPort,
-                    internal: key.split('/')[0],
-                    protocol: key.split('/')[1]
-                }
-                ports_list.push(ports);
-            }
-            } catch {}
-
-            let external_port = ports_list[0]?.external || 0;
-            let internal_port = ports_list[0]?.internal || 0;
-
-            let container_info = {
-                name: container.Names[0].slice(1),
-                service: service,
-                id: container.Id,
-                state: container.State,
-                image: container.Image,
-                external_port: external_port,
-                internal_port: internal_port,
-                ports: ports_list,
-                link: 'localhost',
-            }
-            let card = containerCard(container_info);
-            list += card;
-        }
-    }
-    cardList = list;
-}
-
 
 
 // Docker events
 // Docker events
 docker.getEvents((err, stream) => {
 docker.getEvents((err, stream) => {
     if (err) throw err;
     if (err) throw err;
     stream.on('data', (chunk) => {
     stream.on('data', (chunk) => {
         event = true;
         event = true;
-        eventInfo = 'docker';
+        eventType = 'docker';
     });
     });
 });
 });
 
 
 // Check if the container cards need to be updated
 // Check if the container cards need to be updated
 setInterval(async () => {
 setInterval(async () => {
     if (event == false) { return; }
     if (event == false) { return; }
-    await getHidden();
-    await containerCards();
-    if (cardList != sentList) {
-        cardList = sentList;
-        sse = true;
-    }
+    sse = await sendCheck();
     event = false;
     event = false;
-}, 1000);
+}, 500);
 
 
-// Gets called at load and after server-side events
-router.get('/containers', async (req, res) => {
-    await getHidden();
-    await containerCards();
-    sentList = cardList;
-    res.send(cardList);
-});
 
 
 
 
 router.get('/sse_event', (req, res) => {
 router.get('/sse_event', (req, res) => {
@@ -169,14 +103,11 @@ router.get('/sse_event', (req, res) => {
     let eventCheck = setInterval(async () => {
     let eventCheck = setInterval(async () => {
         if (sse == true) {
         if (sse == true) {
             sse = false;
             sse = false;
-            console.log(`event: ${eventInfo}`);
-            res.write(`event: ${eventInfo}\n`);
+            res.write(`event: ${eventType}\n`);
             res.write(`data: there was an event!\n\n`);
             res.write(`data: there was an event!\n\n`);
         }
         }
-    }, 1000);
+    }, 500);
     req.on('close', () => {
     req.on('close', () => {
         clearInterval(eventCheck);
         clearInterval(eventCheck);
     });
     });
-});
-
-
+});