UNPKG

1.85 kBJavaScriptView Raw
1var 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
11function debug_log() {
12 if(process.env.DEBUG) {
13 console.log.apply(null, arguments);
14 }
15}
16
17parse_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
28parse_stream.on('closeobject', function() {
29 stack.pop();
30 debug_log('=== }', null, buffer);
31});
32
33parse_stream.on('key', function(name) {
34 previous = name;
35 stack.pop();
36 stack.push(name);
37 debug_log('=== ,', name, buffer);
38});
39
40parse_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
55parse_stream.on('error', function (e) {
56 new_thing = true;
57});
58
59function 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
83fs.createReadStream(__dirname + '/loggly.txt')
84 .pipe(fixLogglyStream())
85 .pipe(parse_stream)
86 ;
\No newline at end of file