Skip to content

Instantly share code, notes, and snippets.

@Sammons
Created September 25, 2014 05:41
Show Gist options
  • Save Sammons/388dad05ed1563c871ca to your computer and use it in GitHub Desktop.
Save Sammons/388dad05ed1563c871ca to your computer and use it in GitHub Desktop.
Crude file monitor example
var express = require('express');
var clc = require('cli-color');
var fs = require('fs');
var EventEmitter = require('events').EventEmitter;
var util = require('util')
var http = require('http').Server(app);
var io = require('socket.io')(http);
var app = express();
app.use(express.static(__dirname + '/css'));
app.get('/', function(req, res){
res.sendfile('index.html');
});
var FileMonitor = function( path ) {
EventEmitter.call(this);
var fileMonitor = this;
fileMonitor.path = path;
fileMonitor.lastStat = fs.statSync( path );
fileMonitor.lastStringLen = 0;
setInterval(function(){
fs.stat( path, function( err, stat ) {
if (err) fileMonitor.emit('error', err);
if (stat.mtime.getTime() !== fileMonitor.lastStat.mtime.getTime()) {
fileMonitor.lastStat = stat;
fs.readFile( path, function( err, data ) {
if (err) fileMonitor.emit('error', err);
data += '';
if (fileMonitor.lastStringLen < data.length) {
fileMonitor.emit('change', data.substring( fileMonitor.lastStringLen ));
}
else {
fileMonitor.emit('change', 'something was deleted!');
}
fileMonitor.lastStringLen = data.length;
})
}
})
},200);
}
util.inherits( FileMonitor, EventEmitter );
io.on('connection', function(socket){
var client = socket.handshake.address;
console.log(clc.green('<') + ' Accepted connection from ' + clc.bold(client))
socket.on('disconnect', function() {
console.log(clc.green('>') + ' Recieved disconnect from ' + clc.bold(client))
});
});
var fileMon = new FileMonitor( 'test.log' );
fileMon.on( 'change', function(data) {
io.emit('log_msg', data);
})
http.listen(8080, function(){
console.log(clc.cyan.bold('Server running on port 8080'));
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment