var qintv_ms = 5000;
var uripart = "/updates?";
//var lastfrom = "";
var lastfrom = "from="+(new Date(Date.now() - 600000)).toISOString();
var possible_display_functions = {"Off":"none", "Value":showvalue, "Gauge":showgauge, "Graph":showasgraph};
var stuff_to_display = {"clients":"none","*":showvalue,"client-count":showasgraph, "bytes-sent":showasgraph, "fuckups-per-second":showasgraph};
var sidseen = [];
$(document).ready(function()
{
updateS5Stats();
setInterval("updateS5Stats()", qintv_ms);
});
function getstreamdiv(sid) {
var elem = $("#"+sid);
if (elem.length<1) {
$("#content").append('
Stream: '+sid+'
');
$("#menu").append(''+sid+' ');
elem = $("#"+sid);
}
return elem;
}
function killvalue(name, nosetselect) {
stuff_to_display[name]="none";
$.each(sidseen,function(index,sid){ $("#li-"+sid+"_"+name).remove() });
if (nosetselect != 1) {
document.getElementById("opts-"+name).selectedIndex=0;
}
}
function showvalue(sid, name, value, jsdate) {
var divid = sid+"_"+name;
var elem = $("#"+divid);
if (elem.length<1) {
getstreamdiv(sid).append('
'+ name +'
');
elem = $("#"+divid);
}
elem.html(""+value+" @"+jsdate.toLocaleDateString()+" "+jsdate.toLocaleTimeString()+"");
}
var gauges = {};
function showgauge(sid, name, value) {
var divid = sid+"_"+name;
var elem = document.getElementById(divid);
if (!elem) {
getstreamdiv(sid).append('
'+ name +'
');
elem = document.getElementById(divid);
gauges[divid] = new google.visualization.Gauge(elem);
}
var data = google.visualization.arrayToDataTable([["Label", "Value"],[name,value]]);
gauges[divid].draw(data, {});
}
var graphs = {}
var graphdata = {}
function showasgraph(sid, name, value, jsdate) {
var divid = sid+"_"+name;
var elem = document.getElementById(divid);
if (!elem) {
getstreamdiv(sid).append('
'+ name +'
');
elem = document.getElementById(divid);
graphdata[divid]=[];
graphs[divid] = new Dygraph(elem,graphdata[divid],{legend:'none',title:sid+"-"+name,labels:["Date/Time",name]});
}
graphdata[divid].push([jsdate,value]);
graphs[divid].updateOptions({'file':graphdata[divid]});
}
function showasetting(name) {
var setid = "opts-"+name;
if (! document.getElementById(setid)) {
var sts = $('').attr('id',setid).attr('onchange',"changeSetting('"+name+"',this);");
$.each(possible_display_functions, function(key, value) {
var stsopt = $("").text(key);
if (stuff_to_display[name] == value) {
stsopt.attr("selected","true");
}
sts.append(stsopt);
});
var stsdiv=$("
"+name+":
");
stsdiv.append(sts);
$("#settings").append(stsdiv);
}
}
function changeSetting(name, selobj) {
var newdispfunc = possible_display_functions[selobj.options[selobj.selectedIndex].text];
if (newdispfunc) {
killvalue(name, 1);
stuff_to_display[name]=newdispfunc;
}
}
function graphS5Status(data) {
sidseen=[];
$.each(data['data'], function(index, stream) {
var sid = stream["streamer-id"].format + '-' + stream["streamer-id"].quality;
sidseen.push(sid);
lastfrom = "from="+stream["start-time"];
var jsdate = new Date(stream["start-time"]);
qintv_ms = stream["duration-ms"]; //doesnt really change anything yet
jsdate = new Date(jsdate.getTime() + qintv_ms);
var data = stream.data;
for (var key in data) {
showasetting(key);
if (typeof(stuff_to_display[key]) == 'function') {
stuff_to_display[key](sid, key, data[key], jsdate);
} else if (! stuff_to_display[key]) {
stuff_to_display['*'](sid, key, data[key], jsdate);
}
}
});
}
function updateS5Stats() {
var uri = uripart + lastfrom;
//$.getJSON(uri, "", function(data){alert(data);});
$.ajax({
dataType: "json",
url: uri,
data: undefined,
success: graphS5Status, //function(data){alert(data);},
error: function( jqxhr, textStatus, error ) {
var err = textStatus + ", " + error;
console.log( "Request Failed: " + err );}
});
}