@fabrix/spool-analytics
Version:
Spool: Analytics for Fabrix
162 lines (161 loc) • 5.17 kB
JavaScript
"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;