From 00150ba6f47b765fbd055bd053958e5132c90fbf Mon Sep 17 00:00:00 2001 From: Alex Holliday Date: Tue, 3 Mar 2026 23:19:54 +0000 Subject: [PATCH] checkService, bufferService --- server/src/service/business/checkService.ts | 15 ++++++- .../service/infrastructure/bufferService.ts | 41 ++++++++++--------- 2 files changed, 34 insertions(+), 22 deletions(-) diff --git a/server/src/service/business/checkService.ts b/server/src/service/business/checkService.ts index caf398740..2d2bf0e01 100644 --- a/server/src/service/business/checkService.ts +++ b/server/src/service/business/checkService.ts @@ -1,6 +1,6 @@ import { Types } from "mongoose"; import { IChecksRepository, IMonitorsRepository } from "@/repositories/index.js"; -import type { MonitorStatusResponse, CheckErrorInfo, Check, ILighthouseAudit } from "@/types/index.js"; +import type { MonitorStatusResponse, CheckErrorInfo, Check, ILighthouseAudit, ChecksQueryResult, ChecksSummary } from "@/types/index.js"; import type { HardwareStatusPayload, PageSpeedStatusPayload } from "@/types/network.js"; import { AppError } from "@/utils/AppError.js"; import { ParseBoolean } from "@/utils/utils.js"; @@ -8,7 +8,18 @@ import { ILogger } from "@/utils/logger.js"; const SERVICE_NAME = "checkService"; -class CheckService { +export interface ICheckService { + createChecks(checks: Check[]): Promise; + buildCheck(statusResponse: MonitorStatusResponse): Partial | undefined; + getChecksByMonitor(params: { monitorId: string; query: Record; teamId: string }): Promise; + getChecksByTeam(params: { teamId: string; query: Record }): Promise; + getChecksSummaryByTeamId(params: { teamId: string; dateRange: string }): Promise; + deleteChecks(params: { monitorId: string; teamId: string }): Promise; + deleteChecksByTeamId(params: { teamId: string }): Promise; + updateChecksTTL(params: { teamId: string; ttl: string }): Promise; +} + +class CheckService implements ICheckService { static SERVICE_NAME = SERVICE_NAME; private monitorsRepository: IMonitorsRepository; diff --git a/server/src/service/infrastructure/bufferService.ts b/server/src/service/infrastructure/bufferService.ts index c832c364b..318fd35cd 100755 --- a/server/src/service/infrastructure/bufferService.ts +++ b/server/src/service/infrastructure/bufferService.ts @@ -3,6 +3,7 @@ import type { GeoCheck } from "@/types/index.js"; import type { IGeoChecksService } from "../business/geoChecksService.js"; import type { ILogger } from "@/utils/logger.js"; import type { ISettingsService } from "@/service/system/settingsService.js"; +import { ICheckService } from "../business/checkService.js"; const SERVICE_NAME = "BufferService"; export interface IBufferService { @@ -22,10 +23,10 @@ class BufferService implements IBufferService { private buffer: Check[]; private geoBuffer: GeoCheck[]; private bufferTimer: NodeJS.Timeout | null = null; - private checksService: any; + private checksService: ICheckService; private geoChecksService: IGeoChecksService; - constructor(logger: ILogger, checkService: any, geoChecksService: IGeoChecksService, settingsService: ISettingsService) { + constructor(logger: ILogger, checkService: ICheckService, geoChecksService: IGeoChecksService, settingsService: ISettingsService) { this.BUFFER_TIMEOUT = settingsService.getSettings().nodeEnv === "development" ? 10 : 1000 * 60 * 1; // 1 minute this.logger = logger; this.checksService = checkService; @@ -48,12 +49,12 @@ class BufferService implements IBufferService { addToBuffer(check: Check) { try { this.buffer.push(check); - } catch (error: any) { + } catch (error: unknown) { this.logger.error({ - message: error.message, + message: error instanceof Error ? error.message : "Unknown error", service: this.SERVICE_NAME, method: "addToBuffer", - stack: error.stack, + stack: error instanceof Error ? error.stack : undefined, }); } } @@ -61,12 +62,12 @@ class BufferService implements IBufferService { addGeoCheckToBuffer(geoCheck: GeoCheck) { try { this.geoBuffer.push(geoCheck); - } catch (error: any) { + } catch (error: unknown) { this.logger.error({ - message: error.message, + message: error instanceof Error ? error.message : "Unknown error", service: this.SERVICE_NAME, method: "addGeoCheckToBuffer", - stack: error.stack, + stack: error instanceof Error ? error.stack : undefined, }); } } @@ -98,12 +99,12 @@ class BufferService implements IBufferService { } return false; - } catch (error: any) { + } catch (error: unknown) { this.logger.error({ - message: error.message, + message: error instanceof Error ? error.message : "Unknown error", service: this.SERVICE_NAME, method: "removeCheckFromBuffer", - stack: error.stack, + stack: error instanceof Error ? error.stack : undefined, }); return false; } @@ -117,12 +118,12 @@ class BufferService implements IBufferService { try { await this.flushBuffer(); await this.flushGeoBuffer(); - } catch (error: any) { + } catch (error: unknown) { this.logger.error({ - message: `Error in flush cycle: ${error.message}`, + message: error instanceof Error ? error.message : "Unknown error", service: this.SERVICE_NAME, method: "scheduleNextFlush", - stack: error.stack, + stack: error instanceof Error ? error.stack : undefined, }); } finally { // Schedule the next flush only after the current one completes @@ -141,12 +142,12 @@ class BufferService implements IBufferService { await this.checksService.createChecks(this.buffer); this.buffer = []; } - } catch (error: any) { + } catch (error: unknown) { this.logger.error({ - message: `Error flushing checks buffer: ${error.message}`, + message: error instanceof Error ? error.message : "Unknown error", service: this.SERVICE_NAME, method: "flushBuffer", - stack: error.stack, + stack: error instanceof Error ? error.stack : undefined, }); // Clear buffer even on error to prevent infinite retry loops this.buffer = []; @@ -164,12 +165,12 @@ class BufferService implements IBufferService { await this.geoChecksService.createGeoChecks(this.geoBuffer); this.geoBuffer = []; } - } catch (error: any) { + } catch (error: unknown) { this.logger.error({ - message: `Error flushing geo checks buffer: ${error.message}`, + message: error instanceof Error ? error.message : "Unknown error", service: this.SERVICE_NAME, method: "flushGeoBuffer", - stack: error.stack, + stack: error instanceof Error ? error.stack : undefined, }); // Clear buffer even on error to prevent infinite retry loops this.geoBuffer = [];