From 4d473493e5195b0b2c39af54f5a267ee826aabcb Mon Sep 17 00:00:00 2001 From: Brian Ridsdalea Date: Thu, 27 Jan 2022 23:22:55 -0500 Subject: [PATCH 1/7] Updated vue config for development server proxy port to match default node port --- client/socket.config.js | 3 --- client/vue.config.js | 2 +- 2 files changed, 1 insertion(+), 4 deletions(-) delete mode 100644 client/socket.config.js diff --git a/client/socket.config.js b/client/socket.config.js deleted file mode 100644 index 8f840f7..0000000 --- a/client/socket.config.js +++ /dev/null @@ -1,3 +0,0 @@ -module.exports = { - socketUrl: "http://localhost:8080", -}; diff --git a/client/vue.config.js b/client/vue.config.js index b3db57a..15c5f21 100644 --- a/client/vue.config.js +++ b/client/vue.config.js @@ -17,7 +17,7 @@ module.exports = { disableHostCheck: false, proxy: { "/*": { - target: "http://localhost:8080", + target: "http://localhost:3000", }, }, stats: { From 5bdb2c06bfc3b2a370b92575e312105c148b7675 Mon Sep 17 00:00:00 2001 From: Brian Ridsdalea Date: Fri, 28 Jan 2022 00:46:02 -0500 Subject: [PATCH 2/7] Added results and stats to /ogs endpoint --- server/controllers/v1/logs/logsController.js | 11 ++++++- server/index.js | 21 ++++++++----- server/models/logSchema.js | 31 ++++++++++++++++++++ server/services/speedtestService.js | 9 ------ 4 files changed, 55 insertions(+), 17 deletions(-) diff --git a/server/controllers/v1/logs/logsController.js b/server/controllers/v1/logs/logsController.js index 932e2a1..d9626e1 100644 --- a/server/controllers/v1/logs/logsController.js +++ b/server/controllers/v1/logs/logsController.js @@ -1,6 +1,15 @@ +const { logger } = require("../../../util/logger"); +const SpeedTestLogs = require("../../../models/logSchema.js"); + async function home(req, res, next) { try { - res.send("We Made It"); + + const results = await Promise.all([ + await SpeedTestLogs.getCurrentStats(), + await SpeedTestLogs.getLatestResults(), + ]); + + res.send({stats: results[0], results: results[1]}); // } catch (e) { //correctly json handle this error message diff --git a/server/index.js b/server/index.js index b1126e2..d9425cf 100644 --- a/server/index.js +++ b/server/index.js @@ -13,28 +13,35 @@ const { runSpeedTestLog } = require("./services/speedtestService.js"); logger.info(`Speedtester Starting in ${process.env.NODE_ENV} mode`); + const {install} = require("../config/install"); //Once connect launch our server connectDb().then(async () => { logger.info("Speedtester Connected to Mongo"); - logger.info("Speedtester Accepting Liscensce for Speedtest.net"); - await install(); + //Liscense check for production only instances built through docker images + if(process.env.NODE_ENV == 'production'){ + logger.info("Speedtester Accepting Liscensce for Speedtest.net"); + await install(); + } - //Start Server - const port = process.env.APP_PORT || 3000; - server.listen(port); - //setup Events Emitter for sockets const events = require("events"); const em = new events.EventEmitter(); + //Pass Events Emitter to Socket Routes require("./routes/socket")(io, em); - + + //setup scheduled jobs if (RUN_SCHEDULED_JOB == true) { const speedtestIntervalJob = schedule.scheduleJob(SPEEDTEST_INTERVAL, runSpeedTestLog); } + //Start Server + const port = process.env.APP_PORT || 3000; + server.listen(port); + + logger.info(`Speedtester API is running on port: ${port}`); }); diff --git a/server/models/logSchema.js b/server/models/logSchema.js index 401bceb..7dc124a 100644 --- a/server/models/logSchema.js +++ b/server/models/logSchema.js @@ -1,4 +1,5 @@ const mongoose = require("mongoose"); +const { logger } = require("../util/logger"); const LogSchema = new mongoose.Schema({ timestamp: { @@ -77,4 +78,34 @@ const LogSchema = new mongoose.Schema({ //Make this collection singular later? const Log = mongoose.model("Log", LogSchema); +Log.getLatestResults = async function () { + try { + const results = await Log.find().sort({_id: -1}).limit(500); + return results; + } catch (error) { + logger.error("logSchema | getLatestResults | Error=", error.message); + } +} + +Log.getCurrentStats = async function () { + try { + const results = await Log.aggregate([ + {$sort: {timestamp: -1}}, + { + $group: + { + "_id": null, + avgDownload: {$avg: "$download.bandwidth"} , + avgUpload: {$avg: "$upload.bandwidth"} + } + } + ]); + return results; + } catch (error) { + logger.error("logSchema | getCurrentStats | Error=", error); + } +} + + + module.exports = Log; diff --git a/server/services/speedtestService.js b/server/services/speedtestService.js index 79eda49..a5f6416 100644 --- a/server/services/speedtestService.js +++ b/server/services/speedtestService.js @@ -54,12 +54,3 @@ const speedtestService = { }; module.exports = speedtestService; - -/** - -const { convertToMegabits } = require("../util/utilities.js"); - -async function handleProgress(testEvent) { - console.log(testEvent); -} - */ From 965505462d7b30b315fa7641ac76faac66cd4fff Mon Sep 17 00:00:00 2001 From: Brian Ridsdalea Date: Fri, 28 Jan 2022 01:47:29 -0500 Subject: [PATCH 3/7] Added Endpoint for logs and stats, built out basic vuex store module --- .prettierrc.json | 3 - client/package-lock.json | 20 ++- client/package.json | 1 + client/src/App.vue | 6 + client/src/components/Layout/Header.vue | 4 +- .../Speedtest/SpeedtestPastResults.vue | 10 ++ .../Speedtest/SpeedtestProgressCard.vue | 14 +- .../Speedtest/SpeedtestResultsCard.vue | 26 ++- .../components/Speedtest/SpeedtestWrapper.vue | 19 ++- client/src/store/api/index.js | 66 ++++++++ client/src/store/index.js | 7 + client/src/store/logs/index.js | 55 ++++++ client/src/store/store.constants.js | 14 ++ client/src/util/axios.js | 10 ++ package-lock.json | 158 ++++++++++++++++++ server/controllers/v1/logs/logsController.js | 2 +- 16 files changed, 394 insertions(+), 21 deletions(-) delete mode 100644 .prettierrc.json create mode 100644 client/src/store/api/index.js create mode 100644 client/src/store/logs/index.js create mode 100644 client/src/store/store.constants.js create mode 100644 client/src/util/axios.js diff --git a/.prettierrc.json b/.prettierrc.json deleted file mode 100644 index 963354f..0000000 --- a/.prettierrc.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "printWidth": 120 -} diff --git a/client/package-lock.json b/client/package-lock.json index daa018a..c1fbb81 100644 --- a/client/package-lock.json +++ b/client/package-lock.json @@ -2491,6 +2491,14 @@ "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==", "dev": true }, + "axios": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.25.0.tgz", + "integrity": "sha512-cD8FOb0tRH3uuEe6+evtAbgJtfxr7ly3fQjYcMcuPlgkwVS9xboaVIpcDV+cYQe+yGykgwZCs1pzjntcGa6l5g==", + "requires": { + "follow-redirects": "^1.14.7" + } + }, "babel-eslint": { "version": "10.1.0", "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-10.1.0.tgz", @@ -3089,6 +3097,10 @@ "integrity": "sha512-csfD/GpHMqgEL3V3uIgosvh+SVIQvCh43SNu9HRbP1lnxkKm1kjDG4f32PP571JplkLjfS+mg2p1gxR7MYrrIA==", "dev": true }, + "canvas-gauges": { + "version": "github:Mikhus/canvas-gauges#6b179f83b7f03926a4d58ac09e15525d19fad3d1", + "from": "github:Mikhus/canvas-gauges" + }, "case-sensitive-paths-webpack-plugin": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.4.0.tgz", @@ -5646,8 +5658,7 @@ "follow-redirects": { "version": "1.14.7", "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.7.tgz", - "integrity": "sha512-+hbxoLbFMbRKDwohX8GkTataGqO6Jb7jGwpAlwgy2bIz25XtRm7KEzJM76R1WiNT5SwZkX4Y75SwBolkpmE7iQ==", - "dev": true + "integrity": "sha512-+hbxoLbFMbRKDwohX8GkTataGqO6Jb7jGwpAlwgy2bIz25XtRm7KEzJM76R1WiNT5SwZkX4Y75SwBolkpmE7iQ==" }, "for-in": { "version": "1.0.2", @@ -11518,7 +11529,10 @@ "vue-canvas-gauges": { "version": "0.0.0", "resolved": "https://registry.npmjs.org/vue-canvas-gauges/-/vue-canvas-gauges-0.0.0.tgz", - "integrity": "sha1-0GhVYS+AgqsmLPwiRrO/7QVfTvc=" + "integrity": "sha1-0GhVYS+AgqsmLPwiRrO/7QVfTvc=", + "requires": { + "canvas-gauges": "github:Mikhus/canvas-gauges" + } }, "vue-cli-plugin-vuetify": { "version": "2.4.5", diff --git a/client/package.json b/client/package.json index c203e0d..2c2caad 100644 --- a/client/package.json +++ b/client/package.json @@ -9,6 +9,7 @@ }, "dependencies": { "@fortawesome/fontawesome-free": "5.15.3", + "axios": "^0.25.0", "core-js": "^3.6.5", "roboto-fontface": "*", "socket.io-client": "2.3.1", diff --git a/client/src/App.vue b/client/src/App.vue index 843cb9b..beabb6b 100644 --- a/client/src/App.vue +++ b/client/src/App.vue @@ -9,6 +9,8 @@ diff --git a/client/src/components/Layout/Header.vue b/client/src/components/Layout/Header.vue index 94da5c2..4817400 100644 --- a/client/src/components/Layout/Header.vue +++ b/client/src/components/Layout/Header.vue @@ -1,6 +1,8 @@