Socket
Socket
Sign inDemoInstall

pino-socket

Package Overview
Dependencies
Maintainers
1
Versions
23
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

pino-socket - npm Package Compare versions

Comparing version 0.1.2 to 0.2.0

changelog.md

12

app.js
#!/usr/bin/env node
'use strict';
'use strict'
const path = require('path');
const fs = require('fs');
const realPath = fs.realpathSync(__dirname);
const script = path.join(realPath, 'psock.js');
const path = require('path')
const fs = require('fs')
const realPath = fs.realpathSync(__dirname)
const script = path.join(realPath, 'psock.js')
require(script.toString());
require(script.toString())

@@ -1,5 +0,5 @@

'use strict';
'use strict'
const gulp = require('gulp');
const $ = require('gulp-load-plugins')();
const gulp = require('gulp')
const $ = require('gulp-load-plugins')()

@@ -9,28 +9,26 @@ const srcIncludes = [

'!node_modules/**',
'!coverage/**',
'!test/**' // tests can be wonky
];
'!coverage/**'
]
gulp.task('lint', function lintTask() {
gulp.task('lint', function lintTask () {
return gulp
.src(srcIncludes)
.pipe($.eslint())
.pipe($.eslint.formatEach())
.pipe($.eslint.failAfterError());
});
.pipe($.standard())
.pipe($.standard.reporter('default', { breakOnError: true }))
})
gulp.task('pre-test', function preTest() {
gulp.task('pre-test', function preTest () {
return gulp
.src(srcIncludes)
.src(srcIncludes.concat(['!test/**']))
.pipe($.istanbul())
.pipe($.istanbul.hookRequire());
});
.pipe($.istanbul.hookRequire())
})
gulp.task('test', ['lint', 'pre-test'], function testTask() {
gulp.task('test', ['lint', 'pre-test'], function testTask () {
return gulp
.src(['test/*.js'])
.pipe($.mocha({ui: 'qunit', reporter: 'min'}))
.pipe($.istanbul.writeReports());
});
.pipe($.istanbul.writeReports())
})
gulp.task('default', ['test']);
gulp.task('default', ['test'])
{
"name": "pino-socket",
"version": "0.1.2",
"version": "0.2.0",
"description": "A pino 'transport' for writing to a tcp or udp socket",

@@ -30,9 +30,11 @@ "homepage": "https://github.com/jsumners/pino-socket",

"gulp": "^3.9.1",
"gulp-eslint": "^2.0.0",
"gulp-istanbul": "^0.10.4",
"gulp-load-plugins": "^1.2.2",
"gulp-mocha": "^2.2.0",
"gulp-standard": "^7.0.1",
"istanbul": "^0.4.3",
"mocha": "^2.4.5",
"pino": "^2.4.0"
"pino": "^2.4.0",
"pre-commit": "^1.1.3",
"standard": "^7.1.0"
},

@@ -39,0 +41,0 @@ "dependencies": {

@@ -1,9 +0,9 @@

'use strict';
'use strict'
const net = require('net');
const dgram = require('dgram');
const split2 = require('split2');
const pump = require('pump');
const through2 = require('through2');
const nopt = require('nopt');
const net = require('net')
const dgram = require('dgram')
const split2 = require('split2')
const pump = require('pump')
const through2 = require('through2')
const nopt = require('nopt')

@@ -14,20 +14,59 @@ let options = {

port: '514',
echo: true
};
const argv = nopt(
{address: String, mode: ['tcp', 'udp'], port: Number, echo: Boolean},
{a: '--address', m: '--mode', p: '--port', e: '--echo', ne: '--no-echo'},
process.argv
);
options = Object.assign(options, argv);
echo: true,
cee: false
}
const longOpts = {
address: String,
mode: ['tcp', 'udp'],
port: Number,
echo: Boolean,
cee: Boolean
}
const shortOpts = {
a: '--address',
m: '--mode',
p: '--port',
e: '--echo',
ne: '--no-echo',
c: '--cee',
nc: '--no-cee'
}
const argv = nopt(longOpts, shortOpts, process.argv)
options = Object.assign(options, argv)
/* eslint func-names: "off" */
/* eslint space-before-function-paren: "off" */
/* eslint no-empty-function: "off" */
/* eslint space-before-blocks: "off" */
const log = (options.echo) ? console.log : function(){};
const log = (options.echo) ? console.log : function () {}
let socket;
let send;
let close;
function TcpWriter (socket) {
if (options.cee) {
Object.defineProperty(this, 'write', {
value: (message) => socket.write(`@cee: ${message}\n`)
})
} else {
Object.defineProperty(this, 'write', {
value: (message) => socket.write(`${message}\n`)
})
}
}
function UdpWriter (socket) {
if (options.cee) {
Object.defineProperty(this, 'write', {
value: (message) => {
const buf = new Buffer(`@cee: ${message}\n`, 'utf8')
socket.send(buf, 0, buf.length, options.port, options.address)
}
})
} else {
Object.defineProperty(this, 'write', {
value: (message) => {
const buf = new Buffer(`${message}\n`, 'utf8')
socket.send(buf, 0, buf.length, options.port, options.address)
}
})
}
}
let socket
let send
let close
if (options.mode === 'tcp') {

@@ -37,33 +76,24 @@ socket = net.createConnection({

port: options.port
});
send = (message) => {
socket.write(message + '\n');
};
close = socket.end;
})
const writer = new TcpWriter(socket)
send = writer.write
close = socket.end
} else {
socket = dgram.createSocket('udp4');
send = (message) => {
const buf = new Buffer(message + '\n');
socket.send(
buf,
0,
buf.length,
options.port,
options.address
);
};
close = socket.close;
socket = dgram.createSocket('udp4')
const writer = new UdpWriter(socket)
send = writer.write
close = socket.close
}
let lastInput = 0;
function shutdown() {
let lastInput = 0
function shutdown () {
// We block termination until the piped process has had a chance to shutdown.
let _lastInput = lastInput;
lastInput = 0;
let _lastInput = lastInput
lastInput = 0
while (_lastInput !== lastInput) {
_lastInput = lastInput;
lastInput = 0;
_lastInput = lastInput
lastInput = 0
}
try {
close();
close()
} catch (e) {

@@ -73,19 +103,19 @@ // I assume that due to the closing of the pipe, the dgram/tcp socket has

// this try/catch is here to suppress the resulting error.
process.exit();
process.exit()
}
}
process.on('SIGINT', function sigint() {
shutdown();
});
process.on('SIGTERM', function sigterm() {
shutdown();
});
process.on('SIGINT', function sigint () {
shutdown()
})
process.on('SIGTERM', function sigterm () {
shutdown()
})
const myTransport = through2.obj(function transport(chunk, enc, cb) {
lastInput = Date.now();
log(chunk);
send(chunk);
cb();
});
const myTransport = through2.obj(function transport (chunk, enc, cb) {
lastInput = Date.now()
setImmediate(log.bind(null, chunk))
setImmediate(() => send(chunk))
cb()
})
pump(process.stdin, split2(), myTransport);
pump(process.stdin, split2(), myTransport)

@@ -7,3 +7,3 @@ # pino-socket

You should install install `pino-socket` globally for ease of use:
You should install `pino-socket` globally for ease of use:

@@ -33,5 +33,10 @@ ```bash

+ `--no-echo` (`-ne`): disable echoing received messages to stdout.
+ `--cee` (`-c`): prefix the message with `@cee: ` for [rsyslog cee][rsyscee]
support. Default: disabled.
+ `--no-cee` (`-nc`): explicitly disable CEE prefixing
[rsyscee]: http://www.rsyslog.com/doc/mmjsonparse.html
## License
[MIT License](http://jsumners.mit-license.org/)

@@ -1,6 +0,6 @@

'use strict';
'use strict'
const pino = require('pino');
const log = pino({level: 'debug'});
const pino = require('pino')
const log = pino({ level: 'debug' })
log.debug({foo: 'bar'});
log.debug({ foo: 'bar' })

@@ -1,90 +0,146 @@

'use strict';
'use strict'
/* eslint-env node, mocha */
const dgram = require('dgram');
const net = require('net');
const spawn = require('child_process').spawn;
const expect = require('chai').expect;
const dgram = require('dgram')
const net = require('net')
const spawn = require('child_process').spawn
const expect = require('chai').expect
function createTcpListener(msgHandler) {
function createTcpListener (msgHandler) {
return new Promise((resolve, reject) => {
const socket = net.createServer((connection) => {
connection.on('data', (data) => msgHandler(data.toString()));
});
connection.on('data', (data) => msgHandler(data.toString()))
})
socket.listen((err) => {
if (err) {
return reject(err);
return reject(err)
}
return resolve(socket);
});
});
return resolve(socket)
})
})
}
function createUdpListener(msgHandler) {
function createUdpListener (msgHandler) {
return new Promise((resolve) => {
const socket = dgram.createSocket('udp4');
socket.on('message', (msg) => msgHandler(msg.toString()));
socket.on('error', (err) => console.log(`socket error: ${err.message}`));
socket.bind({address: '127.0.0.1'}, () => resolve(socket));
});
const socket = dgram.createSocket('udp4')
socket.on('message', (msg) => msgHandler(msg.toString()))
socket.on('error', (err) => console.log(`socket error: ${err.message}`))
socket.bind({address: '127.0.0.1'}, () => resolve(socket))
})
}
test('tcp send', function tcp(done) {
let socket;
createTcpListener(
(msg) => {
try {
expect(msg).to.contain('"foo":"bar"');
expect(msg.substr(-1)).to.equal('\n');
done();
} catch (e) {
done(e);
} finally {
socket.close();
}
}
)
function tcpTest (done, socketOptions, cb) {
let socket
createTcpListener((msg) => cb(msg, socket))
.then((sock) => {
socket = sock;
const address = socket.address().address;
const port = socket.address().port;
const logit = spawn('node', [`${__dirname}/fixtures/logit.js`]);
const psock = spawn('node', [`${__dirname}/../psock.js`, '-a', address, '-p', port, '-m', 'tcp']);
socket = sock
const address = socket.address().address
const port = socket.address().port
const logit = spawn('node', [`${__dirname}/fixtures/logit.js`])
const psock = spawn(
'node',
[`${__dirname}/../psock.js`, '-a', address, '-p', port, '-m', 'tcp'].concat(socketOptions)
)
logit.stdout.on('data', (data) => psock.stdin.write(data));
logit.stderr.on('data', (data) => console.log(`logit err: ${data}`));
psock.stderr.on('data', (data) => console.log(`psock err: ${data}`));
logit.stdout.on('data', (data) => psock.stdin.write(data))
logit.stderr.on('data', (data) => console.log(`logit err: ${data}`))
psock.stderr.on('data', (data) => console.log(`psock err: ${data}`))
logit.on('close', () => psock.stdin.end());
logit.on('close', () => psock.stdin.end(
setImmediate.bind(null, psock.kill)
))
})
.catch(done);
});
.catch(done)
}
test('udp send', function udp(done) {
let socket;
createUdpListener(
(msg) => {
try {
expect(msg).to.contain('"foo":"bar"');
expect(msg.substr(-1)).to.equal('\n');
done();
} catch (e) {
done(e);
} finally {
socket.close();
}
}
)
function udpTest (done, socketOptions, cb) {
let socket
createUdpListener((msg) => cb(msg, socket))
.then((sock) => {
socket = sock;
const address = socket.address().address;
const port = socket.address().port;
const logit = spawn('node', [`${__dirname}/fixtures/logit.js`]);
const psock = spawn('node', [`${__dirname}/../psock.js`, '-a', address, '-p', port]);
socket = sock
const address = socket.address().address
const port = socket.address().port
const logit = spawn('node', [`${__dirname}/fixtures/logit.js`])
const psock = spawn(
'node',
[`${__dirname}/../psock.js`, '-a', address, '-p', port].concat(socketOptions)
)
logit.stdout.on('data', (data) => psock.stdin.write(data));
logit.stderr.on('data', (data) => console.log(`logit err: ${data}`));
psock.stderr.on('data', (data) => console.log(`psock err: ${data}`));
logit.stdout.on('data', (data) => psock.stdin.write(data))
logit.stderr.on('data', (data) => console.log(`logit err: ${data}`))
psock.stderr.on('data', (data) => console.log(`psock err: ${data}`))
logit.on('close', () => psock.stdin.end());
});
});
logit.on('close', () => psock.stdin.end(
setImmediate.bind(null, psock.kill)
))
})
.catch(done)
}
test('tcp send', function tcp (done) {
tcpTest(done, [], (msg, socket) => {
try {
expect(msg).to.contain('"foo":"bar"')
expect(msg.substr(-1)).to.equal('\n')
done()
} catch (e) {
done(e)
} finally {
socket.end()
socket.unref()
}
})
})
test('tcp cee send', function tcpCee (done) {
tcpTest(done, ['--cee'], (msg, socket) => {
try {
expect(msg).to.contain('@cee: {')
expect(msg).to.contain('"foo":"bar"')
expect(msg.substr(-1)).to.equal('\n')
done()
} catch (e) {
done(e)
} finally {
socket.end()
socket.unref()
}
})
})
test('udp send', function udp (done) {
udpTest(done, [], (msg, socket) => {
try {
expect(msg).to.contain('"foo":"bar"')
expect(msg.substr(-1)).to.equal('\n')
done()
} catch (e) {
done(e)
} finally {
socket.close()
socket.unref()
}
})
})
test('udp cee send', function tcpCee (done) {
udpTest(done, ['-c'], (msg, socket) => {
try {
expect(msg).to.contain('@cee: {')
expect(msg).to.contain('"foo":"bar"')
expect(msg.substr(-1)).to.equal('\n')
done()
} catch (e) {
done(e)
} finally {
socket.close()
socket.unref()
}
})
})
// This ridiculousness is because when the tests are run via
// gulp.mocha there's something that causes it to run idefinitely.
// It doesn't matter that we have close all of the sockets and killed all
// of the children.
after(function () { setImmediate(process.exit) })
SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc