From 758b22e6b10297e1379c7b6b44ff368dd7dff6e4 Mon Sep 17 00:00:00 2001 From: perf3ct Date: Mon, 26 May 2025 20:26:03 +0000 Subject: [PATCH] feat(server): remove the use of "any" for metrics endpoint --- apps/server/src/etapi/metrics.ts | 11 ++++++----- apps/server/src/routes/api/metrics.ts | 5 ++++- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/apps/server/src/etapi/metrics.ts b/apps/server/src/etapi/metrics.ts index 54c301838..2fc9e6e5f 100644 --- a/apps/server/src/etapi/metrics.ts +++ b/apps/server/src/etapi/metrics.ts @@ -1,4 +1,4 @@ -import type { Router } from "express"; +import type { Router, Request, Response, NextFunction } from "express"; import eu from "./etapi_utils.js"; import sql from "../services/sql.js"; import appInfo from "../services/app_info.js"; @@ -238,8 +238,8 @@ function collectMetrics(): MetricsData { }; } -function register(router: Router) { - eu.route(router, "get", "/etapi/metrics", (req, res, next) => { +function register(router: Router): void { + eu.route(router, "get", "/etapi/metrics", (req: Request, res: Response, next: NextFunction) => { try { const metrics = collectMetrics(); const format = (req.query.format as string)?.toLowerCase() || 'prometheus'; @@ -254,8 +254,9 @@ function register(router: Router) { } else { throw new eu.EtapiError(400, "INVALID_FORMAT", "Supported formats: 'prometheus' (default), 'json'"); } - } catch (error: any) { - throw new eu.EtapiError(500, "METRICS_ERROR", `Failed to collect metrics: ${error.message}`); + } catch (error: unknown) { + const errorMessage = error instanceof Error ? error.message : 'Unknown error'; + throw new eu.EtapiError(500, "METRICS_ERROR", `Failed to collect metrics: ${errorMessage}`); } }); } diff --git a/apps/server/src/routes/api/metrics.ts b/apps/server/src/routes/api/metrics.ts index b60b1ddb6..e2428374b 100644 --- a/apps/server/src/routes/api/metrics.ts +++ b/apps/server/src/routes/api/metrics.ts @@ -1,5 +1,8 @@ +import type { Request, Response } from "express"; import etapiMetrics from "../../etapi/metrics.js"; +type MetricsData = ReturnType; + /** * @swagger * /api/metrics: @@ -148,7 +151,7 @@ import etapiMetrics from "../../etapi/metrics.js"; * security: * - session: [] */ -function getMetrics(req: any, res: any): any { +function getMetrics(req: Request, res: Response): string | MetricsData { const format = (req.query?.format as string)?.toLowerCase() || 'prometheus'; if (format === 'json') {