UNPKG

@fabrix/spool-analytics

Version:

Spool: Analytics for Fabrix

162 lines (161 loc) 5.17 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const spool_crons_1 = require("@fabrix/spool-crons"); class AnalyticsCron extends spool_crons_1.Cron { constructor(app) { super(app); this._analytics = { year: new Map(), quarter: new Map(), month: new Map(), week: new Map(), day: new Map(), hour: new Map(), minute: new Map() }; super.unallowedMethods = [ 'addAnalytic', 'removeAnalytic' ]; Object.defineProperties(this, { addAnalytic: { enumerable: false, value: (time, analyticName, analytic) => { if (this._analytics[time]) { return this._analytics[time].set(analyticName, analytic); } return null; }, writable: true }, removeAnalytic: { enumerable: false, value: (time, analytic) => { if (this._analytics[time]) { return this._analytics[time].delete(analytic.name, analytic); } return null; }, writable: true } }); } minute() { const rule = new this.scheduler.RecurrenceRule(); rule.second = 0; this.scheduler.scheduleJob('AnalyticsCron.minute', rule, () => { this._analytics.minute.forEach((analytic, name) => { this.app.log.debug('Run Analytic:', name); try { analytic(); } catch (err) { this.app.log.error(err); } }); }); } hour() { const rule = new this.scheduler.RecurrenceRule(); rule.minute = 0; this.scheduler.scheduleJob('AnalyticsCron.hour', rule, () => { this._analytics.hour.forEach((analytic, name) => { this.app.log.debug('Run Analytic:', name); try { analytic(); } catch (err) { this.app.log.error(err); } }); }); } day() { const rule = new this.scheduler.RecurrenceRule(); rule.minute = 0; rule.hour = 0; this.scheduler.scheduleJob('AnalyticsCron.day', rule, () => { this._analytics.day.forEach((analytic, name) => { this.app.log.debug('Run Analytic:', name); try { analytic(); } catch (err) { this.app.log.error(err); } }); }); } week() { const rule = new this.scheduler.RecurrenceRule(); rule.minute = 0; rule.hour = 0; rule.dayOfWeek = 0; this.scheduler.scheduleJob('AnalyticsCron.week', rule, () => { this._analytics.week.forEach((analytic, name) => { this.app.log.debug('Run Analytic:', name); try { analytic(); } catch (err) { this.app.log.error(err); } }); }); } month() { const rule = new this.scheduler.RecurrenceRule(); rule.minute = 0; rule.hour = 0; rule.date = 1; rule.month = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]; this.scheduler.scheduleJob('AnalyticsCron.month', rule, () => { this._analytics.month.forEach((analytic, name) => { this.app.log.debug('Run Analytic:', name); try { analytic(); } catch (err) { this.app.log.error(err); } }); }); } quarter() { const rule = new this.scheduler.RecurrenceRule(); rule.minute = 0; rule.hour = 0; rule.date = 1; rule.month = [2, 5, 8, 11]; this.scheduler.scheduleJob('AnalyticsCron.quarter', rule, () => { this._analytics.quarter.forEach((analytic, name) => { this.app.log.debug('Run Analytic:', name); try { analytic(); } catch (err) { this.app.log.error(err); } }); }); } year() { const rule = new this.scheduler.RecurrenceRule(); rule.minute = 0; rule.hour = 0; rule.date = 1; rule.month = 0; this.scheduler.scheduleJob('AnalyticsCron.year', rule, () => { this._analytics.year.forEach((analytic, name) => { this.app.log.debug('Run Analytic:', name); try { analytic(); } catch (err) { this.app.log.error(err); } }); }); } } exports.AnalyticsCron = AnalyticsCron;