Skip to content

Instantly share code, notes, and snippets.

@dhyegocalota
Created April 28, 2016 15:15
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 dhyegocalota/38df51bb6d16788627aab9c9c94ff073 to your computer and use it in GitHub Desktop.
Save dhyegocalota/38df51bb6d16788627aab9c9c94ff073 to your computer and use it in GitHub Desktop.
AWStats helper (from nexcess.net)
function bytes(e,r){return"string"==typeof e?parse(e):"number"==typeof e?format(e,r):null}function format(e,r){if(!numberIsFinite(e))return null;var a=Math.abs(e),t=r&&r.thousandsSeparator||"",n=r&&void 0!==r.decimalPlaces?r.decimalPlaces:2,i=Boolean(r&&r.fixedDecimals),o="B";a>=map.tb?o="TB":a>=map.gb?o="GB":a>=map.mb?o="MB":a>=map.kb&&(o="kB");var m=e/map[o.toLowerCase()],s=m.toFixed(n);return i||(s=s.replace(formatDecimalsRegExp,"$1")),t&&(s=s.replace(formatThousandsRegExp,t)),s+o}function parse(e){if("number"==typeof e&&!isNaN(e))return e;if("string"!=typeof e)return null;var r=parseRegExp.exec(e);if(null===r)return null;var a=parseFloat(r[1]),t=(r[4]||"b").toLowerCase();return Math.floor(map[t]*a)}var formatThousandsRegExp=/\B(?=(\d{3})+(?!\d))/g,formatDecimalsRegExp=/(?:\.0*|(\.[^0]+)0+)$/,map={b:1,kb:1024,mb:1<<20,gb:1<<30,tb:1024*(1<<30)},numberIsFinite=Number.isFinite||function(e){return"number"==typeof e&&isFinite(e)},parseRegExp=/^((-|\+)?(\d+(?:\.\d+)?)) *(kb|mb|gb|tb|b)?$/i;
var isResumeNode = (rowNode) => !!rowNode.querySelector('td').innerText.match(/other/i);
var removeStream = (stream) => stream.forEach(log => log.wrapperNode.removeChild(log.rowNode));
var appendStream = (stream) => stream.forEach(log => log.wrapperNode.appendChild(log.rowNode));
var logTable = document.querySelectorAll('table.aws_data')[1];
var nodeSizes = logTable.querySelectorAll('td:nth-child(4)');
var sortedLogs = Array.from(nodeSizes)
.map(node => ({ node, rowNode: node.parentElement, wrapperNode: node.parentElement.parentElement, size: bytes(node.innerText) }))
.sort((x, y) => y.size - x.size);
var resumeLog = sortedLogs.filter(log => isResumeNode(log.rowNode));
removeStream(sortedLogs);
appendStream(sortedLogs.filter(log => !isResumeNode(log.rowNode)));
appendStream(sortedLogs.filter(log => isResumeNode(log.rowNode)));
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment