Skip to content

Instantly share code, notes, and snippets.

@asiletto
Last active August 29, 2015 14:22
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 asiletto/107db3dac8b48a9415ac to your computer and use it in GitHub Desktop.
Save asiletto/107db3dac8b48a9415ac to your computer and use it in GitHub Desktop.
access_log count group by user agent
var fs = require('fs');
var UAParser = require('ua-parser-js');
var parser = new UAParser();
var map = [];
function readLines(input, func) {
var remaining = '';
input.on('data', function(data) {
remaining += data;
var index = remaining.indexOf('\n');
while (index > -1) {
var line = remaining.substring(0, index);
remaining = remaining.substring(index + 1);
func(line);
index = remaining.indexOf('\n');
}
});
input.on('end', function() {
if (remaining.length > 0) {
func(remaining);
}
printOutput();
});
}
function parseLine(line) {
var arr = line.split('"');
var userAgent = arr[5].trim();
var res = parser.setUA(userAgent).getResult();
var key = res.browser.name + "|" + res.browser.version+"|" + res.os.name+"|" + res.os.version;
var tot = map[key];
if(tot == undefined)
tot = 0;
tot = parseInt(tot) + 1;
map[key] = tot;
}
function printOutput(){
console.log("num|browser name|browser version|OS name|OS version");
for (var i in map) {
console.log( map[i]+ "|" +i);
}
}
var input = fs.createReadStream(process.argv[2]);
readLines(input, parseLine);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment