File size: 6,349 Bytes
befd7da |
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 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 |
'use strict';
var blanket = require("blanket")({
"pattern": "/lib/prettystream.js"
});
var PrettyStream = require('..');
var Stream = require('stream');
var should = require("should");
var util = require('util');
function TestStream(test, done){
Stream.call(this);
this.readable = true;
this.writable = true;
this.test = test;
this.done = done;
}
util.inherits(TestStream, Stream);
TestStream.prototype.write = function write(data){
this.test(data);
this.emit('data', data);
return true;
};
TestStream.prototype.end = function end(){
this.emit('end');
if (this.done){
this.done();
}
};
var simpleRecord = {
name:"myservice",
pid:123,
hostname:"example.com",
level:30,
msg:"My message",
time:"2012-02-08T22:56:52.856Z",
v:0};
var extraFieldRecord = {
name: "myservice",
pid: 123,
hostname:"example.com",
level:30,
extra:"field",
msg:"My message",
time:"2012-02-08T22:56:52.856Z",
v:0};
var undefinedFields = {
name: "myservice",
pid: 123,
hostname:"example.com",
level:30,
msg:"My message",
time:"2012-02-08T22:56:52.856Z",
defined: undefined,
v:0};
var simpleReqRecord = {"name":"amon-master","hostname":"9724a190-27b6-4fd8-830b-a574f839c67d","pid":12859,"route":"HeadAgentProbes","req_id":"cce79d15-ffc2-487c-a4e4-e940bdaac31e","level":20,"contentMD5":"11FxOYiYfpMxmANj4kGJzg==","msg":"headAgentProbes respond","time":"2012-08-08T10:25:47.636Z","v":0};
var detailedReqResRecord = {"name":"amon-master","hostname":"9724a190-27b6-4fd8-830b-a574f839c67d","pid":12859,"audit":true,"level":30,"remoteAddress":"10.2.207.2","remotePort":50394,"req_id":"cce79d15-ffc2-487c-a4e4-e940bdaac31e","req":{"method":"HEAD","url":"/agentprobes?agent=ccf92af9-0b24-46b6-ab60-65095fdd3037","headers":{"accept":"application/json","content-type":"application/json","host":"10.2.207.16","connection":"keep-alive"},"httpVersion":"1.1","trailers":{},"version":"*"},"res":{"statusCode":200,"headers":{"content-md5":"11FxOYiYfpMxmANj4kGJzg==","access-control-allow-origin":"*","access-control-allow-headers":"Accept, Accept-Version, Content-Length, Content-MD5, Content-Type, Date, X-Api-Version","access-control-allow-methods":"HEAD","access-control-expose-headers":"X-Api-Version, X-Request-Id, X-Response-Time","connection":"Keep-Alive","date":"Wed, 08 Aug 2012 10:25:47 GMT","server":"Amon Master/1.0.0","x-request-id":"cce79d15-ffc2-487c-a4e4-e940bdaac31e","x-response-time":3},"trailer":false},"route":{"name":"HeadAgentProbes","version":false},"latency":3,"secure":false,"_audit":true,"msg":"HeadAgentProbes handled: 200","time":"2012-08-08T10:25:47.637Z","v":0};
describe('A PrettyStream', function(){
it('should pretty print simple uncolored log statments', function(){
var prettyStream = new PrettyStream({useColor: false});
var result = prettyStream.formatRecord(simpleRecord);
result.should.equal('[2012-02-08T22:56:52.856Z] INFO: myservice/123 on example.com: My message\n');
});
it('should pretty print uncolored log statments with extra fields', function(){
var prettyStream = new PrettyStream({useColor: false});
var result = prettyStream.formatRecord(extraFieldRecord);
result.should.equal('[2012-02-08T22:56:52.856Z] INFO: myservice/123 on example.com: My message (extra=field)\n');
});
it('should print undefined fields as empty strings', function(){
var prettyStream = new PrettyStream({useColor: false});
var result = prettyStream.formatRecord(undefinedFields);
result.should.equal('[2012-02-08T22:56:52.856Z] INFO: myservice/123 on example.com: My message (defined="")\n');
});
it('should pretty print colored log statments', function(){
var prettyStream = new PrettyStream({useColor: true});
var result = prettyStream.formatRecord(simpleRecord);
result.should.equal('[\u001b[37m2012-02-08T22:56:52.856Z\u001b[39m] \u001b[36m INFO\u001b[39m: myservice/123 on example.com: \u001b[36mMy message\u001b[39m\n');
});
it('should pretty print simple request log statments', function(){
var prettyStream = new PrettyStream({useColor: false});
var result = prettyStream.formatRecord(simpleReqRecord);
result.should.equal('[2012-08-08T10:25:47.636Z] DEBUG: amon-master/12859 on 9724a190-27b6-4fd8-830b-a574f839c67d: headAgentProbes respond (route=HeadAgentProbes, req_id=cce79d15-ffc2-487c-a4e4-e940bdaac31e, contentMD5=11FxOYiYfpMxmANj4kGJzg==)\n');
});
it('should pretty print detailed request and response log statments', function(){
var prettyStream = new PrettyStream({useColor: false});
var result = prettyStream.formatRecord(detailedReqResRecord);
var expected = [ '[2012-08-08T10:25:47.637Z] INFO: amon-master/12859 on 9724a190-27b6-4fd8-830b-a574f839c67d: HeadAgentProbes handled: 200 (req.version=*, audit=true, remoteAddress=10.2.207.2, remotePort=50394, req_id=cce79d15-ffc2-487c-a4e4-e940bdaac31e, latency=3, secure=false, _audit=true)',
' HEAD /agentprobes?agent=ccf92af9-0b24-46b6-ab60-65095fdd3037 HTTP/1.1',
' accept: application/json',
' content-type: application/json',
' host: 10.2.207.16',
' connection: keep-alive',
' --',
' HTTP/1.1 200 OK',
' content-md5: 11FxOYiYfpMxmANj4kGJzg==',
' access-control-allow-origin: *',
' access-control-allow-headers: Accept, Accept-Version, Content-Length, Content-MD5, Content-Type, Date, X-Api-Version',
' access-control-allow-methods: HEAD',
' access-control-expose-headers: X-Api-Version, X-Request-Id, X-Response-Time',
' connection: Keep-Alive',
' date: Wed, 08 Aug 2012 10:25:47 GMT',
' server: Amon Master/1.0.0',
' x-request-id: cce79d15-ffc2-487c-a4e4-e940bdaac31e',
' x-response-time: 3',
' --',
' route: {',
' "name": "HeadAgentProbes",',
' "version": false',
' }'].join('\n') + "\n";
result.should.equal(expected);
});
it('should work as a stream', function(done){
var prettyStream = new PrettyStream({useColor: false});
var test = function(data){
data.should.equal('[2012-02-08T22:56:52.856Z] INFO: myservice/123 on example.com: My message\n');
};
prettyStream.pipe(new TestStream(test, done));
prettyStream.write(simpleRecord);
prettyStream.end();
});
});
|