From f724997b0294dc6206ee377057ab3d4497da9c36 Mon Sep 17 00:00:00 2001 From: Alex Holliday Date: Tue, 1 Oct 2024 09:55:14 +0800 Subject: [PATCH] Add JSdocs to SettingsService, add descriptions of services --- Server/index.js | 3 -- Server/service/jobQueue.js | 9 +++++- Server/service/networkService.js | 7 ++++ Server/service/pageSpeedService.js | 52 ------------------------------ Server/service/settingsService.js | 39 +++++++++++++++++----- 5 files changed, 46 insertions(+), 64 deletions(-) delete mode 100644 Server/service/pageSpeedService.js diff --git a/Server/index.js b/Server/index.js index 05eaeb617..b717482cd 100644 --- a/Server/index.js +++ b/Server/index.js @@ -21,7 +21,6 @@ const queueRouter = require("./routes/queueRoute"); const JobQueue = require("./service/jobQueue"); const NetworkService = require("./service/networkService"); const EmailService = require("./service/emailService"); -const PageSpeedService = require("./service/pageSpeedService"); const SettingsService = require("./service/settingsService"); const SERVICE_NAME = "Server"; @@ -73,7 +72,6 @@ const startApp = async () => { req.db = db; req.jobQueue = jobQueue; req.emailService = emailService; - req.pageSpeedService = pageSpeedService; req.settingsService = settingsService; next(); }); @@ -136,7 +134,6 @@ const startApp = async () => { networkService, settingsService ); - const pageSpeedService = new PageSpeedService(); const cleanup = async () => { if (cleaningUp) { diff --git a/Server/service/jobQueue.js b/Server/service/jobQueue.js index 7566debd8..2652a4d53 100644 --- a/Server/service/jobQueue.js +++ b/Server/service/jobQueue.js @@ -5,11 +5,18 @@ const JOBS_PER_WORKER = 5; const logger = require("../utils/logger"); const { errorMessages, successMessages } = require("../utils/messages"); const SERVICE_NAME = "JobQueue"; - +/** + * JobQueue + * + * This service is responsible for managing the job queue. + * It handles enqueuing, dequeuing, and processing jobs. + * It scales the number of workers based on the number of jobs/worker + */ class JobQueue { /** * Constructs a new JobQueue * @constructor + * @param {SettingsService} settingsService - The settings service * @throws {Error} */ constructor(settingsService) { diff --git a/Server/service/networkService.js b/Server/service/networkService.js index b4d90c6e1..f09c7ac70 100644 --- a/Server/service/networkService.js +++ b/Server/service/networkService.js @@ -4,6 +4,13 @@ const logger = require("../utils/logger"); const http = require("http"); const { errorMessages, successMessages } = require("../utils/messages"); +/** + * NetworkService + * + * This service handles all network requests on the back end + * This includes pings, http requests, and pagespeed checks + */ + class NetworkService { constructor(db, emailService) { this.db = db; diff --git a/Server/service/pageSpeedService.js b/Server/service/pageSpeedService.js deleted file mode 100644 index b482e7860..000000000 --- a/Server/service/pageSpeedService.js +++ /dev/null @@ -1,52 +0,0 @@ -const PageSpeedCheck = require("../models/PageSpeedCheck"); -const axios = require("axios"); -const logger = require("../utils/logger"); - -class PageSpeedService { - constructor() { - this.SERVICE_NAME = "PageSpeedService"; - } - - /** - * Runs a PageSpeed check using Google Lighthouse API. - * @param {string} url - The URL to check. - * @returns {Promise} The results from the PageSpeed API. - */ - async runPageSpeedCheck(url) { - try { - 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}`, { - service: this.SERVICE_NAME, - error: error.message, - }); - error.service === undefined ? (error.service = SERVICE_NAME) : null; - error.method === undefined ? (error.method = "runPageSpeedCheck") : null; - throw error; - } - } - - /** - * Creates a new PageSpeedCheck document. - * @param {Object} data - The data for the new PageSpeedCheck. - * @returns {Promise} The created PageSpeedCheck document. - */ - async createPageSpeedCheck(data) { - try { - const newPageSpeedCheck = new PageSpeedCheck(data); - return await newPageSpeedCheck.save(); - } catch (error) { - error.service === undefined ? (error.service = SERVICE_NAME) : null; - error.method === undefined - ? (error.method = "createPageSpeedCheck") - : null; - throw error; - } - } -} - -module.exports = PageSpeedService; diff --git a/Server/service/settingsService.js b/Server/service/settingsService.js index 752f86607..b4769d043 100644 --- a/Server/service/settingsService.js +++ b/Server/service/settingsService.js @@ -1,6 +1,7 @@ -const { env } = require("process"); const AppSettings = require("../models/AppSettings"); const SERVICE_NAME = "SettingsService"; + +// Load settings from environment variables const envConfig = { logLevel: undefined, apiBaseUrl: undefined, @@ -17,19 +18,34 @@ const envConfig = { systemEmailAddress: process.env.SYSTEM_EMAIL_ADDRESS, systemEmailPassword: process.env.SYSTEM_EMAIL_PASSWORD, }; - +/** + * SettingsService + * + * This service is responsible for loading and managing the application settings. + * It gives priority to environment variables and will only load settings + * from the database if they are not set in the environment. + */ class SettingsService { - constructor() { + /** + * Constructs a new SettingsService + * @constructor + * @throws {Error} + */ constructor() { this.settings = { ...envConfig }; } - - async loadSettings() { + /** + * Load settings from the database and merge with environment settings. + * If there are any settings that weren't set by environment variables, use user settings from the database. + * @returns {Promise} The merged settings. + * @throws Will throw an error if settings are not found in the database or if settings have not been loaded. + */ async loadSettings() { try { const dbSettings = await AppSettings.findOne(); if (!this.settings) { throw new Error("Settings not found"); } - // Try to load settings from env first, if not found, load from db + + // If there are any settings that weren't set by environment variables, use user settings from DB for (const key in envConfig) { if (envConfig[key] === undefined && dbSettings[key] !== undefined) { this.settings[key] = dbSettings[key]; @@ -46,11 +62,18 @@ class SettingsService { throw error; } } - + /** + * Reload settings by calling loadSettings. + * @returns {Promise} The reloaded settings. + */ async reloadSettings() { return this.loadSettings(); } - + /** + * Get the current settings. + * @returns {Object} The current settings. + * @throws Will throw an error if settings have not been loaded. + */ getSettings() { if (!this.settings) { throw new Error("Settings have not been loaded");