Skip to content

Instantly share code, notes, and snippets.

@ohlol
Created January 18, 2013 02:24
Show Gist options
  • Save ohlol/4561855 to your computer and use it in GitHub Desktop.
Save ohlol/4561855 to your computer and use it in GitHub Desktop.
logstashServer = 'localhost'
, logstashPort = 59595
var app = require('http').createServer(handler)
, io = require('socket.io').listen(app)
, net = require('net')
, logstream = net.connect(logstashPort, logstashServer)
, logBuffer = ''
, subscribers = []
app.listen(8000)
function LogstreamClient(socket, filters) {
this.socket = socket
this.filters = filters
}
function handler(req, res) {
if (req.url.length > 1) {
var filter = req.url.substring(1)
var streamHtmlHead = '<html><head><script src="/socket.io/socket.io.js"></script><script>var socket=io.connect("http://' +
req.headers.host + '");'
var streamHtmlBody = '<body><div id="messages"></body></html>'
res.writeHead(200)
out = streamHtmlHead + 'socket.emit("subscribe", "' +
filter + '"); socket.on("message", function (data) { var div = document.getElementById("messages");' +
'div.innerHTML = div.innerHTML + "<p>" + data + "</p>" })</script></head>' +
streamHtmlBody
} else {
out = 'Please specify a query.'
}
res.end(out)
}
io.sockets.on('connection', function (socket) {
socket.on('subscribe', function(filters) {
subscribers.push(new LogstreamClient(socket, filters))
})
})
logstream.on('data', function(data) {
line = data.toString()
logBuffer = parseBuffer(logBuffer + line)
});
function parseBuffer(buf) {
if (buf.indexOf("\n") >= 0) {
var lines = buf.split("\n")
for(var i = 0; i < lines.length; i++) {
if (lines[i].indexOf("}", lines[i].length - 1) !== -1) {
subscribers.map(function(sub) {
regex = new RegExp(sub.filters, 'ig')
if (regex.test(lines[i])) {
sub.socket.emit('message', lines[i])
}
})
}
}
return lines[lines.length-1]
} else {
return buf
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment