1 | var fs = require('fs')
|
2 | , Stream = require('stream').Stream
|
3 | , clarinet = require('../clarinet')
|
4 | , parse_stream = clarinet.createStream()
|
5 | , previous = ''
|
6 | , buffer = {}
|
7 | , stack = []
|
8 | , new_thing = false
|
9 | ;
|
10 |
|
11 | function debug_log() {
|
12 | if(process.env.DEBUG) {
|
13 | console.log.apply(null, arguments);
|
14 | }
|
15 | }
|
16 |
|
17 | parse_stream.on('openobject', function(name) {
|
18 | if(new_thing) {
|
19 | console.log(JSON.stringify(buffer, null, 2));
|
20 | buffer = {};
|
21 | new_thing = false;
|
22 | }
|
23 | previous = name;
|
24 | stack.push(name);
|
25 | debug_log('=== {', name, buffer);
|
26 | });
|
27 |
|
28 | parse_stream.on('closeobject', function() {
|
29 | stack.pop();
|
30 | debug_log('=== }', null, buffer);
|
31 | });
|
32 |
|
33 | parse_stream.on('key', function(name) {
|
34 | previous = name;
|
35 | stack.pop();
|
36 | stack.push(name);
|
37 | debug_log('=== ,', name, buffer);
|
38 | });
|
39 |
|
40 | parse_stream.on('value', function(value) {
|
41 | if(previous === 'event') {
|
42 | value = JSON.parse(value);
|
43 | }
|
44 | var expected = stack.length-1;
|
45 | stack.reduce(function (ac, x, i) {
|
46 | if(i === expected) {
|
47 | ac[x] = value;
|
48 | }
|
49 | ac[x] = ac[x] || {};
|
50 | return ac[x];
|
51 | }, buffer);
|
52 | debug_log('=== v', value, buffer);
|
53 | });
|
54 |
|
55 | parse_stream.on('error', function (e) {
|
56 | new_thing = true;
|
57 | });
|
58 |
|
59 | function fixLogglyStream() {
|
60 | var log_stream = new Stream();
|
61 | log_stream.readable = true;
|
62 | log_stream.writable = true;
|
63 |
|
64 | log_stream.write = function (buf) {
|
65 | var as_string = buf.toString('utf-8').replace(/\\\\/g, '\\');
|
66 | this.emit('data', as_string);
|
67 | };
|
68 |
|
69 | log_stream.end = function (buf) {
|
70 | if (arguments.length) {
|
71 | log_stream.write(buf);
|
72 | }
|
73 | log_stream.writable = false;
|
74 | };
|
75 |
|
76 | log_stream.destroy = function () {
|
77 | log_stream.writable = false;
|
78 | };
|
79 |
|
80 | return log_stream;
|
81 | }
|
82 |
|
83 | fs.createReadStream(__dirname + '/loggly.txt')
|
84 | .pipe(fixLogglyStream())
|
85 | .pipe(parse_stream)
|
86 | ; |
\ | No newline at end of file |