Skip to content

Instantly share code, notes, and snippets.

@jasongonzales23
Created June 25, 2017 18:34
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 jasongonzales23/eea09bf3a7fb33a5dd4f8063b01af696 to your computer and use it in GitHub Desktop.
Save jasongonzales23/eea09bf3a7fb33a5dd4f8063b01af696 to your computer and use it in GitHub Desktop.
JS Bin [log sort algo] // source https://jsbin.com/devepog
<!DOCTYPE html>
<html>
<head>
<meta name="description" content="[log sort algo]">
<meta charset="utf-8">
<meta name="viewport" content="width=device-width">
<title>JS Bin</title>
</head>
<body>
<script id="jsbin-javascript">
'use strict';
var log = ['\[01/Aug/1995:00:54:59 -0400\] "GET /images/opf-logo.gif HTTP/1.0" 200 32511', '\[01/Aug/1995:00:55:04 -0400\] "GET /images/ksclogosmall.gif HTTP/1.0" 200 3635', '\[01/Aug/1995:00:55:06 -0400\] "GET /images/ksclogosmall.gif HTTP/1.0" 403 298', '\[01/Aug/1995:00:55:09 -0400\] "GET /images/ksclogosmall.gif HTTP/1.0" 200 3635', '\[01/Aug/1995:00:55:18 -0400\] "GET /images/opf-logo.gif HTTP/1.0" 200 32511', '\[01/Aug/1995:00:56:52 -0400\] "GET /images/ksclogosmall.gif HTTP/1.0" 200 3635', '\[01/Aug/1995:00:56:52 -0400\] "GET /images/foo.gif HTTP/1.0" 200 999', '\[01/Aug/1995:00:56:52 -0400\] "GET /images/foo.gif HTTP/1.0" 200 111', '\[01/Aug/1995:00:56:52 -0400\] "GET /images/bar.gif HTTP/1.0" 200 777'];
var successRgx = new RegExp(/"([A-Z]+)[^"]*" (2\d\d)/);
var objByteRgx = new RegExp(/"[A-Z]+[^"]* ([\/+].*) .*" \d+ (\d+)/);
var getAllDemLogz = function getAllDemLogz(log) {
var logMap = {};
var logArr = [];
for (var i = 0; i < log.length; i++) {
if (successRgx.test(log[i])) {
var logGrp = objByteRgx.exec(log[i]);
var requestedObj = logGrp[1];
var bytes = parseInt(logGrp[2]);
if (logMap[requestedObj]) {
logArr[logMap[requestedObj].index].count += 1;
logArr[logMap[requestedObj].index].bytes += bytes;
} else {
logMap[requestedObj] = {
index: logArr.length
};
logArr.push({
requestedObj: requestedObj,
count: 1,
bytes: bytes
});
}
}
}
logArr.sort(function (a, b) {
return b.count - a.count;
});
var top10 = logArr.slice(0, 10);
return top10;
};
console.log(getAllDemLogz(log));
</script>
<script id="jsbin-source-javascript" type="text/javascript">var log = [
'\[01/Aug/1995:00:54:59 -0400\] "GET /images/opf-logo.gif HTTP/1.0" 200 32511',
'\[01/Aug/1995:00:55:04 -0400\] "GET /images/ksclogosmall.gif HTTP/1.0" 200 3635',
'\[01/Aug/1995:00:55:06 -0400\] "GET /images/ksclogosmall.gif HTTP/1.0" 403 298',
'\[01/Aug/1995:00:55:09 -0400\] "GET /images/ksclogosmall.gif HTTP/1.0" 200 3635',
'\[01/Aug/1995:00:55:18 -0400\] "GET /images/opf-logo.gif HTTP/1.0" 200 32511',
'\[01/Aug/1995:00:56:52 -0400\] "GET /images/ksclogosmall.gif HTTP/1.0" 200 3635',
'\[01/Aug/1995:00:56:52 -0400\] "GET /images/foo.gif HTTP/1.0" 200 999',
'\[01/Aug/1995:00:56:52 -0400\] "GET /images/foo.gif HTTP/1.0" 200 111',
'\[01/Aug/1995:00:56:52 -0400\] "GET /images/bar.gif HTTP/1.0" 200 777'
]
var successRgx = new RegExp(/"([A-Z]+)[^"]*" (2\d\d)/)
var objByteRgx = new RegExp(/"[A-Z]+[^"]* ([\/+].*) .*" \d+ (\d+)/)
var getAllDemLogz = (log) => {
var logMap = {}
var logArr = []
for (var i = 0; i < log.length; i++) {
if (successRgx.test(log[i])) {
var logGrp = objByteRgx.exec(log[i])
var requestedObj = logGrp[1]
var bytes = parseInt(logGrp[2])
if (logMap[requestedObj]) {
logArr[logMap[requestedObj].index].count += 1
logArr[logMap[requestedObj].index].bytes += bytes
} else {
logMap[requestedObj] = {
index: logArr.length
}
logArr.push({
requestedObj: requestedObj,
count: 1,
bytes: bytes
})
}
}
}
logArr.sort((a,b) =>
b.count - a.count
)
var top10 = logArr.slice(0,10)
return top10
}
console.log(getAllDemLogz(log))</script></body>
</html>
'use strict';
var log = ['\[01/Aug/1995:00:54:59 -0400\] "GET /images/opf-logo.gif HTTP/1.0" 200 32511', '\[01/Aug/1995:00:55:04 -0400\] "GET /images/ksclogosmall.gif HTTP/1.0" 200 3635', '\[01/Aug/1995:00:55:06 -0400\] "GET /images/ksclogosmall.gif HTTP/1.0" 403 298', '\[01/Aug/1995:00:55:09 -0400\] "GET /images/ksclogosmall.gif HTTP/1.0" 200 3635', '\[01/Aug/1995:00:55:18 -0400\] "GET /images/opf-logo.gif HTTP/1.0" 200 32511', '\[01/Aug/1995:00:56:52 -0400\] "GET /images/ksclogosmall.gif HTTP/1.0" 200 3635', '\[01/Aug/1995:00:56:52 -0400\] "GET /images/foo.gif HTTP/1.0" 200 999', '\[01/Aug/1995:00:56:52 -0400\] "GET /images/foo.gif HTTP/1.0" 200 111', '\[01/Aug/1995:00:56:52 -0400\] "GET /images/bar.gif HTTP/1.0" 200 777'];
var successRgx = new RegExp(/"([A-Z]+)[^"]*" (2\d\d)/);
var objByteRgx = new RegExp(/"[A-Z]+[^"]* ([\/+].*) .*" \d+ (\d+)/);
var getAllDemLogz = function getAllDemLogz(log) {
var logMap = {};
var logArr = [];
for (var i = 0; i < log.length; i++) {
if (successRgx.test(log[i])) {
var logGrp = objByteRgx.exec(log[i]);
var requestedObj = logGrp[1];
var bytes = parseInt(logGrp[2]);
if (logMap[requestedObj]) {
logArr[logMap[requestedObj].index].count += 1;
logArr[logMap[requestedObj].index].bytes += bytes;
} else {
logMap[requestedObj] = {
index: logArr.length
};
logArr.push({
requestedObj: requestedObj,
count: 1,
bytes: bytes
});
}
}
}
logArr.sort(function (a, b) {
return b.count - a.count;
});
var top10 = logArr.slice(0, 10);
return top10;
};
console.log(getAllDemLogz(log));
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment