function selectRankingTable() { var val = $("#select_rankingTable").attr("value"); var types = ["qs", "lcssr", "lcssi", "lcss1r", "lcss1i"]; for (index in types) { var type = types[index]; $("#div_rankingTable_" + type).css( "display", (val == type) ? "block" : "none"); } var nrows = $("#rankingTable_" + val).find("tr").length - 1; $("#rankingTable_nrows").text(nrows + ((nrows == 1) ? " row" : " rows")); } // ### Same function in tsstats.js -> move both to a common place? tsbmbody.js? // 2 B DONE! function clickBenchmarkCheckbox( cb, tableSel, database, host, platform, branch, sha11, sha12, benchmark, metric, difftol, durtolmin, durtolmax) { if (cb.checked) { // Deselect all other benchmarks: $(tableSel + " input").attr("checked", false); cb.checked = true; index = cb.id.match(/bm_cb:(\d+)/)[1]; // Fetch and plot time series: fetchTimeSeries( database, host, platform, branch, sha11, sha12, benchmark, metric, difftol, durtolmin, durtolmax, true); } else { clearPlot(); } } function populateRankingTable( tableSel, rankings, database, host, platform, branch, sha11, sha12, difftol, durtolmin, durtolmax, bmarkId2Name, metricId2Name) { // Remove all rows below the header ... $(tableSel + " tr:gt(0)").remove(); var html = ""; for (var i = 0; i < rankings.length; ++i) { row = rankings[i]; bmarkId = row[0]; metricId = row[1]; context1Id = row[2]; // unused? pos = row[3]; val = row[4]; benchmark = bmarkId2Name[bmarkId]; metric = metricId2Name[metricId]; html += "" html += ""; html += "" + pos + ""; html += "<trend>"; html += "" + val + ""; html += "" + metric + ""; html += "" + benchmark + ""; html += ""; } $(tableSel + " > tbody:last").append(html); } function fetchRankings(database, host, platform, branch, sha1) { updateStatus("fetching rankings ...", true); query = "?db=" + database + "&cmd=rankings" + "&host=" + encodeURIComponent(host) + "&platform=" + encodeURIComponent(platform) + "&branch=" + encodeURIComponent(branch) + "&sha1=" + sha1; url = "http://" + location.host + "/cgi-bin/getstatswrapper" + query; //alert("url: >" + url + "<"); $.ajax({ url: url, type: "GET", dataType: "json", success: function(data, textStatus, request) { if (request.readyState == 4) { if (request.status == 200) { if (data.error != null) { updateStatus( "fetching rankings ... failed: " + data.error, false); return } updateStatus("fetching rankings ... done", false); updateStatus("", false); var sha11 = data.snapshots[0][0]; var sha12 = data.snapshots[data.snapshots.length - 1][0]; // Show context ... $("#main_context_database").text(data.database); $("#main_context_host").text(data.host); $("#main_context_platform").text(data.platform); $("#main_context_branch").text(data.branch); $("#main_context_sha11").text(sha11); $("#main_context_sha12").text(sha12); $("#main_context_difftol").text("---"); $("#main_context_durtolmin").text("---"); $("#main_context_durtolmax").text("---"); setSnapshots(data.snapshots); // ### The tolerance values should automatically be // set to those hardcoded in finalizeresults.py! // ... 2 B DONE! difftol = 1.1; durtolmin = 3; durtolmax = 30; var bmarkId2Name = []; for (var i = 0; i < data.benchmarks.length; ++i) { bmarkInfo = data.benchmarks[i]; bmarkId2Name[bmarkInfo[0]] = bmarkInfo[1]; } var metricId2Name = []; for (var i = 0; i < data.metrics.length; ++i) { metricInfo = data.metrics[i]; metricId2Name[metricInfo[0]] = metricInfo[1]; } rankings = { "qs": data.rankings.qs, "lcssr": data.rankings.lcssr, "lcssi": data.rankings.lcssi, "lcss1r": data.rankings.lcss1r, "lcss1i": data.rankings.lcss1i }; for (key in rankings) populateRankingTable( "#rankingTable_" + key, rankings[key], data.database, data.host, data.platform, data.branch, sha11, sha12, difftol, durtolmin, durtolmax, bmarkId2Name, metricId2Name); // Initially show the QS statistic table: $("#select_rankingTable").attr("value", "qs"); selectRankingTable(); $("#div_tsbm_border").css("display", "block"); $("#div_tsbm").css("display", "block"); $("#div_perBenchmarkStats").css("display", "block"); $("#div_context").css("display", "block"); $("#div_rankings").css("display", "block"); clearPlot(); } } }, error: function(request, textStatus, errorThrown) { descr = errorThrown; if (errorThrown == null) { descr = "undefined error - is the server down?"; } updateStatus("fetching rankings ... error: " + descr, false); } // complete: function(request, textStatus) { // alert("complete; request.status: " + request.status) // } }); } function initRankingTable(tableSel) { // Note: The nth-child selector below uses 1-based indexing! setTooltip($(tableSel).find("th:nth-child(2)"), "---"); setTooltip($(tableSel).find("th:nth-child(3)"), "---"); } $(document).ready(function() { initTablesorter(); initTSBMBody(); initRankingTable("#rankingTable_qs"); initRankingTable("#rankingTable_lcssr"); initRankingTable("#rankingTable_lcssi"); initRankingTable("#rankingTable_lcss1r"); initRankingTable("#rankingTable_lcss1i"); var args = queryStringArgs(); database = extractArg(args, "db"); if (database == "") { alert("ERROR: invalid query string (empty database)"); return; } host = extractArg(args, "host"); if (host == "") { alert("ERROR: invalid query string (empty host)"); return; } platform = extractArg(args, "platform"); if (platform == "") { alert("ERROR: invalid query string (empty platform)"); return; } branch = extractArg(args, "branch"); if (branch == "") { alert("ERROR: invalid query string (empty branch)"); return; } sha1 = extractArg(args, "sha1"); if (sha1 == "") { alert("ERROR: invalid query string (empty sha1)"); return; } $("#div_tsbm_border").css("display", "none"); $("#div_tsbm").css("display", "none"); $("#div_rankings").css("display", "none"); fetchRankings(database, host, platform, branch, sha1); });