From c4a333269d7af92e6219337290dce6fb52596e05 Mon Sep 17 00:00:00 2001 From: Luke Berndt Date: Sun, 18 Aug 2024 21:25:36 -0400 Subject: [PATCH] cache system data --- backend/controllers/systems.js | 57 ++++++++++++++++++++++++++++++++-- backend/sys_stats.js | 7 +++-- 2 files changed, 58 insertions(+), 6 deletions(-) diff --git a/backend/controllers/systems.js b/backend/controllers/systems.js index 26e9424..f1a645d 100644 --- a/backend/controllers/systems.js +++ b/backend/controllers/systems.js @@ -12,6 +12,9 @@ const mailjet = new Mailjet({ apiSecret: process.env['MAILJET_SECRET'] }); +var systemList = []; +var systemListTime = Date.now(); + exports.contact_system = async function(req, res) { var system = await System.findOne({ shortName: req.params.shortName.toLowerCase() @@ -97,11 +100,59 @@ exports.contact_system = async function(req, res) { } -exports.get_systems = async function (req, res) { +async function load_systems(systemClients) { let fromDate = new Date(Date.now() - 60 * 60 * 24 * 30 * 1000); - //const results = await System.find({lastActive: {$gte: fromDate}}).populate('userId', "screenName").catch( err => { + const results = await System.find({lastActive: {$gte: fromDate}}).populate('userId', "screenName").catch( err => { //const results = await System.find({active: true}).populate('userId', "screenName").catch( err => { - const results = await System.find({active: true}).catch( err => { + //const results = await System.find({active: true}).catch( err => { // super simple query + console.error("Error - get_systems: " + err.message); + }); + systemList = []; + for (var result in results) { + + var clientCount = 0; + if (systemClients.hasOwnProperty(results[result].shortName)) { + clientCount = systemClients[results[result].shortName]; + } + var system = { + name: results[result].name, + shortName: results[result].shortName, + systemType: results[result].systemType, + county: results[result].county, + country: results[result].country, + city: results[result].city, + state: results[result].state, + active: results[result].active, + lastActive: results[result].lastActive, + callAvg: results[result].callAvg, + description: results[result].description, + status: results[result].status, + allowContact: results[result].allowContact, + clientCount: clientCount + } + /* + if (results[result].showScreenName && results[result].userId) { + system.screenName = results[result].userId.screenName + } else { + system.screenName = null; + }*/ + system.screenName = null; + systemList.push(system); + } + +} + + +exports.get_systems = async function (req, res) { + if ((systemList.length == 0) || (systemListTime < (Date.now() - 60 * 1000 * 15))) { + await load_systems(req.systemClients); + systemListTime = Date.now(); + } + + let fromDate = new Date(Date.now() - 60 * 60 * 24 * 30 * 1000); + const results = await System.find({lastActive: {$gte: fromDate}}).populate('userId', "screenName").catch( err => { + //const results = await System.find({active: true}).populate('userId', "screenName").catch( err => { + //const results = await System.find({active: true}).catch( err => { // super simple query console.error("Error - get_systems: " + err.message); res.status(500); res.json({ diff --git a/backend/sys_stats.js b/backend/sys_stats.js index 73c6a20..3e99a41 100644 --- a/backend/sys_stats.js +++ b/backend/sys_stats.js @@ -15,19 +15,20 @@ async function updateActiveSystems() { // go through all the systems // if you have received some calls during that last period, make the system active if ((callTotals[item.shortName] != undefined) && (callTotals[item.shortName][0] > 0)) { - //item.active = true; + item.active = true; item.callAvg = callTotals[item.shortName][0] / timePeriod; item.lastActive = new Date(); } else { - //item.active = false; + item.active = false; item.callAvg = 0; } + /* let fromDate = new Date(Date.now() - 60 * 60 * 24 * 30 * 1000); if ((item.lastActive != null) && (item.lastActive > fromDate)) { item.active = true; } else { item.active = false; - } + }*/ await item.save(); }; }