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();
  });
});