Created
June 23, 2014 17:44
-
-
Save thinkt4nk/22bd06d7add2d608106c to your computer and use it in GitHub Desktop.
Parse Log Files - Execution Time
This file contains hidden or 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
#!/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