glutenfree
Version:
A profiler/loganalyzer for nginx/Cetrea Aw.
93 lines (78 loc) • 2.24 kB
JavaScript
// Generated by CoffeeScript 1.6.3
var argv, byline, entries, file, fs, lineno, parsers, postProcess, stats, stream, util, _, _i, _len, _ref,
_this = this;
fs = require("fs");
byline = require("byline");
util = require("util");
_ = require("underscore");
argv = require('optimist').usage('Usage: $0 -i [inputfile] -o [outputfile] -p [parser]').demand(["i", "o"]).argv;
parsers = [];
_ref = fs.readdirSync("LineParsers");
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
file = _ref[_i];
if (file.match(/.*\.js/)) {
(function(file) {
var p;
p = require("./LineParsers/" + file).parser;
if (((argv.p != null) && file.match(argv.p)) || !argv.p) {
console.log("loaded '" + file + "' parser");
return parsers.push(p);
}
})(file);
}
}
stream = byline(fs.createReadStream(argv.i));
postProcess = function(stats) {
var id, info, _ref1, _results;
_ref1 = stats.uniques;
_results = [];
for (id in _ref1) {
info = _ref1[id];
_results.push((function(id, info) {
return info.percent = (info.count / stats.total) * 100;
})(id, info));
}
return _results;
};
entries = [];
stats = {
total: 0,
uniques: {}
};
lineno = 0;
console.clear = function(msg) {
return process.stdout.write("" + msg + "\r");
};
stream.on("data", function(line) {
var parsed, parser, _base, _base1, _j, _len1, _name, _results;
console.clear("#" + (lineno++) + "/" + stats.total);
_results = [];
for (_j = 0, _len1 = parsers.length; _j < _len1; _j++) {
parser = parsers[_j];
parsed = parser.parse(line);
if (parsed) {
stats.total++;
if ((_base = stats.uniques)[_name = parsed.id] == null) {
_base[_name] = parsed;
}
if ((_base1 = stats.uniques[parsed.id]).count == null) {
_base1.count = 0;
}
stats.uniques[parsed.id].count++;
break;
} else {
_results.push(void 0);
}
}
return _results;
}).on("end", function() {
console.log("\r\npost processing");
postProcess(stats);
return fs.writeFile(argv.o, JSON.stringify(stats), function(err) {
if (err == null) {
return console.log("done");
} else {
return console.log("error writing to " + argv.o);
}
});
});