blob: d93667da71a499dbd2b28f9029059c804c230f75 [file] [log] [blame]
<div id="tabs-6">
<div class="row">
<span><b>Content Provider:</b></span>
<span><select id="cdn-node-data-slicename">
<option value="all">all</option>
{% for cp in cdnContentProviders %}
<option value="{{ cp.account }}">{{ cp.name }}</option>
{% endfor %}
</select></span>
</div>
<div id="cdn-node-table"></div>
</div>
<script>
function domain_name_sort(a,b) {
parts_a = a.split(".");
parts_b = b.split(".");
parts_a = parts_a.reverse();
parts_b = parts_b.reverse();
a = parts_a.join(".");
b = parts_b.join(".");
return ((a < b) ? -1 : ((a > b) ? 1 : 0));
}
jQuery.fn.dataTableExt.oSort['domain-name-asc'] = function(a,b) {
return domain_name_sort(a,b);
};
jQuery.fn.dataTableExt.oSort['domain-name-desc'] = function(a,b) {
retuirn -domain_name_sort(a,b);
};
function updateCDNNodeData(data) {
$('#cdn-node-table').html( '<table cellpadding="0" cellspacing="0" border="0" class="display" id="dynamic_cdn_nodes"></table>' );
var actualEntries = [];
var rows = data.rows;
for (row in rows) {
hostname = rows[row]['hostname'];
bytes_sent = rows[row]['sum_bytes_sent'];
bytes_hit = rows[row]['sum_bytes_hit'];
elapsed = rows[row]['sum_elapsed'];
healthy = rows[row]['sum_healthy'];
if (bytes_sent > 0) {
hit_ratio = parseInt( bytes_hit * 100.0 / bytes_sent );
} else {
hit_ratio = 0;
}
Mbps = parseInt(rows[row]['sum_computed_bytes_sent_div_elapsed'] * 8.0 / 1024.0 / 1024.0);
if (healthy>0) {
healthyStr = "ok";
} else {
healthyStr = "bad";
}
actualEntries.push([hostname, healthyStr, Mbps, hit_ratio]);
}
oTable = $('#dynamic_cdn_nodes').dataTable( {
"bJQueryUI": true,
"aaData": actualEntries,
"bStateSave": true,
"aoColumns": [
{ "sTitle": "Hostname", sType: "domain-name" },
{ "sTitle": "Healthy" },
{ "sTitle": "Mbps" , sClass: "alignCenter"},
{ "sTitle": "Hit Ratio" , sClass: "alignCenter"},
],
} );
}
function updateCDNNodes() {
var contentProvider = $("#cdn-node-data-slicename").val();
var filterPart = ""
if ((contentProvider!="") && (contentProvider!="all")) {
filterPart = "&cp=" + contentProvider
}
var url= '/analytics/bigquery/?event=hpc_heartbeat&sum=@bytes_sent,@bytes_hit,@healthy,@elapsed&computed=@bytes_sent/@elapsed&groupBy=@hostname&cached=hpc&cachedGroupBy=@hostname' + filterPart;
$.ajax({
url: url,
dataType : 'json',
type : 'GET',
success: function(newData)
{
updateCDNNodeData(newData);
}
});
setTimeout(updateCDNNodes, 30000);
}
google.setOnLoadCallback(function () {
$('#cdn-node-data-slicename').change(function()
{
updateCDNNodes();
});
updateCDNNodes();
});
//setTimeout(updateCDNNodes, 5000);
</script>