Improved dashboard controller and router.

removed console.log()s.
This commit is contained in:
lllllllillllllillll 2024-02-18 18:23:20 -08:00
parent c27f64f308
commit 25280ae174
3 changed files with 101 additions and 119 deletions

View file

@ -2,10 +2,11 @@ import { Readable } from 'stream';
import { Permission, Container } from '../database/models.js';
import { modal } from '../components/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 { containerCard } from '../components/containerCard.js';
let [ hidden, cardList, sentList ] = [ '', '', ''];
export const Dashboard = (req, res) => {
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) => {
let name = req.header('hx-trigger-name');
let state = req.header('hx-trigger');
@ -44,8 +34,6 @@ export const Start = (req, res) => {
export const Stop = (req, res) => {
console.log(`Clicked on stop`);
let name = req.header('hx-trigger-name');
let state = req.header('hx-trigger');
@ -58,8 +46,6 @@ export const Stop = (req, res) => {
}
export const Pause = (req, res) => {
console.log(`Clicked on pause`);
let name = req.header('hx-trigger-name');
let state = req.header('hx-trigger');
@ -77,8 +63,6 @@ export const Pause = (req, res) => {
export const Restart = (req, res) => {
console.log(`Clicked on restart`);
let name = req.header('hx-trigger-name');
var containerName = docker.getContainer(name);
containerName.restart();
@ -161,7 +145,6 @@ export const Modal = async (req, res) => {
}
export const Stats = async (req, res) => {
let name = req.header('hx-trigger-name');
let color = req.header('hx-trigger');
@ -188,11 +171,8 @@ export const Stats = async (req, res) => {
}
export const Hide = async (req, res) => {
let name = req.header('hx-trigger-name');
let id = req.header('hx-trigger');
let exists = await Container.findOne({ where: {name: name}});
if (!exists) {
const newContainer = await Container.create({ name: name, visibility: false, });
@ -203,7 +183,6 @@ export const Hide = async (req, res) => {
res.send("ok");
}
export const Reset = async (req, res) => {
Container.update({ visibility: true }, { where: {} });
setEvent(true, 'docker');
@ -257,4 +236,76 @@ export const Installing = (req, res) => {
}
let card = containerCard(install_info);
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);
}

View file

@ -4,7 +4,7 @@ export const router = express.Router();
// Controllers
import { Login, submitLogin, Logout } from "../controllers/login.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 { Users } from "../controllers/users.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("/containers", auth, Containers);
router.post("/start", auth, Start);
router.post("/stop", auth, Stop);
router.post("/pause", auth, Pause);
@ -46,17 +41,14 @@ router.post("/reset", auth, Reset);
router.get("/chart", auth, Chart);
router.get("/installing", auth, Installing);
router.get("/images", auth, Images);
router.post("/removeImage", removeImage);
router.post("/removeImage", auth, removeImage);
router.get("/volumes", auth, Volumes);
router.post("/removeVolume", auth, removeVolume);
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/:page", auth, Apps);
@ -65,13 +57,21 @@ router.post("/apps", auth, appSearch);
router.get("/users", auth, Users);
router.get("/syslogs", auth, Syslogs);
router.get("/account", Account);
router.get("/variables", auth, Variables);
router.get("/settings", auth, Settings);
// User routes
router.get("/portal", Portal);
router.get("/account", Account);
router.get("/supporters", Supporters);
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
import { Install } from "../functions/install.js"

View file

@ -4,12 +4,12 @@ import memorystore from 'memorystore';
import ejs from 'ejs';
import Docker from 'dockerode';
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 { 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 MemoryStore = memorystore(session);
@ -54,14 +54,11 @@ app.listen(port, async () => {
});
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) {
event = value;
eventInfo = type;
eventType = type;
}
// Server metrics
@ -82,86 +79,23 @@ let serverMetrics = async () => {
}
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.getEvents((err, stream) => {
if (err) throw err;
stream.on('data', (chunk) => {
event = true;
eventInfo = 'docker';
eventType = 'docker';
});
});
// Check if the container cards need to be updated
setInterval(async () => {
if (event == false) { return; }
await getHidden();
await containerCards();
if (cardList != sentList) {
cardList = sentList;
sse = true;
}
sse = await sendCheck();
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) => {
@ -169,14 +103,11 @@ router.get('/sse_event', (req, res) => {
let eventCheck = setInterval(async () => {
if (sse == true) {
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`);
}
}, 1000);
}, 500);
req.on('close', () => {
clearInterval(eventCheck);
});
});
});