Skip to content

Commit 3eecd18

Browse files
James Socoljsocol
authored andcommitted
Add support for gauge deltas.
* Add tests for gauges and new gauge deltas. * Add support for +/- prefix for gauge values to support modifying gauge values in-place.
1 parent 4ea57cf commit 3eecd18

File tree

2 files changed

+75
-1
lines changed

2 files changed

+75
-1
lines changed

stats.js

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -191,7 +191,11 @@ config.configFile(process.argv[2], function (config, oldConfig) {
191191
timers[key].push(Number(fields[0] || 0));
192192
timer_counters[key] += (1 / sampleRate);
193193
} else if (fields[1].trim() == "g") {
194-
gauges[key] = Number(fields[0] || 0);
194+
if (gauges[key] && fields[0].match(/^[-+]/)) {
195+
gauges[key] += Number(fields[0] || 0);
196+
} else {
197+
gauges[key] = Number(fields[0] || 0);
198+
}
195199
} else if (fields[1].trim() == "s") {
196200
if (! sets[key]) {
197201
sets[key] = new set.Set();

test/graphite_tests.js

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -298,5 +298,75 @@ module.exports = {
298298
});
299299
});
300300
});
301+
},
302+
303+
gauges_are_valid: function(test) {
304+
test.expect(3);
305+
306+
var testvalue = 70;
307+
var me = this;
308+
this.acceptor.once('connection', function(c) {
309+
statsd_send('a_test_value:' + testvalue + '|g', me.sock, '127.0.0.1', 8125, function() {
310+
collect_for(me.acceptor, me.myflush*2, function(strings) {
311+
test.ok(strings.length > 0, 'should receive some data');
312+
var hashes = _.map(strings, function(x) {
313+
var chunks = x.split(' ');
314+
var data = {};
315+
data[chunks[0]] = chunks[1];
316+
return data;
317+
});
318+
var numstat_test = function(post) {
319+
var mykey = 'statsd.numStats';
320+
return _.include(_.keys(post), mykey) && (post[mykey] == 1);
321+
};
322+
test.ok(_.any(hashes, numstat_test), 'statsd.numStats should be 1');
323+
324+
var gaugevalue_test = function(post) {
325+
var mykey = 'stats.gauges.a_test_value';
326+
return _.include(_.keys(post), mykey) && (post[mykey] == testvalue);
327+
};
328+
test.ok(_.any(hashes, gaugevalue_test), 'stats.gauges.a_test_value should be ' + testvalue);
329+
330+
test.done();
331+
});
332+
});
333+
});
334+
},
335+
336+
gauge_modifications_are_valid: function(test) {
337+
test.expect(3);
338+
339+
var teststartvalue = 50;
340+
var testdeltavalue = '-3';
341+
var testresult = teststartvalue + Number(testdeltavalue);
342+
var me = this;
343+
this.acceptor.once('connection', function(c) {
344+
statsd_send('test_value:' + teststartvalue + '|g', me.sock, '127.0.0.1', 8125, function() {
345+
statsd_send('test_value:' + testdeltavalue + '|g', me.sock, '127.0.0.1', 8125, function() {
346+
collect_for(me.acceptor, me.myflush * 2, function(strings) {
347+
test.ok(strings.length > 0, 'should receive some data');
348+
var hashes = _.map(strings, function(x) {
349+
var chunks = x.split(' ');
350+
var data = {};
351+
data[chunks[0]] = chunks[1];
352+
return data;
353+
});
354+
var numstat_test = function(post) {
355+
var mykey = 'statsd.numStats';
356+
return _.include(_.keys(post), mykey) && (post[mykey] == 1);
357+
};
358+
test.ok(_.any(hashes, numstat_test), 'statsd.numStats should be 1');
359+
360+
var gaugevalue_test = function(post) {
361+
var mykey = 'stats.gauges.test_value';
362+
return _.include(_.keys(post), mykey) && (post[mykey] == testresult);
363+
};
364+
test.ok(_.any(hashes, gaugevalue_test), 'stats.gauges.test_value should be ' + testresult);
365+
366+
test.done();
367+
});
368+
});
369+
});
370+
});
301371
}
302372
}

0 commit comments

Comments
 (0)