[llvm-commits] [LNT] r163769 - in /lnt/trunk/lnt/server: reporting/dailyreport.py ui/templates/v4_daily_report.html ui/views.py

Daniel Dunbar daniel at zuster.org
Wed Sep 12 18:39:37 PDT 2012


Author: ddunbar
Date: Wed Sep 12 20:39:37 2012
New Revision: 163769

URL: http://llvm.org/viewvc/llvm-project?rev=163769&view=rev
Log:
[dailyreport] Compute ComparisonResults for everything.

Modified:
    lnt/trunk/lnt/server/reporting/dailyreport.py
    lnt/trunk/lnt/server/ui/templates/v4_daily_report.html
    lnt/trunk/lnt/server/ui/views.py

Modified: lnt/trunk/lnt/server/reporting/dailyreport.py
URL: http://llvm.org/viewvc/llvm-project/lnt/trunk/lnt/server/reporting/dailyreport.py?rev=163769&r1=163768&r2=163769&view=diff
==============================================================================
--- lnt/trunk/lnt/server/reporting/dailyreport.py (original)
+++ lnt/trunk/lnt/server/reporting/dailyreport.py Wed Sep 12 20:39:37 2012
@@ -1,5 +1,9 @@
 import datetime
 
+import sqlalchemy.sql
+
+import lnt.server.reporting.analysis
+
 from lnt.server.ui import util
 
 class DailyReport(object):
@@ -9,6 +13,7 @@
         self.year = year
         self.month = month
         self.day = day
+        self.fields = list(ts.Sample.get_primary_fields())
 
         # Computed values.
         self.day_start_offset = None
@@ -26,8 +31,10 @@
                                         self.day).toordinal()
 
         # Adjust the dates time component.  As we typically want to do runs
-        # overnight, we define "daily" to really mean "at 0700".
-        self.day_start_offset = datetime.timedelta(hours=7)
+        # overnight, we define "daily" to really mean "daily plus some
+        # offset". The offset should generally be whenever the last run finishes
+        # on today's date.
+        self.day_start_offset = datetime.timedelta(hours=16)
 
         self.next_day = (datetime.datetime.fromordinal(day_ordinal + 1) +
                          self.day_start_offset)
@@ -101,45 +108,43 @@
         # by the kind of status change, while still managing to present the
         # overview across machines.
 
-        # Batch load all of the samples reported by all these runs.
-        columns = [ts.Sample.run_id,
-                   ts.Sample.test_id]
-        columns.extend(f.column
-                       for f in ts.sample_fields)
-        samples = ts.query(*columns).\
-            filter(ts.Sample.run_id.in_(
-                r.id for r in relevant_runs)).all()
-
-        # Find the union of tests reported in the relevant runs.
-        #
-        # FIXME: This is not particularly efficient, should we just use all
-        # tests in the database?
-        self.reporting_tests = ts.query(ts.Test).\
-            filter(ts.Test.id.in_(set(s[1] for s in samples))).\
-            order_by(ts.Test.name).all()
-
-        # Aggregate all of the samples by (run_id, test_id).
-        sample_map = util.multidict()
-        for s in samples:
-            sample_map[(s[0], s[1])] = s[2:]
+        relevant_run_ids = [r.id for r in relevant_runs]
 
-        # Build the result table:
-        #   result_table[test_index][day_index][machine_index] = {samples}
+        # Get the set all tests reported in the recent runs.
+        self.reporting_tests = ts.query(ts.Test).filter(
+            sqlalchemy.sql.exists('*', sqlalchemy.sql.and_(
+                    ts.Sample.run_id.in_(relevant_run_ids),
+                    ts.Sample.test_id == ts.Test.id))).all()
+        self.reporting_tests.sort(key=lambda t: t.name)
+
+        # Create a run info object.
+        sri = lnt.server.reporting.analysis.RunInfo(ts, relevant_run_ids)
+
+        # Aggregate runs by machine ID and day index.
+        machine_runs = util.multidict()
+        for day_index,day_runs in enumerate(prior_runs):
+            for run in day_runs:
+                machine_runs[(run.machine_id, day_index)] = run
+                
+        # Build the result table::
+        #   result_table[field_index][test_index][day_index][machine_index] = \
+        #     {samples}
         self.result_table = []
-        for test in self.reporting_tests:
-            key = test
-            test_results = []
-            for day_runs in prior_runs:
-                day_results = []
-                for machine in self.reporting_machines:
-                    # Collect all the results for this machine.
-                    results = [s
-                               for run in day_runs
-                               if run.machine is machine
-                               for s in sample_map.get((run.id, test.id), ())]
-                    day_results.append(results)
-                test_results.append(day_results)
-            self.result_table.append(test_results)
-
-        # FIXME: Now compute ComparisonResult objects for each (test, machine,
-        # day).
+        for field in self.fields:
+            field_results = []
+            for test in self.reporting_tests:
+                key = test
+                test_results = []
+                for day_index,day_runs in enumerate(prior_runs):
+                    day_results = []
+                    for machine in self.reporting_machines:
+                        prev_runs = machine_runs.get(
+                            (machine.id, day_index+1), ())
+                        day_runs = machine_runs.get(
+                            (machine.id, day_index), ())
+                        cr = sri.get_comparison_result(
+                            day_runs, prev_runs, test.id, field)
+                        day_results.append(cr)
+                    test_results.append(day_results)
+                field_results.append(test_results)
+            self.result_table.append(field_results)

Modified: lnt/trunk/lnt/server/ui/templates/v4_daily_report.html
URL: http://llvm.org/viewvc/llvm-project/lnt/trunk/lnt/server/ui/templates/v4_daily_report.html?rev=163769&r1=163768&r2=163769&view=diff
==============================================================================
--- lnt/trunk/lnt/server/ui/templates/v4_daily_report.html (original)
+++ lnt/trunk/lnt/server/ui/templates/v4_daily_report.html Wed Sep 12 20:39:37 2012
@@ -51,8 +51,28 @@
 {% endfor %}
 </table>
 
+{% macro get_cell_value(cr) %}
+{% set test_status = cr.get_test_status() %}
+{% set value_status = cr.get_value_status() %}
+
+{% if (test_status == analysis.REGRESSED or
+       test_status == analysis.UNCHANGED_FAIL) %}
+    <td>FAIL</td>
+{% else %}
+
+{% if (value_status == analysis.REGRESSED or
+       value_status == analysis.IMPROVED) %}
+    {{ cr.pct_delta|aspctcell|safe }}
+{% else %}
+    <td>-</td>
+{% endif %}
+
+{% endif %}
+{% endmacro %}
+
 {# Generate the table showing the raw sample data. #}
-<h3>Result Table</h3>
+{% for field in report.fields %}
+<h3>Result Table ({{ field.name }})</h3>
 <table border="1">
   <thead>
     <tr>
@@ -62,7 +82,8 @@
       <th>Day - {{i}}</th>
 {% endfor %}
   </thead>
-{% for test,test_results in zip(report.reporting_tests, report.result_table) %}
+{% for test,test_results in zip(report.reporting_tests,
+                                report.result_table[loop.index0]) %}
   <tr>
     <td colspan="2"><b>{{test.name}}</b></td>
     <td colspan="{{report.num_prior_days_to_include}}"> </td>
@@ -72,12 +93,14 @@
   <tr>
     <td> </td>
     <td>{{machine.name}}</td>
-{%     for day_results in test_results|reverse %}
-    <td>{{day_results[machine_loop.index0]}}</td>
+    <td>{{ test_results[-1][machine_loop.index0].current }}</td>
+{%     for day_result in test_results[:-1]|reverse %}
+    {{ get_cell_value(day_result[machine_loop.index0]) }}
 {%     endfor %}
   </tr>
 {%   endfor %}
 {% endfor %}
 </table>
+{% endfor %}
 
 {% endblock %}

Modified: lnt/trunk/lnt/server/ui/views.py
URL: http://llvm.org/viewvc/llvm-project/lnt/trunk/lnt/server/ui/views.py?rev=163769&r1=163768&r2=163769&view=diff
==============================================================================
--- lnt/trunk/lnt/server/ui/views.py (original)
+++ lnt/trunk/lnt/server/ui/views.py Wed Sep 12 20:39:37 2012
@@ -813,7 +813,8 @@
     # Build the report.
     report.build()
 
-    return render_template("v4_daily_report.html", ts=ts, report=report)
+    return render_template("v4_daily_report.html", ts=ts, report=report,
+                           analysis=lnt.server.reporting.analysis)
 
 ###
 # Cross Test-Suite V4 Views





More information about the llvm-commits mailing list