Repository navigation
Expand file tree
/
Copy pathevents.js
More file actions
84 lines (63 loc) · 1.91 KB
/
Copy pathevents.js
File metadata and controls
84 lines (63 loc) · 1.91 KB
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
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
var EventEmitter2 = require('eventemitter2').EventEmitter2;
var _ = require('lodash');
var logger = require('./utils/logger')("events");
var socket = require('./socket');
var timestamp = require('./utils/time').timestamp;
var hooks = require('./hooks');
var events = new EventEmitter2({
delimiter: ":",
wildcart: true
});
var init = function(config) {
///// Add socket service events
socket.service("events", function(conn) {
var handler = function(data) {
conn.do("report", {
"event": this.event,
"data": data
});
};
events.onAny(handler);
// Disconnect cleanly
conn.on('close', function() {
events.off("*", handler);
});
});
///// Add events reportings
// Interval to send events
var timeout = Number(config.reporting.timeout || 180) * 1e3; // 3mn
// A queue we push all our events to
var eventQueue = [];
// Send events and empty queue
var sendEvents = _.debounce(function() {
logger.log("report", _.size(eventQueue), "events");
// Hit hook
hooks.use("events", eventQueue);
// Empty queue
eventQueue = [];
}, timeout);
var queueEvent = function(eventData) {
eventQueue.push(eventData);
};
events.onAny(function(data) {
logger.log("event '"+this.event+"'");
// Queue new event
queueEvent({
// Type of event
event: this.event,
// Data of event
data: data,
// Workspace ID
workspaceId: config.id,
// Timestamp of event
timestamp: (Date.now()/1000)
});
// Send events
sendEvents();
});
logger.log("events are ready, reporting is debounced to", (timeout/1000).toFixed(0)+"s");
};
module.exports = {
init: init,
emit: events.emit.bind(events)
};