diff --git a/server/src/db/migration/0008_backfillMonitorLastEvaluatedAt.ts b/server/src/db/migration/0008_backfillMonitorLastEvaluatedAt.ts new file mode 100644 index 000000000..8f8de7308 --- /dev/null +++ b/server/src/db/migration/0008_backfillMonitorLastEvaluatedAt.ts @@ -0,0 +1,24 @@ +import { MonitorModel } from "../../domain/monitors/monitor.model.js"; +import { logger } from "@/utils/logger.js"; + +/** + * Backfill lastEvaluatedAt on monitors created before the lastEvaluatedAt existed. + */ +export async function backfillMonitorLastEvaluatedAt(): Promise { + const SERVICE_NAME = "Migration:BackfillMonitorLastEvaluatedAt"; + + try { + logger.info({ service: SERVICE_NAME, message: "Starting lastEvaluatedAt backfill" }); + + const result = await MonitorModel.updateMany({ lastEvaluatedAt: { $exists: false } }, { $set: { lastEvaluatedAt: 0 } }); + + logger.info({ + service: SERVICE_NAME, + message: `Backfilled lastEvaluatedAt on ${result.modifiedCount} monitors`, + }); + } catch (error) { + const errorMessage = error instanceof Error ? error.message : String(error); + logger.error({ service: SERVICE_NAME, message: `Error backfilling lastEvaluatedAt: ${errorMessage}` }); + throw error; + } +} diff --git a/server/src/db/migration/index.ts b/server/src/db/migration/index.ts index ac78cc813..d68a2468e 100644 --- a/server/src/db/migration/index.ts +++ b/server/src/db/migration/index.ts @@ -6,6 +6,7 @@ import MigrationModel from "../../domain/migrations/migration.model.js"; import { migrateStatusPageTypeToArray } from "./0005_migrateStatusPageTypeToArray.js"; import { cleanupDuplicateMonitorStatsForUniqueIndex } from "./0006_cleanupDuplicateMonitorStatsForUniqueIndex.js"; import { migrateMaintenanceWindowMonitorIdToArray } from "./0007_migrateMaintenanceWindowMonitorIdToArray.js"; +import { backfillMonitorLastEvaluatedAt } from "./0008_backfillMonitorLastEvaluatedAt.js"; import type { ILogger } from "@/utils/logger.js"; type MigrationEntry = { @@ -21,6 +22,7 @@ const migrations: MigrationEntry[] = [ { name: "0005_migrateStatusPageTypeToArray", execute: migrateStatusPageTypeToArray }, { name: "0006_cleanupDuplicateMonitorStatsForUniqueIndex", execute: cleanupDuplicateMonitorStatsForUniqueIndex }, { name: "0007_migrateMaintenanceWindowMonitorIdToArray", execute: migrateMaintenanceWindowMonitorIdToArray }, + { name: "0008_backfillMonitorLastEvaluatedAt", execute: backfillMonitorLastEvaluatedAt }, ]; const runMigrations = async (logger?: ILogger) => {