remove orphaned checks

This commit is contained in:
Alex Holliday committed 2026-02-17 19:20:08 +00:00
1 parent 6bc9194e8f
commit 0032765bd1
5 files changed
+28 -2

No files matched your search

+1
View File
@@ -204,6 +204,7 @@ export const initializeServices = async ({
monitorsRepository,
teamsRepository,
monitorStatsRepository,
checksRepository,
});
const superSimpleQueue = await SuperSimpleQueue.create({
@@ -39,4 +39,5 @@ export interface IChecksRepository {
//delete
deleteByMonitorId(monitorId: string): Promise<number>;
deleteByTeamId(teamId: string): Promise<number>;
deleteByMonitorIdsNotIn(monitorIds: string[]): Promise<number>;
}
@@ -417,6 +417,12 @@ class MongoChecksRepository implements IChecksRepository {
return deleteResult.deletedCount;
};
deleteByMonitorIdsNotIn = async (monitorIds: string[]): Promise<number> => {
const objectIds = monitorIds.map((id) => new mongoose.Types.ObjectId(id));
const result = await CheckModel.deleteMany({ "metadata.monitorId": { $nin: objectIds } });
return result.deletedCount ?? 0;
};
private findUptimeDateRangeChecks = async (
monitorType: Exclude<MonitorType, "hardware" | "pagespeed">,
monitorObjectId: mongoose.Types.ObjectId,
@@ -24,6 +24,5 @@ export interface IIncidentsRepository {
updateById(incidentId: string, teamId: string, updateData: Partial<Incident>): Promise<Incident>;
// delete
deleteByMonitorId(monitorId: string, teamId: string): Promise<number>;
deleteByMonitorIdsNotIn(monitorIds: string[]): Promise<number>;
// other
}
@@ -4,7 +4,13 @@ import { AppError } from "@/utils/AppError.js";
import { INetworkService, INotificationsService, IStatusService } from "@/service/index.js";
import type { StatusChangeResult, MonitorStatusResponse, HardwareStatusPayload, MonitorStatus } from "@/types/index.js";
import IncidentService from "@/service/business/incidentService.js";
import { IMaintenanceWindowsRepository, IMonitorsRepository, ITeamsRepository, IMonitorStatsRepository } from "@/repositories/index.js";
import {
IMaintenanceWindowsRepository,
IMonitorsRepository,
ITeamsRepository,
IMonitorStatsRepository,
IChecksRepository,
} from "@/repositories/index.js";
export interface MonitorActionDecision {
shouldCreateIncident: boolean;
@@ -34,6 +40,7 @@ class SuperSimpleQueueHelper {
private monitorsRepository: IMonitorsRepository;
private teamsRepository: ITeamsRepository;
private monitorStatsRepository: IMonitorStatsRepository;
private checksRepository: IChecksRepository;
constructor({
logger,
@@ -47,6 +54,7 @@ class SuperSimpleQueueHelper {
monitorsRepository,
teamsRepository,
monitorStatsRepository,
checksRepository,
}: {
logger: any;
networkService: INetworkService;
@@ -59,6 +67,7 @@ class SuperSimpleQueueHelper {
monitorsRepository: IMonitorsRepository;
teamsRepository: ITeamsRepository;
monitorStatsRepository: IMonitorStatsRepository;
checksRepository: IChecksRepository;
}) {
this.logger = logger;
this.networkService = networkService;
@@ -71,6 +80,7 @@ class SuperSimpleQueueHelper {
this.monitorsRepository = monitorsRepository;
this.teamsRepository = teamsRepository;
this.monitorStatsRepository = monitorStatsRepository;
this.checksRepository = checksRepository;
}
get serviceName() {
@@ -206,6 +216,15 @@ class SuperSimpleQueueHelper {
}
// Remove orphaned checks
const deletedChecksCount = await this.checksRepository.deleteByMonitorIdsNotIn(allMonitorIds);
if (deletedChecksCount > 0) {
this.logger.info({
message: `Deleted ${deletedChecksCount} orphaned checks`,
service: SERVICE_NAME,
method: "getCleanupOrphanedJob",
});
}
// Remove orphaned incidents
this.logger.info({