Created
December 19, 2011 16:53
-
-
Save franquis/1497953 to your computer and use it in GitHub Desktop.
Testing FS and Socket.IO
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
var i = 0; | |
var socket = io.connect('http://127.0.0.1:8000'); | |
/* | |
* data = [{'log':'path/to/log1','result':'/path/to/result1'},{'log':'path/to/log2','result':'/path/to/result2'}]; | |
*/ | |
//Asking for files content | |
var send = function(){ | |
//Asking for the path/to/files1 and then path/to/files2 | |
if(i < (data.length)){ | |
socket.emit('init',data[i]); | |
} else { | |
socket.emit('disconnect'); | |
} | |
}; | |
socket.on('connect', function(server) { | |
//On connect, ask for files | |
send(); | |
}); | |
socket.on('tail', function(message) { | |
//Do stuff when the LOG file changes. | |
//$('.output').append(message.data)... | |
}); | |
socket.on('status',function(message){ | |
if(message.status == true){ | |
//Do stuff if the RESULT file contains TRUE | |
} else { | |
//Do stuff if the RESULT file contains FALSE | |
} | |
//Asking for the next couple of files... | |
i = message.id + 1; | |
send(); | |
}); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
var app = require('http').createServer(handler), | |
io = require('socket.io').listen(app), | |
url = require('url'), | |
path = require('path'), | |
fs = require('fs'); | |
app.listen(8000); | |
util.puts('> Server Running on port 8000'); | |
function handler(req,res){ | |
//... | |
} | |
io.sockets.on('connection', function (client) { | |
//On 'Init' event, read the Result and the Log File | |
client.on('init',function(host){ | |
//Dont know how to make it clean | |
readResult(host, function(err, data){ | |
if(err){ | |
errorHandler(err); | |
} else { | |
client.emit('status',data); | |
//I need to stop both read***() functions... | |
}; | |
}); | |
readLog(host, function(err, data){ | |
if(err){ | |
errorHandler(err); | |
} else { | |
client.emit('tail',data); | |
} | |
}); | |
}); | |
client.on('disconnect', function () { | |
console.log("Disconnected!"); | |
}); | |
}); | |
function errorHandler(error) { | |
console.log(error); | |
throw error; | |
} | |
function readResult(DATA,callback){ | |
console.log(' >> readResult('+DATA.host+');'); | |
var status; | |
var resultfile = path.join(path.normalize(DATA.path), DATA.type, DATA.host, DATA.node,"RESULT.txt"); | |
var w = fs.watch(resultfile,function(filestatus, file){ | |
console.log(' readResult(): listenning...'); | |
if(filestatus == "change"){ | |
console.log(' readResult(): File changed'); | |
fs.readFile(resultfile, "utf8", function (err, body) { | |
if (err) { | |
if (error.errno === process.ENOENT) { | |
callback(null, ""); | |
} else { | |
callback(err); | |
} | |
} else { | |
if (body.match(/Done.*?/)) { | |
status = true; | |
console.log(" #"+DATA.i+" Done"); | |
} else if (body.match(/Error.*?/)) { | |
status = false; | |
console.log(" #"+DATA.i+" Error"); | |
} | |
callback(null, {'id':DATA.i,'host':DATA.host,'status':status}); | |
console.log(' << readResult('+DATA.host+');'); | |
} | |
}); | |
} | |
}); | |
} | |
function readLog(DATA, callback){ | |
console.log(' >> readLog('+DATA.nm+');'); | |
var logfile = path.join(path.normalize(DATA.path), DATA.type, DATA.nm, DATA.node,"LOG.txt"); | |
var curr_size = 0; | |
var w = fs.watch(logfile,function(status, file){ | |
fs.stat(logfile,function(err,stats){ | |
if (err) { | |
if (error.errno === process.ENOENT) { | |
callback(null, ""); | |
console.log(' logFile() > File not found'); | |
} else { | |
/ | |
callback(err); | |
} | |
} else if(stats.size == 0){ | |
//DoSomeThing. | |
} else if(stats.size < curr_size){ | |
var start = stats.size - curr_size; | |
} else { | |
var start = curr_size; | |
} | |
stream = fs.createReadStream(logfile, { start: start, end: stats.size}); | |
stream.addListener("data", function(lines) { | |
callback(null, {'id':DATA.i,'host': DATA.host, 'tail' : lines.toString('utf-8').split("\n")}); | |
}); | |
curr_size = stats.size; | |
}); | |
}); | |
} | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment