Files
lst/app/src/internal/system/routes/stats.ts

67 lines
1.9 KiB
TypeScript

import { format } from "date-fns-tz";
import { eq } from "drizzle-orm";
import { Router } from "express";
import { db } from "../../../pkg/db/db.js";
import {
type ServerStats,
serverStats,
} from "../../../pkg/db/schema/serverstats.js";
import { tryCatch } from "../../../pkg/utils/tryCatch.js";
import { checkBuildUpdate } from "../utlis/checkForBuild.js";
const router = Router();
/**
* @openapi
* /health:
* get:
* summary: Health check for the API server
* description: Returns basic system stats including memory usage, uptime, and build info.
* responses:
* 200:
* description: OK
* content:
* application/json:
* schema:
* type: object
* properties:
* status:
* type: string
* example: ok
* uptime:
* type: number
* build:
* type: string
* memoryUsage:
* type: string
*/
router.get("/", async (req, res) => {
const { data, error } = await tryCatch(
db.select().from(serverStats).where(eq(serverStats.id, "serverStats")),
);
if (error || !data) {
res.status(400).json({ error: error });
}
const statData = data as ServerStats[];
const used = process.memoryUsage();
res.json({
status: "ok",
uptime: process.uptime(),
build: statData[0]?.build,
pendingUpdateFile: await checkBuildUpdate(["."]),
lastUpdate: statData[0]?.lastUpdate
? format(statData[0].lastUpdate, "MM/dd/yyyy HH:mm")
: "",
memoryUsage: `Heap: ${(used.heapUsed / 1024 / 1024).toFixed(2)} MB / RSS: ${(
used.rss / 1024 / 1024
).toFixed(2)} MB`,
eomFGPkgSheetVersion: 1, // this is the excel file version when we have a change to the macro we want to grab this
masterMacroFile: 1, // this is the excel file version when we have a change to the macro we want to grab this
});
});
export default router;