From cb674171529f33ed21f4e84998ef444b646f8460 Mon Sep 17 00:00:00 2001 From: M M Date: Tue, 23 Jul 2024 19:13:46 -0700 Subject: [PATCH 1/6] Updated the page speed check controller with the proper services. --- .../controllers/pageSpeedCheckController.js | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/Server/controllers/pageSpeedCheckController.js b/Server/controllers/pageSpeedCheckController.js index c9f5873bc..34affc7ff 100644 --- a/Server/controllers/pageSpeedCheckController.js +++ b/Server/controllers/pageSpeedCheckController.js @@ -1,5 +1,7 @@ const PageSpeedCheck = require("../models/PageSpeedCheck"); +const PageSpeedService = require("../service/pageSpeedService"); const { successMessages } = require("../utils/messages"); +const pageSpeedService = new PageSpeedService(); const SERVICE_NAME = "pagespeed"; const { getPageSpeedCheckParamValidation, @@ -47,18 +49,19 @@ const createPageSpeedCheck = async (req, res, next) => { await createPageSpeedCheckBodyValidation.validateAsync(req.body); const { monitorId } = req.params; - const { accessibility, bestPractices, seo, performance } = req.body; + const { url } = req.body; - const newPageSpeedCheck = new PageSpeedCheck({ + // Run the PageSpeed check + const pageSpeedResults = await pageSpeedService.runPageSpeedCheck(url); + + const newPageSpeedCheck = await pageSpeedService.createPageSpeedCheck({ monitorId, - accessibility, - bestPractices, - seo, - performance, + accessibility: pageSpeedResults.lighthouseResult.categories.accessibility.score * 100, + bestPractices: pageSpeedResults.lighthouseResult.categories.best-practices.score * 100, + seo: pageSpeedResults.lighthouseResult.categories.seo.score * 100, + performance: pageSpeedResults.lighthouseResult.categories.performance.score * 100, }); - await newPageSpeedCheck.save(); - return res.status(201).json({ msg: successMessages.CREATED, data: newPageSpeedCheck, From bed92c4915e8a87ab24b48941dee7959a297f5ee Mon Sep 17 00:00:00 2001 From: M M Date: Wed, 24 Jul 2024 10:49:59 -0700 Subject: [PATCH 2/6] Fix validation schema for the page speed check. --- Server/validation/joi.js | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/Server/validation/joi.js b/Server/validation/joi.js index 6384f13ba..049f8c5e5 100644 --- a/Server/validation/joi.js +++ b/Server/validation/joi.js @@ -221,11 +221,7 @@ const createPageSpeedCheckParamValidation = joi.object({ //Validation schema for the monitorId body const createPageSpeedCheckBodyValidation = joi.object({ - monitorId: joi.string().required(), - accessibility: joi.number().required().min(0).max(100), - bestPractices: joi.number().required().min(0).max(100), - seo: joi.number().required().min(0).max(100), - performance: joi.number().required().min(0).max(100), + url: joi.string().required(), }); const deletePageSpeedCheckParamValidation = joi.object({ From 2f5c51ebed8441a2cd46b6a3a6647cdc35756760 Mon Sep 17 00:00:00 2001 From: M M Date: Wed, 24 Jul 2024 10:53:43 -0700 Subject: [PATCH 3/6] Fix routes for page speed check. --- Server/routes/pageSpeedCheckRoute.js | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/Server/routes/pageSpeedCheckRoute.js b/Server/routes/pageSpeedCheckRoute.js index bb140e575..34ec0e544 100644 --- a/Server/routes/pageSpeedCheckRoute.js +++ b/Server/routes/pageSpeedCheckRoute.js @@ -4,42 +4,43 @@ const Monitor = require("../models/Monitor"); const checkController = require("../controllers/pageSpeedCheckController"); /** - * @route POST /pagespeed/:monitorId + * @route POST /:monitorId * @description Create a new PageSpeedCheck for a monitor * @access Private * @param {string} monitorId - The ID of the monitor * @middleware verifyOwnership - Ensures the user owns the monitor */ router.post( - "/pagespeed/:monitorId", + "/:monitorId", verifyOwnership(Monitor, "monitorId"), checkController.createPageSpeedCheck ); /** - * @route GET /pagespeed/:monitorId + * @route GET /:monitorId * @description Get all PageSpeedChecks for a monitor * @access Private * @param {string} monitorId - The ID of the monitor * @middleware verifyOwnership - Ensures the user owns the monitor */ router.get( - "/pagespeed/:monitorId", + "/:monitorId", verifyOwnership(Monitor, "monitorId"), checkController.getPageSpeedChecks ); /** - * @route DELETE /pagespeed/:monitorId + * @route DELETE /:monitorId * @description Delete all PageSpeedChecks for a monitor * @access Private * @param {string} monitorId - The ID of the monitor * @middleware verifyOwnership - Ensures the user owns the monitor */ router.delete( - "/pagespeed/:monitorId", + "/:monitorId", verifyOwnership(Monitor, "monitorId"), checkController.deletePageSpeedCheck ); module.exports = router; + From 825ab73d821904bf4bf52fd958eb4c35c2a1e126 Mon Sep 17 00:00:00 2001 From: M M Date: Wed, 24 Jul 2024 12:33:41 -0700 Subject: [PATCH 4/6] Fixed the categories param for the page speed API endpoint. --- Server/controllers/pageSpeedCheckController.js | 15 +++++++++++---- Server/service/pageSpeedService.js | 10 +++++++++- 2 files changed, 20 insertions(+), 5 deletions(-) diff --git a/Server/controllers/pageSpeedCheckController.js b/Server/controllers/pageSpeedCheckController.js index 34affc7ff..af3dd92da 100644 --- a/Server/controllers/pageSpeedCheckController.js +++ b/Server/controllers/pageSpeedCheckController.js @@ -54,12 +54,19 @@ const createPageSpeedCheck = async (req, res, next) => { // Run the PageSpeed check const pageSpeedResults = await pageSpeedService.runPageSpeedCheck(url); + // Extract categories scores + const categories = pageSpeedResults.lighthouseResult?.categories; + + if (!categories) { + throw new Error('Categories not found in PageSpeed results'); + } + const newPageSpeedCheck = await pageSpeedService.createPageSpeedCheck({ monitorId, - accessibility: pageSpeedResults.lighthouseResult.categories.accessibility.score * 100, - bestPractices: pageSpeedResults.lighthouseResult.categories.best-practices.score * 100, - seo: pageSpeedResults.lighthouseResult.categories.seo.score * 100, - performance: pageSpeedResults.lighthouseResult.categories.performance.score * 100, + accessibility: (categories.accessibility?.score || 0) * 100, + bestPractices: (categories["best-practices"]?.score || 0) * 100, + seo: (categories.seo?.score || 0) * 100, + performance: (categories.performance?.score || 0) * 100, }); return res.status(201).json({ diff --git a/Server/service/pageSpeedService.js b/Server/service/pageSpeedService.js index 1b7bd25e1..042ee7b6f 100644 --- a/Server/service/pageSpeedService.js +++ b/Server/service/pageSpeedService.js @@ -14,7 +14,15 @@ class PageSpeedService { */ async runPageSpeedCheck(url) { try { - const response = await axios.get(`https://www.googleapis.com/pagespeedonline/v5/runPagespeed?url=${url}`); + const response = await axios.get( + `https://pagespeedonline.googleapis.com/pagespeedonline/v5/runPagespeed`, + { + params: { + url: url, + categories: 'performance,accessibility,best-practices,seo', + } + } + ); return response.data; } catch (error) { logger.error(`Error running PageSpeed check for ${url}`, { From 7823eb54045dc5a9fc00d583de4792c8e36e2427 Mon Sep 17 00:00:00 2001 From: M M Date: Wed, 24 Jul 2024 12:34:42 -0700 Subject: [PATCH 5/6] Use axios params object in the config. --- Server/service/pageSpeedService.js | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/Server/service/pageSpeedService.js b/Server/service/pageSpeedService.js index 042ee7b6f..f4f7952ec 100644 --- a/Server/service/pageSpeedService.js +++ b/Server/service/pageSpeedService.js @@ -14,15 +14,14 @@ class PageSpeedService { */ async runPageSpeedCheck(url) { try { - const response = await axios.get( - `https://pagespeedonline.googleapis.com/pagespeedonline/v5/runPagespeed`, - { - params: { - url: url, - categories: 'performance,accessibility,best-practices,seo', - } - } - ); + const response = await axios({ + method: 'get', + url: 'https://pagespeedonline.googleapis.com/pagespeedonline/v5/runPagespeed', + params: { + url: url, + categories: 'performance,accessibility,best-practices,seo', + }, + }); return response.data; } catch (error) { logger.error(`Error running PageSpeed check for ${url}`, { From 0271109d95e4647dc80043b6d7803fe297281162 Mon Sep 17 00:00:00 2001 From: M M Date: Wed, 24 Jul 2024 15:59:50 -0700 Subject: [PATCH 6/6] Updated Axios GET request. --- Server/service/pageSpeedService.js | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/Server/service/pageSpeedService.js b/Server/service/pageSpeedService.js index f4f7952ec..20eada0d5 100644 --- a/Server/service/pageSpeedService.js +++ b/Server/service/pageSpeedService.js @@ -14,14 +14,10 @@ class PageSpeedService { */ async runPageSpeedCheck(url) { try { - const response = await axios({ - method: 'get', - url: 'https://pagespeedonline.googleapis.com/pagespeedonline/v5/runPagespeed', - params: { - url: url, - categories: 'performance,accessibility,best-practices,seo', - }, - }); + const response = await axios.get( + "https://pagespeedonline.googleapis.com/pagespeedonline/v5/runPagespeed?url=https://www.google.com&category=seo&category=accessibility&category=best-practices&category=performance", + ); + return response.data; } catch (error) { logger.error(`Error running PageSpeed check for ${url}`, {