/
tagHourlyStat.js
69 lines (62 loc) · 2.85 KB
/
tagHourlyStat.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var TimeCalculator = require('../lib/timeCalculator');
var QosAggregator = require('../lib/qosAggregator');
var async = require('async');
// main model
var TagHourlyStat = new Schema({
name : String,
timestamp : Date,
count : Number,
ups : Number,
responsives : Number,
time : Number,
downtime : Number
});
TagHourlyStat.index({ name: 1, timestamp: -1 }, { unique: true });
TagHourlyStat.plugin(require('../lib/lifecycleEventsPlugin'));
var mapTag = function() {
var qos = { count: this.count, ups: this.ups , responsives: this.responsives, time: this.time, downtime: this.downtime };
emit(this.name, qos);
};
TagHourlyStat.statics.updateDailyQos = function(now, callback) {
if ('undefined' == typeof callback) {
// Mogoose Model.update() implementation requires a callback
callback = function(err) { if (err) console.dir(err); };
}
var start = TimeCalculator.resetDay(now);
var end = TimeCalculator.completeDay(now);
var TagDailyStat = require('./tagDailyStat');
QosAggregator.getQosForPeriod(this.collection, mapTag, start, end, function(err, results) {
if (err) return callback(err);
async.forEach(results, function(result, cb) {
var stat = result.value;
TagDailyStat.update({ name: result._id, timestamp: start }, { $set: { count: stat.count, ups: stat.ups, responsives: stat.responsives, time: stat.time, downtime: stat.downtime } }, { upsert: true }, cb);
}, callback);
});
}
TagHourlyStat.statics.updateLastDayQos = function(callback) {
var now = new Date(Date.now() - 1000 * 60 * 66); // 1 hour and 6 minutes in the past, to accomodate script running every hour
this.updateDailyQos(now, callback);
}
TagHourlyStat.statics.updateMonthlyQos = function(now, callback) {
if ('undefined' == typeof callback) {
// Mogoose Model.update() implementation requires a callback
callback = function(err) { if (err) console.dir(err); };
}
var start = TimeCalculator.resetMonth(now);
var end = TimeCalculator.completeMonth(now);
var TagMonthlyStat = require('./tagMonthlyStat');
QosAggregator.getQosForPeriod(this.collection, mapTag, start, end, function(err, results) {
if (err) return callback(err);
async.forEach(results, function(result, cb) {
var stat = result.value;
TagMonthlyStat.update({ name: result._id, timestamp: start }, { $set: { count: stat.count, ups: stat.ups, responsives: stat.responsives, time: stat.time, downtime: stat.downtime } }, { upsert: true }, cb);
}, callback);
});
}
TagHourlyStat.statics.updateLastMonthQos = function(callback) {
var now = new Date(Date.now() - 1000 * 60 * 66); // 1 hour and 6 minutes in the past, to accomodate script running every hour
this.updateMonthlyQos(now, callback);
}
module.exports = mongoose.model('TagHourlyStat', TagHourlyStat);