extract methods

This commit is contained in:
Alex Holliday committed 2025-12-19 18:26:24 +00:00
1 parent d8007a9a5f
commit 08d53b80b7
1 file changed
+87 -78
+87 -78
View File
@@ -503,84 +503,7 @@ class MonitorService implements IMonitorService {
return {};
};
// status parameter deprecated and ignored; retained for backward compatibility
getEmbedChecks = async (
teamId: string,
monitorId: string,
range: string
): Promise<MonitorWithChecksResponse> => {
const monitor = await Monitor.findOne({ _id: monitorId, teamId });
if (!monitor) {
throw new ApiError("Monitor not found", 404);
}
const startDate = this.getStartDate(range);
// Route for aggregated stats (24h, 7d, 30d)
if (range === "24h" || range === "7d" || range === "30d") {
const monitorStats = await MonitorStats.findOne({
monitorId: monitor._id,
});
if (!monitorStats) {
throw new ApiError("Monitor stats not found", 404);
}
const useDaily = range === "30d";
const Model = useDaily ? StatsDaily : StatsHourly;
const endDate = new Date();
const docs = await Model.find({
monitorId: monitor._id,
windowStart: { $gte: startDate, $lt: endDate },
})
.sort({ windowStart: -1 })
.lean();
const checks = (docs as any[]).map((d) => {
const base: any = {
_id: new Date(d.windowStart).toISOString(),
count: d.count ?? 0,
avgResponseTime: d.avgResponseTime ?? 0,
upChecks: d.upChecks ?? 0,
downChecks: d.downChecks ?? 0,
avgResponseTimeUp: d.avgResponseTimeUp ?? null,
avgResponseTimeDown: d.avgResponseTimeDown ?? null,
};
if (monitor.type === "pagespeed") {
return {
...base,
accessibility: d.accessibility,
seo: d.seo,
bestPractices: d.bestPractices,
performance: d.performance,
cls: d.cls,
si: d.si,
fcp: d.fcp,
lcp: d.lcp,
tbt: d.tbt,
};
}
if (monitor.type === "infrastructure") {
return {
...base,
cpu: d.cpu,
memory: d.memory,
disk: d.disk,
host: d.host,
net: d.net,
};
}
return base;
});
return {
monitor: monitor.toObject(),
checks,
stats: monitorStats,
};
}
// Route for raw checks (2h)
private getEmbedChecksRecent = async (monitor: IMonitor, startDate: Date) => {
const endDate = new Date();
const matchStage: {
"metadata.monitorId": mongoose.Types.ObjectId;
@@ -682,6 +605,92 @@ class MonitorService implements IMonitorService {
};
};
private getEmbedChecksOtherRanges = async (
monitor: IMonitor,
range: string,
startDate: Date
) => {
const monitorStats = await MonitorStats.findOne({
monitorId: monitor._id,
});
if (!monitorStats) {
throw new ApiError("Monitor stats not found", 404);
}
const useDaily = range === "30d";
const Model = useDaily ? StatsDaily : StatsHourly;
const endDate = new Date();
const docs = await Model.find({
monitorId: monitor._id,
windowStart: { $gte: startDate, $lt: endDate },
})
.sort({ windowStart: -1 })
.lean();
const checks = (docs as any[]).map((d) => {
const base: any = {
_id: new Date(d.windowStart).toISOString(),
count: d.count ?? 0,
avgResponseTime: d.avgResponseTime ?? 0,
upChecks: d.upChecks ?? 0,
downChecks: d.downChecks ?? 0,
avgResponseTimeUp: d.avgResponseTimeUp ?? null,
avgResponseTimeDown: d.avgResponseTimeDown ?? null,
};
if (monitor.type === "pagespeed") {
return {
...base,
accessibility: d.accessibility,
seo: d.seo,
bestPractices: d.bestPractices,
performance: d.performance,
cls: d.cls,
si: d.si,
fcp: d.fcp,
lcp: d.lcp,
tbt: d.tbt,
};
}
if (monitor.type === "infrastructure") {
return {
...base,
cpu: d.cpu,
memory: d.memory,
disk: d.disk,
host: d.host,
net: d.net,
};
}
return base;
});
return {
monitor: monitor.toObject(),
checks,
stats: monitorStats,
};
};
getEmbedChecks = async (
teamId: string,
monitorId: string,
range: string
): Promise<MonitorWithChecksResponse> => {
const monitor = await Monitor.findOne({ _id: monitorId, teamId });
if (!monitor) {
throw new ApiError("Monitor not found", 404);
}
const startDate = this.getStartDate(range);
if (range === "24h" || range === "7d" || range === "30d") {
return await this.getEmbedChecksOtherRanges(monitor, range, startDate);
} else {
return await this.getEmbedChecksRecent(monitor, startDate);
}
};
async togglePause(userId: string, teamId: string, id: string) {
const updatedMonitor = await Monitor.findOneAndUpdate(
{ _id: id, teamId },