nsyslog
Version:
Modular new generation log agent. Reads, transform, aggregate, correlate and send logs from sources to destinations
72 lines (68 loc) • 2.27 kB
JavaScript
const
lineReader = require('line-reader'),
moment = require("moment"),
dgram = require('dgram'),
net = require('net'),
program = require("commander");
function sendFile(localAddr, sender) {
lineReader.eachLine(program.file, (line, last, cb)=>{
sender(line,last,line,()=>{
if(program.interval) setTimeout(cb,program.interval);
else cb();
});
});
}
program.version('0.0.1')
.option('-m, --mode [mode]', 'tcp,tcps,udp')
.option('-r, --rfc [rfc]', 'BSD,IETF')
.option('-h, --host [mhost]', 'Syslog Host')
.option('-p, --port [mport]', 'Syslog Port', parseInt)
.option('-f, --file [file]', 'File')
.option('-H, --addr [loacladdr]', 'Local Address')
.option('-n, --name [name]', 'Program name')
.option('-i, --interval [ival]', 'Interval', parseInt)
.option('-P, --priority [priority]', 'Priority', parseInt)
.parse(process.argv);
if(program.mode=="tcp") {
let client = new net.Socket();
client.connect(program.port||514, program.host||"localhost", ()=>{
sendFile(program.addr || client.localAddress,(line,last,raw,cb)=>{
client.write(line,()=>{
console.log("Sent: ",program.host||"localhost",program.port||514,line);
if(last) client.destroy();
cb();
});
});
});
}
else if(program.mode=="tcps") {
sendFile(program.addr || client.localAddress,(line,last,raw,cb)=>{
let client = new net.Socket();
client.connect(program.port||514, program.host||"localhost", ()=>{
client.write(line,()=>{
console.log("Sent: ",program.host||"localhost",program.port||514,line);
client.destroy();
cb();
});
});
});
}
else if(program.mode=="udp"){
let client = dgram.createSocket("udp4");
sendFile(program.addr || client.localAddress,(line,last,raw,cb)=>{
var msg = new Buffer(line);
try {
client.send(msg, 0, msg.length, program.port||514, program.host||"localhost", err=>{
console.log(err);
if(err) client.close();
else console.log("Sent: ",program.host||"localhost",program.port||514,line);
if(last) client.close();
cb();
});
}catch(error) {
console.log(error);
try {client.close();}catch(e){}
client = dgram.createSocket("udp4");
}
});
}