[LNT] r256233 - Render regressions into normal LNT graph

Chris Matthews via llvm-commits llvm-commits at lists.llvm.org
Mon Dec 21 23:08:52 PST 2015


Author: cmatthews
Date: Tue Dec 22 01:08:52 2015
New Revision: 256233

URL: http://llvm.org/viewvc/llvm-project?rev=256233&view=rev
Log:
Render regressions into normal LNT graph

This adds the functionality of graphing regression into the standard
LNT graph.  To make this nice it shares a lot of code from the new
LNT graphing javascript.  Regressions are fetched in the background,
and as they arrive the graph is redrawn.

Modified:
    lnt/trunk/lnt/server/ui/static/lnt_graph.js
    lnt/trunk/lnt/server/ui/templates/v4_graph.html
    lnt/trunk/lnt/server/ui/templates/v4_regression_detail.html
    lnt/trunk/lnt/server/ui/views.py

Modified: lnt/trunk/lnt/server/ui/static/lnt_graph.js
URL: http://llvm.org/viewvc/llvm-project/lnt/trunk/lnt/server/ui/static/lnt_graph.js?rev=256233&r1=256232&r2=256233&view=diff
==============================================================================
--- lnt/trunk/lnt/server/ui/static/lnt_graph.js (original)
+++ lnt/trunk/lnt/server/ui/static/lnt_graph.js Tue Dec 22 01:08:52 2015
@@ -234,7 +234,7 @@ function get_regression_id() {
 }
 
 
-function new_graph_regression_callback(data, index) {
+function new_graph_regression_callback(data, index, update_func) {
     "use strict";
     $.each(data, function (i, d) {
 
@@ -253,7 +253,7 @@ function new_graph_regression_callback(d
                     'state': STATE_NAMES[d.state]};
         regression_cache[index].push([parseInt(d.end_point[0], 10), d.end_point[1], metadata]);
     });
-    update_graph();
+    update_func();
 }
 
 
@@ -362,7 +362,25 @@ function init_graph () {
     
     
 }
-
+/* On the normal graph page, data is loaded during page load.
+This function takes the plots from page load and adds the regressions
+that are asynchrounusly fetched.
+*/
+function update_graphplots(old_plot) {
+    "use strict";
+    // Regressions.
+    var regressions = null;
+    var i = 0;
+    var new_plot = $.extend([], old_plot);
+    for (i = 0; i < regression_cache.length; i++) {
+        if (regression_cache[i]) {
+            regressions = regression_cache[i];
+            new_plot.push(make_graph_point_entry(regressions, "#000000", true));
+        }
+    }
+    return new_plot;
+}
+    
 
 function init(data, start_highlight, end_highlight) {
     "use strict";
@@ -398,5 +416,6 @@ function init(data, start_highlight, end
     graph.bind("plotclick", function (e, p, i) {
         update_tooltip(e, p, i, show_tooltip, graph_plots);
     });
+    
     bind_zoom_bar(main_plot);
 }

Modified: lnt/trunk/lnt/server/ui/templates/v4_graph.html
URL: http://llvm.org/viewvc/llvm-project/lnt/trunk/lnt/server/ui/templates/v4_graph.html?rev=256233&r1=256232&r2=256233&view=diff
==============================================================================
--- lnt/trunk/lnt/server/ui/templates/v4_graph.html (original)
+++ lnt/trunk/lnt/server/ui/templates/v4_graph.html Tue Dec 22 01:08:52 2015
@@ -10,6 +10,9 @@
           src="{{ url_for('.static',
                           filename='flot/jquery.flot.min.js') }}"> </script>
   <script language="javascript" type="text/javascript"
+           src="{{ url_for('.static',
+                          filename='flot/jquery.flot.symbol.min.js') }}"> </script>
+  <script language="javascript" type="text/javascript"
           src="{{ url_for('.static',
                           filename='flot/jquery.flot.errorbars.min.js') }}"> </script>
   <script language="javascript" type="text/javascript"
@@ -32,20 +35,20 @@
 {% block title %}Graph{% endblock %}
 
 {# Add JS to initialize the graph. #}
-{% block onload %}init(){% endblock %}
+{% block onload %}init_page(){% endblock %}
 
 {% block javascript %}
 var g = {};
 var test_suite_name = "{{ request.view_args.testsuite_name }}";
 var db_name = "{{ request.view_args.db_name }}";
+var graph_plots = {{graph_plots|tojson|safe}};
+var baseline_plots = {{baseline_plots|tojson|safe}};
 
 
-function init() {
+function init_graph() {
   // Set up the primary graph.
-	var graph = $("#graph");
-	var graph_plots = {{graph_plots|tojson|safe}};
-	var baseline_plots = {{baseline_plots|tojson|safe}};
-	var graph_options = {
+  var graph = $("#graph");
+  var graph_options = {
       series : {
         lines : {
           lineWidth : 1 },
@@ -62,16 +65,18 @@ function init() {
       pan : { interactive : true,
               frameRate: 60 },
       grid : {
-        hoverable : true }
+        hoverable : true,
+        clickable: true }
       };
 
   // Add baseline lines
   graph_options['grid']['markings'] = baseline_plots;
-  var main_plot = $.plot(graph, graph_plots, graph_options);
+  var tmp_plots = update_graphplots(graph_plots);
+  var main_plot = $.plot(graph, tmp_plots, graph_options);
   
   // Add tooltips.
-  graph.bind("plothover", function(e,p,i) {
-    update_tooltip(e, p, i, show_tooltip, graph_plots);
+  graph.bind("plotclick", function (e, p, i) {
+      update_tooltip(e, p, i, show_tooltip, tmp_plots);
   });
 
   // Set up the overview graph.
@@ -111,6 +116,22 @@ function init() {
 }
 
 
+function init_page() {
+    // First start the requests for regrssion data.
+    var urls = $(".data-row").each(function (index, val) {
+        $.getJSON(get_api_url("regression",
+                              db_name,
+                              test_suite_name,
+                              $(val).data('url')),
+                              function (data) {
+                                  new_graph_regression_callback(data, index, init_graph);
+                              });
+        return $(val).data('url');
+    });
+
+    init_graph();
+}
+
 {% endblock %}
 
 {% block sidebar %}
@@ -246,8 +267,8 @@ function init() {
       <th>Test</th>
       <th>Type</th>
     </tr>
-    {% for machine,test_name,field_name,col in legend %}
-    <tr>
+    {% for machine,test_name,field_name,col, url in legend %}
+    <tr class="data-row" data-url="{{url}}">
       <td style="background-color: #{{ '%02x%02x%02x' % (255*col[0], 255*col[1], 255*col[2]) }}"> </td>
       <td>{{ utils.render_machine(machine) }}</td>
       <td>{{ test_name }}</td>

Modified: lnt/trunk/lnt/server/ui/templates/v4_regression_detail.html
URL: http://llvm.org/viewvc/llvm-project/lnt/trunk/lnt/server/ui/templates/v4_regression_detail.html?rev=256233&r1=256232&r2=256233&view=diff
==============================================================================
--- lnt/trunk/lnt/server/ui/templates/v4_regression_detail.html (original)
+++ lnt/trunk/lnt/server/ui/templates/v4_regression_detail.html Tue Dec 22 01:08:52 2015
@@ -218,7 +218,7 @@ function register_checkboxes() {
               var color = color_codes[index % color_codes.length];
               var prev_cell = $(this).closest('td').prev();
               prev_cell.css("background-color", color);
-              add_data_to_graph(changes[index]["url"], index);
+              add_data_to_graph(changes[index]["url"], index, update_graph);
           } else {
               is_checked[index] = false;
               var prev_cell = $(this).closest('td').prev();

Modified: lnt/trunk/lnt/server/ui/views.py
URL: http://llvm.org/viewvc/llvm-project/lnt/trunk/lnt/server/ui/views.py?rev=256233&r1=256232&r2=256233&view=diff
==============================================================================
--- lnt/trunk/lnt/server/ui/views.py (original)
+++ lnt/trunk/lnt/server/ui/views.py Tue Dec 22 01:08:52 2015
@@ -537,10 +537,10 @@ def v4_graph():
             field = ts.sample_fields[field_index]
         except NoResultFound:
             return abort(404)
-        graph_parameters.append((machine, test, field))
+        graph_parameters.append((machine, test, field, field_index))
 
     # Order the plots by machine name, test name and then field.
-    graph_parameters.sort(key = lambda (m,t,f): (m.name, t.name, f.name))
+    graph_parameters.sort(key = lambda (m,t,f,_): (m.name, t.name, f.name, _))
 
     # Extract requested mean trend.
     mean_parameter = None
@@ -626,10 +626,11 @@ def v4_graph():
     overview_plots = []
     baseline_plots = []
     num_plots = len(graph_parameters)
-    for i,(machine,test,field) in enumerate(graph_parameters):
+    for i,(machine,test,field, field_index) in enumerate(graph_parameters):
         # Determine the base plot color.
         col = list(util.makeDarkColor(float(i) / num_plots))
-        legend.append((machine, test.name, field.name, tuple(col)))
+        url = "/".join([str(machine.id), str(test.id), str(field_index)])
+        legend.append((machine, test.name, field.name, tuple(col), url))
 
         # Load all the field values for this test on the same machine.
         #




More information about the llvm-commits mailing list