Adding metric logging mechanism

This commit is contained in:
hbeeken
2015-01-27 14:41:20 +00:00
parent 56ef982345
commit 0bfbb12211
10 changed files with 267 additions and 168 deletions

View File

@@ -551,7 +551,6 @@ describe('Flow', function() {
describe('#applyConfig',function() {
var getType;
var getNode;
var flowsAdd;
var credentialsClean;
var stoppedNodes = {};
@@ -562,6 +561,7 @@ describe('Flow', function() {
var node = this;
this.handled = 0;
this.stopped = false;
currentNodes[node.id] = node;
this.on('input',function(msg) {
node.handled++;
node.send(msg);
@@ -578,9 +578,6 @@ describe('Flow', function() {
before(function() {
flowsAdd = sinon.stub(flows,"add",function(node) {
currentNodes[node.id] = node;
});
getNode = sinon.stub(flows,"get",function(id) {
return currentNodes[id];
});
@@ -592,7 +589,6 @@ describe('Flow', function() {
});
after(function() {
getType.restore();
flowsAdd.restore();
credentialsClean.restore();
getNode.restore();
});

View File

@@ -17,6 +17,7 @@
var should = require("should");
var sinon = require('sinon');
var RedNode = require("../../../red/nodes/Node");
var Log = require("../../../red/log");
var flows = require("../../../red/nodes/flows");
var comms = require('../../../red/comms');
@@ -85,6 +86,26 @@ describe('Node', function() {
});
n.receive(message);
});
it('writes metric info with undefined msg', function(done){
var n = new RedNode({id:'123',type:'abc'});
n.on('input',function(msg) {
(typeof msg).should.not.be.equal("undefined");
(typeof msg._messageUuid).should.not.be.equal("undefined");
done();
});
n.receive();
});
it('writes metric info with null msg', function(done){
var n = new RedNode({id:'123',type:'abc'});
n.on('input',function(msg) {
(typeof msg).should.not.be.equal("undefined");
(typeof msg._messageUuid).should.not.be.equal("undefined");
done();
});
n.receive(null);
});
});
describe('#send', function() {
@@ -122,19 +143,16 @@ describe('Node', function() {
var rcvdCount = 0;
n2.on('input',function(msg) {
should.deepEqual(msg,messages[rcvdCount]);
n2.on('input',function(msg) {
if (rcvdCount === 0) {
// first msg sent, don't clone
should.deepEqual(msg,messages[rcvdCount]);
should.strictEqual(msg,messages[rcvdCount]);
rcvdCount += 1;
} else {
// second msg sent, clone
msg.payload.should.equal(messages[rcvdCount].payload);
should.notStrictEqual(msg,messages[rcvdCount]);
}
rcvdCount += 1;
if (rcvdCount === 2) {
flowGet.restore();
done();
}
@@ -160,7 +178,8 @@ describe('Node', function() {
var rcvdCount = 0;
// first message sent, don't clone
// first message sent, don't clone
// message uuids should match
n2.on('input',function(msg) {
should.deepEqual(msg,messages[0]);
should.strictEqual(msg,messages[0]);
@@ -176,8 +195,9 @@ describe('Node', function() {
});
// second message sent, clone
// message uuids wont match since we've cloned
n4.on('input',function(msg) {
should.deepEqual(msg,messages[2]);
msg.payload.should.equal(messages[2].payload);
should.notStrictEqual(msg,messages[2]);
rcvdCount += 1;
if (rcvdCount == 3) {
@@ -187,8 +207,9 @@ describe('Node', function() {
});
// third message sent, clone
// message uuids wont match since we've cloned
n5.on('input',function(msg) {
should.deepEqual(msg,messages[2]);
msg.payload.should.equal(messages[2].payload);
should.notStrictEqual(msg,messages[2]);
rcvdCount += 1;
if (rcvdCount == 3) {
@@ -280,54 +301,84 @@ describe('Node', function() {
});
describe('#log', function() {
it('emits a log message', function(done) {
it('produces a log message', function(done) {
var n = new RedNode({id:'123',type:'abc'});
n.on('log',function(obj) {
should.deepEqual({level:"log", id:n.id,
type:n.type, msg:"a log message"}, obj);
done();
var loginfo = {};
sinon.stub(Log, 'log', function(msg) {
loginfo = msg;
});
n.log("a log message");
should.deepEqual({level:"log", id:n.id,
type:n.type, msg:"a log message", }, loginfo);
Log.log.restore();
done();
});
});
describe('#log', function() {
it('emits a log message with a name', function(done) {
it('produces a log message with a name', function(done) {
var n = new RedNode({id:'123', type:'abc', name:"barney"});
n.on('log',function(obj) {
should.deepEqual({level:"log", id:n.id, name: "barney",
type:n.type, msg:"a log message"}, obj);
done();
var loginfo = {};
sinon.stub(Log, 'log', function(msg) {
loginfo = msg;
});
n.log("a log message");
should.deepEqual({level:"log", id:n.id, name: "barney",
type:n.type, msg:"a log message"}, loginfo);
Log.log.restore();
done();
});
});
describe('#warn', function() {
it('emits a warning', function(done) {
it('produces a warning message', function(done) {
var n = new RedNode({id:'123',type:'abc'});
n.on('log',function(obj) {
should.deepEqual({level:"warn", id:n.id,
type:n.type, msg:"a warning"}, obj);
done();
var loginfo = {};
sinon.stub(Log, 'log', function(msg) {
loginfo = msg;
});
n.warn("a warning");
should.deepEqual({level:"warn", id:n.id,
type:n.type, msg:"a warning"}, loginfo);
Log.log.restore();
done();
});
});
describe('#error', function() {
it('emits an error message', function(done) {
it('produces an error message', function(done) {
var n = new RedNode({id:'123',type:'abc'});
n.on('log',function(obj) {
should.deepEqual({level:"error", id:n.id,
type:n.type, msg:"an error message"}, obj);
done();
var loginfo = {};
sinon.stub(Log, 'log', function(msg) {
loginfo = msg;
});
n.error("an error message");
should.deepEqual({level:"error", id:n.id,
type:n.type, msg:"an error message"}, loginfo);
Log.log.restore();
done();
});
});
describe('#metric', function() {
it('produces a metric message', function(done) {
var n = new RedNode({id:'123',type:'abc'});
var loginfo = {};
sinon.stub(Log, 'log', function(msg) {
loginfo = msg;
});
var msg = {payload:"foo", _messageUuid:"987654321"};
n.metric(msg,"test.metric",{size:"15mb"});
should.deepEqual({size:"15mb", level:"metric", nodeid:n.id,
event:"test.metric",msguuid:"987654321"}, loginfo);
Log.log.restore();
done();
});
});
describe('#status', function() {
after(function() {
comms.publish.restore();