fluent-logger
Advanced tools
Comparing version 0.1.0 to 0.2.0
var util = require('util'); | ||
var EventEmitter = require('events').EventEmitter; | ||
var pack = require('../vendor/uupa-js/msgpack').pack; | ||
var pack = require('msgpack').pack; | ||
var net = require('net'); | ||
@@ -14,2 +14,3 @@ | ||
this.verbose = this.verbose || false; | ||
this._timeResolution = options.milliseconds ? 1 : 1000; | ||
this._socket = null; | ||
@@ -64,3 +65,3 @@ this._sendQueue = []; // queue for items waiting for being sent. | ||
var tag = [self.tag, label].join('.'); | ||
var time = (new Date()).getTime() / 1000; | ||
var time = (new Date()).getTime() / this._timeResolution; | ||
var packet = [tag, time, data]; | ||
@@ -67,0 +68,0 @@ return { |
var net = require('net'); | ||
var fs = require('fs'); | ||
var spawn = require('child_process').spawn; | ||
var configPath = require('path').join(__dirname, '../test/fluent-config/fluent.conf'); | ||
var fluentdPath = process.env['FLUENTD_PATH'] || "fluentd"; | ||
var fluentd = null; | ||
var msgpack = require('msgpack'); | ||
function spawnFluentDaemon(callback){ | ||
var s = net.createServer(); | ||
// grab a random port | ||
s.listen(function(){ | ||
var port = s.address().port; | ||
var configPath = '/tmp/fluent-logger-node-test.' + port + '.conf'; | ||
s.on('close', function(){ | ||
var data = ["<source>", | ||
"type forward", | ||
"port " + port, | ||
"</source>", | ||
"<match debug.**>", | ||
"type stdout", | ||
"</match>"].join('\n'); | ||
fs.writeFileSync(configPath, data); | ||
var fluentd = spawn(fluentdPath, ['-c', configPath]); | ||
process.on('exit', function(){ | ||
if( fluentd && fluentd.exitCode === null ){ | ||
console.error('fluentd process remains. force to kill.'); | ||
try{ | ||
fluentd.kill(); | ||
}catch(e){ | ||
console.error(e); | ||
} | ||
} | ||
function MockFluentdServer(){ | ||
var self = this; | ||
this._port = null; | ||
this._received = []; | ||
this._server = net.createServer(function(socket){ | ||
var ms = new msgpack.Stream(socket); | ||
ms.on('msg', function(m){ | ||
self._received.push({ | ||
tag: m[0], | ||
time: m[1], | ||
data: m[2] | ||
}); | ||
callback(port, fluentd); | ||
}); | ||
s.close(); | ||
}); | ||
} | ||
module.exports = { | ||
/** | ||
* fluentd process utility | ||
* | ||
* fluentd(function(port, end){ | ||
* // send contents to port | ||
* // ... | ||
* | ||
* end(function(receivedData){ | ||
* // check receivedData array | ||
* receivedData[i].tag // -> tag | ||
* receivedData[i].record // -> tag | ||
* }); | ||
* | ||
* }); | ||
* | ||
*/ | ||
MockFluentdServer.prototype.__defineGetter__('port', function(){ | ||
return this._port; | ||
}); | ||
fluentd: function(ready){ | ||
spawnFluentDaemon(function(port, fluentd){ | ||
var lines = []; | ||
var s = ""; | ||
function finish(callback){ | ||
fluentd.kill(); | ||
fluentd.on('exit', function(){ | ||
callback(lines); | ||
}); | ||
}; | ||
MockFluentdServer.prototype.__defineGetter__('messages', function(){ | ||
return this._received; | ||
}); | ||
fluentd.stdout.on('data', function(data){ | ||
// process.stdout.write(data.toString()); | ||
s += data.toString(); | ||
if( s.indexOf('\n') > 0 ){ | ||
var l = s.split('\n'); // line0, line1, ..., chunk | ||
var line = ''; | ||
for(var i=0; i < l.length - 1; i++){ | ||
line = l[i]; | ||
if( line.match(/listening fluent socket/ig) ){ | ||
process.nextTick(function(){ | ||
ready(port, finish); | ||
}); | ||
} | ||
if( line.match(/^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2} \+\d{4} (.+): (.+)$/) ){ | ||
try{ | ||
lines.push({ | ||
tag: RegExp.$1, data: JSON.parse(RegExp.$2) | ||
}); | ||
}catch(e){ | ||
console.error(e + ' ' + RegExp.$2); | ||
} | ||
} | ||
} | ||
s = l[l.length-1]; | ||
} | ||
MockFluentdServer.prototype.listen = function(callback){ | ||
var self = this; | ||
this._server.listen(function(){ | ||
self._port = self._server.address().port; | ||
callback(); | ||
}); | ||
}; | ||
MockFluentdServer.prototype.close = function(){ | ||
this._server.close(); | ||
this._port = null; | ||
this._received = []; | ||
}; | ||
module.exports = { | ||
runServer: function(callback){ | ||
var server = new MockFluentdServer(); | ||
server.listen(function(){ | ||
callback(server, function(_callback){ | ||
// wait 100 ms and then close | ||
setTimeout(function(){ | ||
var messages = server.messages; | ||
_callback(messages); | ||
server.close(); | ||
}, 100); | ||
}); | ||
fluentd.stderr.on('data', function(data){ | ||
console.error(data.toString());; | ||
}); | ||
}); | ||
} | ||
}; |
{ | ||
"name": "fluent-logger", | ||
"version": "0.1.0", | ||
"version": "0.2.0", | ||
"main": "./lib/index.js", | ||
"scripts": { | ||
"test": "./node_modules/.bin/mocha --recursive" | ||
}, | ||
"author": { | ||
@@ -17,5 +20,7 @@ "name": "Yohei Sasaki", | ||
"chai": "", | ||
"log4js": "" | ||
"log4js": "", | ||
"async": "", | ||
"msgpack": "" | ||
}, | ||
"keywords": ["logger", "fluent"] | ||
} |
var expect = require('chai').expect; | ||
var log4jsSupport = require('../lib/log4js'); | ||
var log4js = require('log4js'); | ||
var fluentd = require('../lib/testHelper').fluentd; | ||
var runServer = require('../lib/testHelper').runServer; | ||
@@ -23,4 +23,4 @@ log4js.restoreConsole(); | ||
it('should send log records', function(done){ | ||
fluentd(function(port, finish){ | ||
var appender = log4jsSupport.appender('debug', {port: port}); | ||
runServer(function(server, finish){ | ||
var appender = log4jsSupport.appender('debug', {port: server.port}); | ||
log4js.addAppender(appender); | ||
@@ -27,0 +27,0 @@ var logger = log4js.getLogger('mycategory'); |
var expect = require('chai').expect; | ||
var sender = require('../lib/sender'); | ||
var fluentd = require('../lib/testHelper').fluentd; | ||
var runServer = require('../lib/testHelper').runServer; | ||
var async = require('async'); | ||
describe("FluentSender", function(){ | ||
it('shoud send records', function(done){ | ||
fluentd(function(port, finish){ | ||
var s1 = new sender.FluentSender('debug', { port: port }); | ||
it('should send records', function(done){ | ||
runServer(function(server, finish){ | ||
var s1 = new sender.FluentSender('debug', { port: server.port }); | ||
var emits = []; | ||
function emit(k){ | ||
emits.push(function(done){ s1.emit('record', k, done); }); | ||
} | ||
for(var i=0; i<10; i++){ | ||
(function(k){ | ||
emits.push(function(done){ s1.emit('record', k, done); }); | ||
})(i); | ||
emit(i); | ||
} | ||
@@ -44,4 +45,4 @@ emits.push(function(){ | ||
it('should assure the sequence.', function(done){ | ||
fluentd(function(port, finish){ | ||
var s = new sender.FluentSender('debug', {port: port}); | ||
runServer(function(server, finish){ | ||
var s = new sender.FluentSender('debug', {port: server.port}); | ||
s.emit('1st record', '1st data'); | ||
@@ -68,4 +69,4 @@ s.emit('2nd record', '2nd data'); | ||
expect(err.code).to.be.equal('ECONNREFUSED'); | ||
fluentd(function(port, finish){ | ||
s.port = port; | ||
runServer(function(server, finish){ | ||
s.port = server.port; | ||
s.emit('2nd record', '2nd data'); | ||
@@ -85,3 +86,3 @@ s.end('last record', 'last data', function(){ | ||
}); | ||
}); | ||
}); | ||
}); |
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
Found 1 instance in 1 package
Shell access
Supply chain riskThis module accesses the system shell. Accessing the system shell increases the risk of executing arbitrary code.
Found 1 instance in 1 package
Environment variable access
Supply chain riskPackage accesses environment variables, which may be a sign of credential stuffing or data theft.
Found 1 instance in 1 package
1
12014
5
9
341