UNPKG

@fabrix/spool-analytics

Version:

Spool: Analytics for Fabrix

98 lines (97 loc) 3.25 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const common_1 = require("@fabrix/fabrix/dist/common"); const errors_1 = require("@fabrix/spool-sequelize/dist/errors"); const moment = require("moment"); const lodash_1 = require("lodash"); class AnalyticsService extends common_1.FabrixService { build() { const analytics = []; for (const analytic in this.app.analytics) { if (!this.app.analytics.hasOwnProperty(analytic)) { continue; } if (!this.app.analytics[analytic].hasOwnProperty('build')) { continue; } analytics.push(this.app.analytics[analytic]); } return Promise.all(analytics.map(analytic => { return analytic.build(); })) .then(results => { this.app.log.info(results); return; }); } findOne(params) { } findCompare(params) { const Analytics = this.app.models['Analytic']; const name = params.name; return Analytics.findAll({ where: { name: name }, limit: 2, order: [['created_at', 'DESC']] }) .then(analytics => { if (analytics.length === 0) { throw new errors_1.ModelError('E_NOT_FOUND', `${name} not found`); } if (analytics.length === 1) { analytics = [...analytics, ...analytics]; } if (!analytics[0].group_label) { const trend = this.trendGroup(analytics[0].data, analytics[1].data); Object.assign(analytics[0], { trend: trend, trend_range: 2, trend_date_range: [analytics[0].end, analytics[1].start], }); } else { const trend = analytics[0].data.map((d, i) => { return this.trendGroup(analytics[0].data[i], analytics[1].data[i]); }); Object.assign(analytics[0], { trend: trend, trend_range: 2, trend_date_range: [analytics[0].end, analytics[1].start], }); } return analytics[0]; }); } trendGroup(group1 = [], group2 = []) { const trend = []; group1.forEach((d, i) => { if (lodash_1.isNumber(d)) { trend.push(d - (group2[i] || 0)); } else { trend.push(d); } }); return trend; } findGroup(params, query) { const Analytics = this.app.models['Analytic']; const start = moment(query.start); const end = moment(query.end || Date.now()); const name = params.name; return Analytics.findAll({ where: { name: name, start: { $gte: start.format('YYYY-MM-DD HH:mm:ss') }, end: { $gte: end.format('YYYY-MM-DD HH:mm:ss') } } }); } } exports.AnalyticsService = AnalyticsService;