Skip to content

Instantly share code, notes, and snippets.

@buroz
Created December 3, 2019 11:45
Show Gist options
  • Save buroz/6829d299f4b3b322cdf43efd28683f1a to your computer and use it in GitHub Desktop.
Save buroz/6829d299f4b3b322cdf43efd28683f1a to your computer and use it in GitHub Desktop.
const dgram = require("dgram");
const EventEmitter = require("events");
let server;
let status = false;
class SyslogServer extends EventEmitter {
constructor() {
super();
}
start(options = { port: 514, address: "0.0.0.0", exclusive: true }, cb) {
return new Promise((resolve, reject) => {
if (status === true) {
let errorObj = createErrorObject(null, "NodeJS Syslog Server is already running!");
if (cb) return cb(errorObj);
return reject(errorObj);
} else {
server = dgram.createSocket("udp4");
// Socket listening handler
server.on("listening", () => {
status = true;
this.emit("start");
});
// Socket error handler
server.on("error", err => {
this.emit("error", err);
});
// Socket message handler
server.on("message", (msg, remote) => {
let message = {
date: new Date(),
host: remote.address,
message: msg.toString("utf8"),
protocol: remote.family
};
this.emit("message", message);
});
// Socket close handler
server.on("close", () => {
status = false;
this.emit("stop");
});
server.bind(options, err => {
if (err) {
let errorObj = createErrorObject(err, "NodeJS Syslog Server failed to start!");
if (cb) return cb(errorObj);
return reject(errorObj);
} else {
if (cb) return cb();
return resolve();
}
});
}
});
}
stop(cb) {
return new Promise((resolve, reject) => {
try {
server.close(() => {
if (cb) return cb();
return resolve();
});
} catch (err) {
let errorObj = createErrorObject(err, "NodeJS Syslog Server is not running!");
if (cb) return cb(errorObj);
return reject(errorObj);
}
});
}
isRunning() {
return status;
}
}
function createErrorObject(err, message) {
return {
date: new Date(),
error: err,
message: message
};
}
const router = new SyslogServer({
address: "0.0.0.0",
port: 514,
exclusive: true
});
router.on("message", value => console.log(value));
router.start();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment