From 907dcf4072a8725148f148ba02516ecea991261d Mon Sep 17 00:00:00 2001 From: Alex Holliday Date: Fri, 2 Aug 2024 12:32:08 -0700 Subject: [PATCH] Add required stats to PagespeedCheck model --- Server/models/PageSpeedCheck.js | 38 ++++++++++++++++++++++++++++++++ Server/service/networkService.js | 24 ++++++++++++++++++++ 2 files changed, 62 insertions(+) diff --git a/Server/models/PageSpeedCheck.js b/Server/models/PageSpeedCheck.js index 8ff630197..3ae0bada9 100644 --- a/Server/models/PageSpeedCheck.js +++ b/Server/models/PageSpeedCheck.js @@ -1,5 +1,39 @@ const mongoose = require("mongoose"); +const AuditSchema = mongoose.Schema({ + id: { type: String, required: true }, + title: { type: String, required: true }, + description: { type: String, required: true }, + score: { type: Number, required: true }, + scoreDisplayMode: { type: String, required: true }, + displayValue: { type: String, required: true }, + numericValue: { type: Number, required: true }, + numericUnit: { type: String, required: true }, +}); + +const AuditsSchema = mongoose.Schema({ + cls: { + type: AuditSchema, + required: true, + }, + si: { + type: AuditSchema, + required: true, + }, + fcp: { + type: AuditSchema, + required: true, + }, + lcp: { + type: AuditSchema, + required: true, + }, + tbt: { + type: AuditSchema, + required: true, + }, +}); + /** * Mongoose schema for storing metrics from Google Lighthouse. * @typedef {Object} PageSpeedCheck @@ -37,6 +71,10 @@ const PageSpeedCheck = mongoose.Schema( type: Number, required: true, }, + audits: { + type: AuditsSchema, + required: true, + }, }, { timestamps: true, diff --git a/Server/service/networkService.js b/Server/service/networkService.js index 0ee65c424..dc8994945 100644 --- a/Server/service/networkService.js +++ b/Server/service/networkService.js @@ -129,6 +129,22 @@ class NetworkService { ); const pageSpeedResults = response.data; const categories = pageSpeedResults.lighthouseResult?.categories; + const audits = pageSpeedResults.lighthouseResult?.audits; + const { + "cumulative-layout-shift": cls, + "speed-index": si, + "first-contentful-paint": fcp, + "largest-contentful-paint": lcp, + "total-blocking-time": tbt, + } = audits; + + // Weights + // First Contentful Paint 10% + // Speed Index 10% + // Largest Contentful Paint 25% + // Total Blocking Time 30% + // Cumulative Layout Shift 25% + const checkData = { monitorId: job.data._id, status: true, @@ -136,7 +152,15 @@ class NetworkService { bestPractices: (categories["best-practices"]?.score || 0) * 100, seo: (categories.seo?.score || 0) * 100, performance: (categories.performance?.score || 0) * 100, + audits: { + cls, + si, + fcp, + lcp, + tbt, + }, }; + this.logAndStoreCheck(checkData, this.db.createPageSpeedCheck); } catch (error) { const checkData = {