111 lines
5.5 KiB
JavaScript
111 lines
5.5 KiB
JavaScript
"use strict";
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
exports.servicesRouter = void 0;
|
|
const express_1 = require("express");
|
|
const auth_middleware_1 = require("../../middleware/auth.middleware");
|
|
const rbac_middleware_1 = require("../../middleware/rbac.middleware");
|
|
const env_1 = require("../../config/env");
|
|
const logger_1 = require("../../utils/logger");
|
|
const metrics_1 = require("../../utils/metrics");
|
|
const health_check_1 = require("../../utils/health-check");
|
|
const router = (0, express_1.Router)();
|
|
router.use(auth_middleware_1.authenticate);
|
|
router.use((0, rbac_middleware_1.requireRole)('SUPER_ADMIN'));
|
|
// Removed duplicated isServiceOnline - now using shared utility from utils/health-check.ts
|
|
// GET /api/services/status — check NocoDB, n8n, Gitea availability
|
|
router.get('/status', async (_req, res, next) => {
|
|
try {
|
|
const [nocodbOnline, n8nOnline, giteaOnline, mailhogOnline, miniqrOnline, excalidrawOnline, homepageOnline, vaultwardenOnline, rocketchatOnline, gancioOnline, jitsiOnline] = await Promise.all([
|
|
(0, health_check_1.isServiceOnline)(env_1.env.NOCODB_URL),
|
|
(0, health_check_1.isServiceOnline)(env_1.env.N8N_URL),
|
|
(0, health_check_1.isServiceOnline)(env_1.env.GITEA_URL),
|
|
(0, health_check_1.isServiceOnline)(env_1.env.MAILHOG_URL),
|
|
(0, health_check_1.isServiceOnline)(env_1.env.MINI_QR_URL),
|
|
(0, health_check_1.isServiceOnline)(env_1.env.EXCALIDRAW_URL),
|
|
(0, health_check_1.isServiceOnline)(env_1.env.HOMEPAGE_URL),
|
|
(0, health_check_1.isServiceOnline)(env_1.env.VAULTWARDEN_URL),
|
|
(0, health_check_1.isServiceOnline)(`${env_1.env.ROCKETCHAT_URL}/api/info`),
|
|
(0, health_check_1.isServiceOnline)(env_1.env.GANCIO_URL),
|
|
(0, health_check_1.isServiceOnline)(env_1.env.JITSI_URL),
|
|
]);
|
|
// Update Prometheus gauges
|
|
(0, metrics_1.setServiceUp)('nocodb', nocodbOnline);
|
|
(0, metrics_1.setServiceUp)('n8n', n8nOnline);
|
|
(0, metrics_1.setServiceUp)('gitea', giteaOnline);
|
|
(0, metrics_1.setServiceUp)('mailhog', mailhogOnline);
|
|
(0, metrics_1.setServiceUp)('miniqr', miniqrOnline);
|
|
(0, metrics_1.setServiceUp)('excalidraw', excalidrawOnline);
|
|
(0, metrics_1.setServiceUp)('homepage', homepageOnline);
|
|
(0, metrics_1.setServiceUp)('vaultwarden', vaultwardenOnline);
|
|
(0, metrics_1.setServiceUp)('rocketchat', rocketchatOnline);
|
|
(0, metrics_1.setServiceUp)('gancio', gancioOnline);
|
|
(0, metrics_1.setServiceUp)('jitsi', jitsiOnline);
|
|
res.json({
|
|
nocodb: { online: nocodbOnline, url: env_1.env.NOCODB_URL },
|
|
n8n: { online: n8nOnline, url: env_1.env.N8N_URL },
|
|
gitea: { online: giteaOnline, url: env_1.env.GITEA_URL },
|
|
mailhog: { online: mailhogOnline, url: env_1.env.MAILHOG_URL },
|
|
miniqr: { online: miniqrOnline, url: env_1.env.MINI_QR_URL },
|
|
excalidraw: { online: excalidrawOnline, url: env_1.env.EXCALIDRAW_URL },
|
|
homepage: { online: homepageOnline, url: env_1.env.HOMEPAGE_URL },
|
|
vaultwarden: { online: vaultwardenOnline, url: env_1.env.VAULTWARDEN_URL },
|
|
rocketchat: { online: rocketchatOnline, url: env_1.env.ROCKETCHAT_URL },
|
|
gancio: { online: gancioOnline, url: env_1.env.GANCIO_URL },
|
|
jitsi: { online: jitsiOnline, url: env_1.env.JITSI_URL },
|
|
});
|
|
}
|
|
catch (err) {
|
|
logger_1.logger.error('Failed to check services status', err);
|
|
next(err);
|
|
}
|
|
});
|
|
// GET /api/services/config — return public-facing port numbers + subdomain info for iframe URLs
|
|
router.get('/config', async (_req, res, _next) => {
|
|
res.json({
|
|
nocodbPort: env_1.env.NOCODB_EMBED_PORT,
|
|
n8nPort: env_1.env.N8N_EMBED_PORT,
|
|
giteaPort: env_1.env.GITEA_EMBED_PORT,
|
|
mailhogPort: env_1.env.MAILHOG_EMBED_PORT,
|
|
miniqrPort: env_1.env.MINI_QR_EMBED_PORT,
|
|
excalidrawPort: env_1.env.EXCALIDRAW_EMBED_PORT,
|
|
domain: env_1.env.DOMAIN,
|
|
nocodbSubdomain: 'db',
|
|
n8nSubdomain: 'n8n',
|
|
giteaSubdomain: 'git',
|
|
mailhogSubdomain: 'mail',
|
|
miniqrSubdomain: 'qr',
|
|
excalidrawSubdomain: 'draw',
|
|
// Listmonk (newsletter platform)
|
|
listmonkPort: 9001,
|
|
listmonkSubdomain: 'listmonk',
|
|
// Code Server (web IDE)
|
|
codeServerPort: env_1.env.CODE_SERVER_PORT,
|
|
codeServerSubdomain: 'code',
|
|
// MkDocs (documentation)
|
|
mkdocsPort: env_1.env.MKDOCS_PORT,
|
|
mkdocsSubdomain: 'docs',
|
|
// Grafana (metrics visualization)
|
|
grafanaPort: env_1.env.GRAFANA_EMBED_PORT,
|
|
grafanaSubdomain: 'grafana',
|
|
// Alertmanager (alert routing)
|
|
alertmanagerPort: env_1.env.ALERTMANAGER_EMBED_PORT,
|
|
alertmanagerSubdomain: 'alertmanager',
|
|
// Homepage (service dashboard)
|
|
homepagePort: env_1.env.HOMEPAGE_EMBED_PORT,
|
|
homepageSubdomain: 'home',
|
|
// Vaultwarden (password manager)
|
|
vaultwardenPort: env_1.env.VAULTWARDEN_EMBED_PORT,
|
|
vaultwardenSubdomain: 'vault',
|
|
// Rocket.Chat (team chat)
|
|
rocketchatPort: env_1.env.ROCKETCHAT_EMBED_PORT,
|
|
rocketchatSubdomain: 'chat',
|
|
// Gancio (event management)
|
|
gancioPort: env_1.env.GANCIO_EMBED_PORT,
|
|
gancioSubdomain: 'events',
|
|
// Jitsi Meet (video conferencing)
|
|
jitsiPort: env_1.env.JITSI_EMBED_PORT,
|
|
jitsiSubdomain: 'meet',
|
|
});
|
|
});
|
|
exports.servicesRouter = router;
|
|
//# sourceMappingURL=services.routes.js.map
|