aggregate pagespeed
This commit is contained in:
1 parent
882e91f6a7
commit
910c675a49
4 files changed
+54
-10
No files matched your search
@@ -378,7 +378,7 @@ class MongoChecksRepository implements IChecksRepository {
|
||||
return this.findHardwareDateRangeChecks(monitorObjectId, startDate, endDate, dateString);
|
||||
}
|
||||
if (options?.type === "pagespeed") {
|
||||
return this.findPageSpeedDateRangeChecks(monitorObjectId, startDate, endDate);
|
||||
return this.findPageSpeedDateRangeChecks(monitorObjectId, startDate, endDate, dateString);
|
||||
}
|
||||
return this.findUptimeDateRangeChecks(options?.type ?? "http", monitorObjectId, startDate, endDate, dateString);
|
||||
};
|
||||
@@ -572,16 +572,50 @@ class MongoChecksRepository implements IChecksRepository {
|
||||
};
|
||||
};
|
||||
|
||||
private findPageSpeedDateRangeChecks = async (monitorObjectId: mongoose.Types.ObjectId, startDate: Date, endDate: Date) => {
|
||||
private findPageSpeedDateRangeChecks = async (monitorObjectId: mongoose.Types.ObjectId, startDate: Date, endDate: Date, dateString: string) => {
|
||||
const matchStage = {
|
||||
"metadata.monitorId": monitorObjectId,
|
||||
createdAt: { $gte: startDate, $lte: endDate },
|
||||
};
|
||||
|
||||
const checks = await CheckModel.find(matchStage).sort({ createdAt: -1 }).limit(25).lean();
|
||||
const [result] = await CheckModel.aggregate([
|
||||
{ $match: matchStage },
|
||||
{ $sort: { createdAt: 1 } },
|
||||
{
|
||||
$facet: {
|
||||
groupedChecks: [
|
||||
{
|
||||
$group: {
|
||||
_id: {
|
||||
$dateToString: { format: dateString, date: "$createdAt" },
|
||||
},
|
||||
avgPerformance: { $avg: "$performance" },
|
||||
avgAccessibility: { $avg: "$accessibility" },
|
||||
avgBestPractices: { $avg: "$bestPractices" },
|
||||
avgSeo: { $avg: "$seo" },
|
||||
totalChecks: { $sum: 1 },
|
||||
},
|
||||
},
|
||||
{ $sort: { _id: 1 } },
|
||||
{
|
||||
$project: {
|
||||
bucketDate: "$_id",
|
||||
performance: "$avgPerformance",
|
||||
accessibility: "$avgAccessibility",
|
||||
bestPractices: "$avgBestPractices",
|
||||
seo: "$avgSeo",
|
||||
totalChecks: 1,
|
||||
_id: 0,
|
||||
},
|
||||
},
|
||||
],
|
||||
},
|
||||
},
|
||||
]);
|
||||
|
||||
return {
|
||||
monitorType: "pagespeed" as const,
|
||||
checks: this.mapDocuments(checks),
|
||||
groupedChecks: result?.groupedChecks ?? [],
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
@@ -308,9 +308,9 @@ export class MonitorService implements IMonitorService {
|
||||
const monitorStats = await this.monitorStatsRepository.findByMonitorId(monitor.id);
|
||||
|
||||
return {
|
||||
monitor: {
|
||||
...monitor,
|
||||
checks: checksData.checks,
|
||||
monitorData: {
|
||||
monitor,
|
||||
groupedChecks: checksData.groupedChecks,
|
||||
},
|
||||
monitorStats,
|
||||
};
|
||||
|
||||
@@ -124,7 +124,7 @@ export interface ChecksQueryResult {
|
||||
|
||||
export interface PageSpeedChecksResult {
|
||||
monitorType: "pagespeed";
|
||||
checks: Check[];
|
||||
groupedChecks: PageSpeedGroupedCheck[];
|
||||
}
|
||||
|
||||
export interface HardwareChecksResult {
|
||||
@@ -170,6 +170,15 @@ export interface GroupedCheck {
|
||||
totalChecks: number;
|
||||
}
|
||||
|
||||
export interface PageSpeedGroupedCheck {
|
||||
bucketDate: string;
|
||||
performance: number;
|
||||
accessibility: number;
|
||||
bestPractices: number;
|
||||
seo: number;
|
||||
totalChecks: number;
|
||||
}
|
||||
|
||||
export interface UptimeChecksResult {
|
||||
monitorType: Exclude<MonitorType, "hardware" | "pagespeed">;
|
||||
groupedChecks: GroupedCheck[];
|
||||
|
||||
@@ -125,8 +125,9 @@ export interface HardwareDetailsResult {
|
||||
}
|
||||
|
||||
export interface PageSpeedDetailsResult {
|
||||
monitor: Monitor & {
|
||||
checks: import("./check.js").Check[];
|
||||
monitorData: {
|
||||
monitor: Monitor;
|
||||
groupedChecks: import("./check.js").PageSpeedGroupedCheck[];
|
||||
};
|
||||
monitorStats: import("./monitorStats.js").MonitorStats | null;
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user