diff --git a/UpNext.md b/UpNext.md index 01c7630..f438206 100644 --- a/UpNext.md +++ b/UpNext.md @@ -5,6 +5,7 @@ * Alerts box should not be clickable, bar should be. * Enable text search for `locationName` on find-code page. * Responsive text sizes for boards. +* Build metrics page ### In Progress: @@ -20,11 +21,13 @@ * Add Gitea Issue API * Issue page: Check for success and then redirect to /. * Add success test for Gitea Issue API and send the result onto the client. +* DB Indexes: + - "stations": 3ALPHA, STANOX, TIPLOC + - "corpus": 3ALPHA, NLC ## Backend: -* DB Indexes: - - "stations": 3ALPHA, STANOX, TIPLOC - - "corpus": 3ALPHA, NLC, NLCDESC(TEXT) +* DB Indexes:. + - "corpus": NLCDESC(TEXT) * Rewrite sanitizing functions to remove external dependancy. * Undo changed to make everything an array - frontend code to handle this. \ No newline at end of file diff --git a/src/controllers/list.controllers.js b/src/controllers/list.controllers.js index adb3074..63fd1c4 100644 --- a/src/controllers/list.controllers.js +++ b/src/controllers/list.controllers.js @@ -18,7 +18,17 @@ async function getCorpus(req, res, next){ } } +async function hits(req, res, next) { + try { + res.json(await list.hits()) + } catch (err) { + console.error(`Controller Error`, err); + next(err); + } +} + module.exports = { getStations, - getCorpus + getCorpus, + hits } \ No newline at end of file diff --git a/src/routes/list.routes.js b/src/routes/list.routes.js index f49d13d..51bfbde 100644 --- a/src/routes/list.routes.js +++ b/src/routes/list.routes.js @@ -16,5 +16,6 @@ const listController = require('../controllers/list.controllers'); router.get('/stations', listController.getStations); router.get('/corpus', listController.getCorpus); +router.get('/hits', listController.hits) module.exports = router; \ No newline at end of file diff --git a/src/services/dbAccess.services.js b/src/services/dbAccess.services.js index 4e4b984..44c36c2 100644 --- a/src/services/dbAccess.services.js +++ b/src/services/dbAccess.services.js @@ -78,19 +78,53 @@ async function query(collection, query){ return (await qcursor.toArray()); } -async function ensureIndex(col, field) { +async function ensureIndex(col, field, text) { await client.connect(); - log.out(`dbAccess.ensureIndex: Creating index in collection ${col} for field ${field}`) - let res = await db.createIndex(col, field); + if (!text) { + log.out(`dbAccess.ensureIndex: Creating index in collection ${col} for field ${field}`) + db.createIndex(col, field); + } else { + log.out(`dbAccess.ensureIndex: Creating text index in collection ${col} for field ${field}`) + let idx = {} + idx[field] = "text"; + db.createIndex(col, idx); + } log.out(`dbAccess.ensureIndex: Index created`); return; } +async function increment(target) { + await client.connect(); + let col = db.collection("meta"); + let update = {} + update[target] = 1 + col.updateOne({target: "ext_api"}, {$inc:update}) + return; +} + +async function createCount() { + await client.connect(); + let col = db.collection("meta"); + var filter = {type: "count", target: "ext_api"}; + var update = {$set:{since: new Date, type: "count", target: "ext_api"}}; + var options = {upsert: true}; // If document isn't present will insert. + try { + var result = await col.updateOne(filter,update,options) + log.out(`dbAccessServices.updateMeta: ${JSON.stringify(result)}`) + log.out(`dbAccessServices.updateMeta: count meta added updated`) + } catch (err) { + log.out(`dbAccessServices.updateMeta: Unable to add count`) + log.out(err) + } +} + module.exports = { putCorpus, putStations, dropCollection, updateMeta, query, - ensureIndex + ensureIndex, + increment, + createCount } \ No newline at end of file diff --git a/src/services/ldb.services.js b/src/services/ldb.services.js index d86aa6f..78ad6b1 100644 --- a/src/services/ldb.services.js +++ b/src/services/ldb.services.js @@ -11,6 +11,7 @@ const log = require('../utils/log.utils'); // Log Helper const ldb = require('ldbs-json') const util = require('../utils/ldb.utils') const san = require('../utils/sanitizer.utils') +const db = require('../services/dbAccess.services') const ldbKey = process.env.OWL_LDB_KEY const ldbsvKey = process.env.OWL_LDB_SVKEY @@ -22,6 +23,7 @@ async function get(body, id){ var crs = obj[0]['3ALPHA']; log.out(`ldbService.get: Determined CRS for lookup to be: ${crs}`); var data = await arrDepBoard(crs); + db.increment("ldbws") // Need to add creation of this document to the database. >> {type:"count",counting:"api_hit",target:"ldbws",since:"DATE"} } catch (err) { log.out(`ldbService.get: Error, Unable to find CRS: ${err}`) var data = {ERROR:'NOT_FOUND',description:'The entered station was not found. Please check and try again.'}; diff --git a/src/services/list.services.js b/src/services/list.services.js index 59fe57a..6665689 100644 --- a/src/services/list.services.js +++ b/src/services/list.services.js @@ -14,7 +14,14 @@ async function getCorpus(){ return out; } +async function hits(){ + var out = await db.query("meta"); + log.out(`listServices.meta: fetched server meta`) + return out; +} + module.exports = { getStations, - getCorpus + getCorpus, + hits } \ No newline at end of file diff --git a/src/utils/dbinit.utils.js b/src/utils/dbinit.utils.js index 7569a0c..e4eac88 100644 --- a/src/utils/dbinit.utils.js +++ b/src/utils/dbinit.utils.js @@ -29,6 +29,7 @@ async function init(){ } } indexes(); + dbAccess.createCount(); } async function check(coll){ @@ -81,6 +82,7 @@ async function indexes() { dbAccess.ensureIndex("stations", "3ALPHA"); dbAccess.ensureIndex("stations", "STANOX"); dbAccess.ensureIndex("stations", "TIPLOC"); + dbAccess.ensureIndex("corpus", "NLCDESC", "text") } module.exports = {