import { Router } from "express"; import { createRequire } from "module"; import { getPoolStats } from "../services/browser.js"; import { pool } from "../services/db.js"; const require = createRequire(import.meta.url); const { version: APP_VERSION } = require("../../package.json"); export const healthRouter = Router(); healthRouter.get("/", async (_req, res) => { const poolStats = getPoolStats(); let databaseStatus; let overallStatus = "ok"; let httpStatus = 200; // Check database connectivity try { const client = await pool.connect(); try { const result = await client.query('SELECT version()'); const version = result.rows[0]?.version || 'Unknown'; // Extract just the PostgreSQL version number (e.g., "PostgreSQL 15.4") const versionMatch = version.match(/PostgreSQL ([\d.]+)/); const shortVersion = versionMatch ? `PostgreSQL ${versionMatch[1]}` : 'PostgreSQL'; databaseStatus = { status: "ok", version: shortVersion }; } finally { client.release(); } } catch (error) { databaseStatus = { status: "error", message: error.message || "Database connection failed" }; overallStatus = "degraded"; httpStatus = 503; } const response = { status: overallStatus, version: APP_VERSION, database: databaseStatus, pool: { size: poolStats.poolSize, active: poolStats.totalPages - poolStats.availablePages, available: poolStats.availablePages, queueDepth: poolStats.queueDepth, pdfCount: poolStats.pdfCount, restarting: poolStats.restarting, uptimeSeconds: Math.round(poolStats.uptimeMs / 1000), }, }; res.status(httpStatus).json(response); });