Files
statist/plugins/fromlog/index.js

110 lines
2.5 KiB
JavaScript

var path = require('path');
var datadefinition;
var filepath;
var counterpath;
var data = {};
var fs = require('fs'),
bite_size = 4096,
save_interval_or_retry,
filereadbytes,
tempdata = "",
fd;
function init(file,logic,idle){
delete require.cache[require.resolve('../../config/fromlog/datadefinitions/' + logic)];
datadefinition = require('../../config/fromlog/datadefinitions/' + logic);
save_interval_or_retry = idle;
filepath = path.resolve(__dirname, '../../config/fromlog/logs/' + file);
fs.readFile(filepath,function(err, content){
if (err){
filereadbytes = 0;
}else{
filereadbytes = parseInt(content);
if (isNaN(filereadbytes)){
filereadbytes = 0;
}
}
var oldfilereadbytes = filereadbytes;
setInterval(function(){
if (filereadbytes != oldfilereadbytes){
counterpath = path.resolve(__dirname, '../../program-data/fromlog/counters/' + file);
fs.writeFile(counterpath, filereadbytes.toString(),function(err){});
oldfilereadbytes = filereadbytes;
}
}, save_interval_or_retry);
openandreadsome();
});
}
function openandreadsome(){
fs.open(filepath, 'r',function(err, file){
if (err){
return setTimeout(openandreadsome, save_interval_or_retry);
}
fd = file;
fs.fstat(file, function(err, stats){
if (err || stats.size == filereadbytes){
return fs.close(file,function(err){
setTimeout(openandreadsome, save_interval_or_retry);
});
}
if (stats.size < filereadbytes){
filereadbytes =0;
}
readsome(stats);
});
});
}
function readsome(stats) {
fs.read(fd, Buffer.alloc(bite_size), 0, bite_size, filereadbytes, function(err, actualbytesread, buffer){
if (err){
return fs.close(fd,function(err){
setTimeout(openandreadsome, save_interval_or_retry);
});
}
if(actualbytesread == 0) {
return fs.close(fd,function(err){
setTimeout(openandreadsome, save_interval_or_retry);
});
}
processsome(actualbytesread,buffer);
readsome(stats);
});
}
function processsome(actualbytesread, buff) {
var datastring = buff.toString('utf-8', 0, actualbytesread);
tempdata+=datastring;
var tempdatasplit = tempdata.split(/\r\n|\r|\n/);
for (var i = 0; i < tempdatasplit.length - 1; i++) {
data= datadefinition.extractdatafromline(data,tempdatasplit[i]);
}
tempdata = tempdatasplit[tempdatasplit.length - 1];
filereadbytes+= actualbytesread;
}
module.exports = {
init: function (file,logic,idle) {
init(file,logic,idle);
data= datadefinition.init(data);
},
data: function () {
return data;
}
};