Improved dashboard controller and router.
removed console.log()s.
This commit is contained in:
parent
c27f64f308
commit
25280ae174
3 changed files with 101 additions and 119 deletions
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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"
|
||||
|
|
93
server.js
93
server.js
|
@ -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);
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
});
|
Loading…
Add table
Reference in a new issue