Skip to content

Instantly share code, notes, and snippets.

@thinkt4nk
Created June 23, 2014 17:44
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save thinkt4nk/22bd06d7add2d608106c to your computer and use it in GitHub Desktop.
Save thinkt4nk/22bd06d7add2d608106c to your computer and use it in GitHub Desktop.
Parse Log Files - Execution Time
#!/usr/bin/env node
var fs = require('fs');
var moment = require('moment');
if (!!~process.argv.indexOf('-p') && process.argv.length === 4)
parseLog(process.argv[3]);
else if (!!~process.argv.indexOf('-d')) {
var infile = (process.argv.length > 3) ? process.argv[3] : null;
dailyAverages(infile);
}
else {
process.exit(usage());
}
process.on('SIGPIPE', process.exit);
function parseLog(infile) {
var data = fs.readFileSync(infile, { encoding: 'utf8' });
data.split(/\n/).forEach(function(row) {
var response_time = row.replace(/^.*req-time-mus=(\d+).*/, '$1');
var response_dt = row.replace(/^.*\[(.*?) \+\d+\].*$/, '$1');
if (response_time && response_dt) {
var write_row = response_dt + "," + response_time + "\n";
process.stdout.write(write_row);
}
});
}
function dailyAverages(infile) {
var dates = {};
var date_order = [];
var indata = "";
var stream = (infile) ? fs.createReadStream(infile) : process.openStdin();
// get lines
stream.setEncoding('utf8');
stream.on('data', function(chunk) {
if (chunk !== null) {
indata += chunk;
}
});
stream.on('end', function() {
lines = indata.split(/\n/);
lines.forEach(function(line) {
var date = line.replace(/^(\d{2}\/\w+\/\d{4}):(\d{2}:\d{2}:\d{2}).*$/, '$1 $2 UTC');
var time = line.replace(/^.*,(\d+)$/, '$1');
var dt = moment(date);
if (dt.isValid()) {
var date_string = dt.format('YYYY-MM-DD');
if (!dates[date_string]) {
dates[date_string] = { count: 0, time: 0 };
date_order.push(date_string);
}
dates[date_string]['count'] += 1;
dates[date_string]['time'] += parseInt(time);
}
});
date_order.forEach(function(date) {
var avg = dates[date]['time'] / dates[date]['count'];
console.log(date + ',' + avg);
});
});
}
function usage() {
var message = "" +
"Usage: \n" +
" -p <input> display run time for each call in access log \n" +
" -d <input> display daily averages for parsed access log \n";
process.stdout.write(message);
return 1;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment