rutilus-analytics-node-js
Version:
Provides a GUI web app that allows users to examine their data in detail. Includes CSV export functionality.
101 lines (92 loc) • 3.54 kB
JavaScript
/**
* Rutilus
*
* @homepage https://gmrutilus.github.io
* @license Apache-2.0
*/
const axios = require('axios');
module.exports = /** @param {KoaCtx} ctx */ async (ctx) => {
const {serverSettings, schemas, logger} = ctx.res;
// Getting the versions
const versions = {
analytics: {
latest: '?',
current: require('../package.json').version,
},
logger: {
latest: '?',
current: '?',
},
observer: {
latest: '?',
current: '?',
},
};
const stats = {
versions,
latestVisit: '?',
latestAffinity: '?',
};
try {
await Promise.all([
new Promise((resolve, reject) => {
schemas.Visits
.find({}, {date: 1})
.sort({date: -1})
.limit(1)
.exec((err, docs) => {
if (err) { logger.error(err); resolve(); return; }
if (!docs || docs.length < 1) { resolve(); return; }
stats.latestVisit = docs[0].date;
resolve();
});
}),
new Promise((resolve, reject) => {
schemas.UatCache
.find({}, {date: 1})
.sort({date: -1})
.limit(1)
.exec((err, docs) => {
if (err) { logger.error(err); resolve(); return; }
if (!docs || docs.length < 1) { resolve(); return; }
stats.latestAffinity = docs[0].date;
resolve();
});
}),
new Promise((resolve, reject) => {
axios.get('http://registry.npmjs.org/rutilus-logger-node/latest')
.then((response) => versions.logger.latest = response.data.version)
.then(resolve)
.catch((e) => { logger.error(e); resolve(); });
}),
new Promise((resolve, reject) => {
axios.get('http://registry.npmjs.org/rutilus-analytics-node-js/latest')
.then((response) => versions.analytics.latest = response.data.version)
.then(resolve)
.catch((e) => { logger.error(e); resolve(); });
}),
new Promise((resolve, reject) => {
axios.get('http://registry.npmjs.org/rutilus-observer-web-js/latest')
.then((response) => versions.observer.latest = response.data.version)
.then(resolve)
.catch((e) => { logger.error(e); resolve(); });
}),
new Promise((resolve, reject) => {
if (!serverSettings.addresses.logger) { resolve(); return; }
let addr = serverSettings.addresses.logger;
if (!/^https?:/.test(addr)) { addr = (serverSettings.useHttps ? 'https://' : 'http://') + addr; }
axios.get(addr)
.then((response) => {
versions.observer.current = response.data.observerVersion;
versions.logger.current = response.data.loggerVersion;
})
.then(resolve)
.catch((e) => { logger.error(e); resolve(); });
})
]);
}
catch (e) {
logger.error(e);
}
ctx.body = stats;
};