Commit | Line | Data |
---|---|---|
0ca6adac | 1 | module.exports = { |
5dca83ca D |
2 | incr: function incr(stat_name, data) { |
3 | global.modules.emit('stat counter', {name: stat_name, data: data}); | |
4 | }, | |
5 | ||
6 | gauge: function gauge(stat_name, value) { | |
7 | global.modules.emit('stat gauge', {name: stat_name, value: value}); | |
8 | }, | |
9 | ||
10 | ||
11 | /** | |
12 | * Send a timer value to the stats | |
13 | * | |
14 | * Usage: | |
15 | * var timer = Stats.startTimer('stat_name', {some_data: 'value'}); | |
16 | * // Do stuff | |
17 | * timer.stop({other_data: 'value'}); | |
18 | * | |
19 | * The object passed into .startTimer() and .stop(); are optional. If | |
20 | * given they will be shallow merged with .stop() overridding .startTimer() | |
21 | */ | |
22 | startTimer: function statsTimer(stat_name, data_start) { | |
23 | var timer_started = new Date(); | |
24 | ||
25 | var timerStop = function timerStop(data_end) { | |
26 | var time = (new Date()) - timer_started; | |
27 | var data = shallowMergeObjects(data_start, data_end); | |
28 | ||
29 | global.modules.emit('stat timer', {name: stat_name, time: time, data: data}); | |
30 | }; | |
31 | ||
32 | return { | |
33 | stop: timerStop | |
34 | }; | |
0ca6adac | 35 | } |
5dca83ca D |
36 | }; |
37 | ||
38 | ||
39 | ||
40 | function shallowMergeObjects(/** argn, ... **/) { | |
41 | var arg_idx, arg, | |
42 | data = {}; | |
43 | ||
44 | for(arg_idx=0; arg_idx<arguments.length; arg_idx++) { | |
45 | arg = arguments[arg_idx]; | |
46 | ||
47 | if (!arg) { | |
48 | continue; | |
49 | } | |
50 | ||
51 | for(var prop in arg) { | |
52 | if (arg.hasOwnProperty(prop)) { | |
53 | data[prop] = arg[prop]; | |
54 | } | |
55 | } | |
56 | } | |
57 | ||
58 | return data; | |
59 | } |