From 3f8198f3df0a44227a7e7f553f17ca22458b4d37 Mon Sep 17 00:00:00 2001 From: Alex Holliday Date: Tue, 23 Dec 2025 20:10:18 +0000 Subject: [PATCH] remove unused indexes --- server/src/db/models/checks/Check.ts | 7 --- server/src/services/business/CheckService.ts | 48 ++++++++++++++++++-- 2 files changed, 44 insertions(+), 11 deletions(-) diff --git a/server/src/db/models/checks/Check.ts b/server/src/db/models/checks/Check.ts index 95c7c38b0..585ef7c5c 100644 --- a/server/src/db/models/checks/Check.ts +++ b/server/src/db/models/checks/Check.ts @@ -315,12 +315,5 @@ CheckSchema.index({ "metadata.monitorId": 1, createdAt: -1, }); -CheckSchema.index({ "metadata.teamId": 1, status: 1, createdAt: -1 }); -CheckSchema.index({ - "metadata.teamId": 1, - "metadata.monitorId": 1, - status: 1, - createdAt: -1, -}); export const Check = mongoose.model("Check", CheckSchema); diff --git a/server/src/services/business/CheckService.ts b/server/src/services/business/CheckService.ts index c2a57ec4a..74cc3d960 100644 --- a/server/src/services/business/CheckService.ts +++ b/server/src/services/business/CheckService.ts @@ -251,16 +251,56 @@ class CheckService implements ICheckService { createdAt: { $gte: startDate, $lte: new Date() }, }; } - // Has-more pagination: over-fetch by 1 to infer existence of a next page + const pageSizePlusOne = rowsPerPage + 1; const docs = await Check.find(match) - .populate({ path: "metadata.monitorId", select: "name" }) .sort({ createdAt: -1 }) .skip(page * rowsPerPage) - .limit(pageSizePlusOne); + .limit(pageSizePlusOne) + .select({ + _id: 1, + status: 1, + httpStatusCode: 1, + message: 1, + responseTime: 1, + createdAt: 1, + "metadata.monitorId": 1, + "metadata.teamId": 1, + "metadata.type": 1, + }); const hasMore = docs.length > rowsPerPage; - const checks = hasMore ? docs.slice(0, rowsPerPage) : docs; + const limited = hasMore ? docs.slice(0, rowsPerPage) : docs; + + const monitorIds = Array.from( + new Set( + limited + .map((d) => d?.metadata?.monitorId) + .filter((v): v is mongoose.Types.ObjectId => !!v) + .map((v) => v.toString()) + ) + ); + + let nameById = new Map(); + if (monitorIds.length > 0) { + const monitors = await Monitor.find({ _id: { $in: monitorIds } }).select({ + _id: 1, + name: 1, + }); + nameById = new Map(monitors.map((m) => [m._id.toString(), m.name])); + } + + const checks = limited.map((doc) => { + const asObj = doc.toObject(); + const idStr = asObj?.metadata?.monitorId?.toString?.() ?? ""; + const name = idStr ? nameById.get(idStr) : undefined; + if (name) { + asObj.metadata = asObj.metadata || {}; + (asObj.metadata as any).monitorId = { name } as any; + } + return asObj as ICheck; + }); + return { checks, hasMore }; };