D3V-Server/backend/routes/reports.js

77 lines
2.1 KiB
JavaScript
Raw Permalink Normal View History

import si from "systeminformation";
2026-03-07 13:49:44 +00:00
import express from "express";
import internalReport from "../internal/report.js";
import jwtdecode from "../lib/express/jwt-decode.js";
import { debug, express as logger } from "../logger.js";
const router = express.Router({
caseSensitive: true,
strict: true,
mergeParams: true,
});
router
.route("/hosts")
.options((_, res) => {
res.sendStatus(204);
})
.all(jwtdecode())
/**
* GET /reports/hosts
*/
.get(async (req, res, next) => {
try {
const data = await internalReport.getHostsReport(res.locals.access);
res.status(200).send(data);
} catch (err) {
debug(logger, `${req.method.toUpperCase()} ${req.path}: ${err}`);
next(err);
}
});
/**
* GET /reports/system
*/
router
.route("/system")
.options((_, res) => {
res.sendStatus(204);
})
.all(jwtdecode())
.get(async (req, res, next) => {
try {
const [cpuTotal, memData, networkStats, fsData] = await Promise.all([
si.currentLoad(),
si.mem(),
si.networkStats("*"),
si.fsSize()
]);
// Grab eth0 or the first active interface
const activeNet = networkStats.find(n => n.operstate === 'up' && n.iface !== 'lo') || networkStats[0] || {};
// Summarize all detected physical drives to find total storage and used storage
const totalStorage = fsData.reduce((acc, disk) => acc + (disk.size || 0), 0);
const usedStorage = fsData.reduce((acc, disk) => acc + (disk.used || 0), 0);
const storagePercent = totalStorage > 0 ? Math.round((usedStorage / totalStorage) * 100) : 0;
res.status(200).json({
cpu: Math.round(cpuTotal.currentLoad),
memory: Math.round((memData.active / memData.total) * 100),
memoryTotal: memData.total,
memoryActive: memData.active,
storage: storagePercent,
storageTotal: totalStorage,
storageUsed: usedStorage,
networkRx: (activeNet.rx_sec / 1024 / 1024 * 8).toFixed(2), // Mbps
networkTx: (activeNet.tx_sec / 1024 / 1024 * 8).toFixed(2), // Mbps
});
} catch (err) {
debug(logger, `${req.method.toUpperCase()} ${req.path}: ${err}`);
next(err);
}
});
2026-03-07 13:49:44 +00:00
export default router;