UNPKG

bunyan-prettystream

Version:

A stream implementation of the bunyan cli tool's pretty printing capabilities

139 lines (119 loc) 6.35 kB
'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(); }); });