UNPKG

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
/** * 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; };