Index: /trunk/src/VBox/ValidationKit/testmanager/webui/wuireport.py
===================================================================
--- /trunk/src/VBox/ValidationKit/testmanager/webui/wuireport.py	(revision 61294)
+++ /trunk/src/VBox/ValidationKit/testmanager/webui/wuireport.py	(revision 61295)
@@ -241,4 +241,8 @@
 
 
+    def _formatSeriesNameColumnHeadersForTable(self):
+        """ Formats the series name column for the HTML table. """
+        return '<th>Subject Name</th>';
+
     def _formatSeriesNameForTable(self, oSet, idKey):
         """ Formats the series name for the HTML table. """
@@ -264,5 +268,5 @@
         return u'<td align="center">%u</td>' % (oSet.dcHitsPerId[idKey],);
 
-    def _generateTableForSet(self, oSet, sColumnName, aidSorted = None, iSortColumn = 0,
+    def _generateTableForSet(self, oSet, aidSorted = None, iSortColumn = 0,
                              fWithTotals = True, cColsPerSeries = None):
         """
@@ -276,5 +280,6 @@
 
         # Header row.
-        sHtml += u' <tr><thead><th></th><th>%s</th>' % (webutils.escapeElem(sColumnName),)
+        sHtml += u' <tr><thead><th>#</th>';
+        self._formatSeriesNameColumnHeadersForTable();
         for iPeriod, oPeriod in enumerate(reversed(oSet.aoPeriods)):
             sHtml += u'<th colspan="%d">%s%s</th>' % ( cColsPerSeries, webutils.escapeElem(oPeriod.sDesc),
@@ -401,4 +406,7 @@
                               webutils.escapeElem(oTransient.oReason.sShort),);
 
+    def _formatSeriesNameColumnHeadersForTable(self):
+        return '<th>Failure Reason</th>';
+
     def _formatSeriesNameForTable(self, oSet, idKey):
         oReason = oSet.dSubjects[idKey];
@@ -421,5 +429,5 @@
         # Generate table and transition list. These are the most useful ones with the current graph machinery.
         #
-        sHtml  = self._generateTableForSet(oSet, 'Test Cases', aidSortedRaw, len(oSet.aoPeriods));
+        sHtml  = self._generateTableForSet(oSet, aidSortedRaw, len(oSet.aoPeriods));
         sHtml += self._generateTransitionList(oSet);
 
@@ -482,4 +490,7 @@
         sHtml += WuiTestCaseDetailsLink(oTransient.oSubject.idTestCase, fBracketed = False).toHtml();
         return sHtml;
+
+    def _formatSeriesNameColumnHeadersForTable(self):
+        return '<th>Test Case</th>';
 
     def _formatSeriesNameForTable(self, oSet, idKey):
@@ -501,5 +512,5 @@
         (aidSortedRaw, iSortColumn) = self._getSortedIds(oSet);
 
-        sHtml  = self._generateTableForSet(oSet, 'Test Cases', aidSortedRaw, iSortColumn);
+        sHtml  = self._generateTableForSet(oSet, iSortColumn);
         sHtml += self._generateTransitionList(oSet);
         sHtml += self._generateGraph(oSet, 'testcase-graph', aidSortedRaw);
@@ -524,4 +535,7 @@
         sHtml += WuiTestCaseDetailsLink(oTransient.oSubject.idTestCase, fBracketed = False).toHtml();
         return sHtml;
+
+    def _formatSeriesNameColumnHeadersForTable(self):
+        return '<th>Test Case / Variation</th>';
 
     def _formatSeriesNameForTable(self, oSet, idKey):
@@ -543,5 +557,5 @@
         (aidSortedRaw, iSortColumn) = self._getSortedIds(oSet);
 
-        sHtml  = self._generateTableForSet(oSet, 'Test Case Variations', aidSortedRaw, iSortColumn);
+        sHtml  = self._generateTableForSet(oSet, aidSortedRaw, iSortColumn);
         sHtml += self._generateTransitionList(oSet);
         sHtml += self._generateGraph(oSet, 'testcasearg-graph', aidSortedRaw);
@@ -559,4 +573,7 @@
         sHtml += WuiTestBoxDetailsLink(oTransient.oSubject.idTestBox, fBracketed = False).toHtml();
         return sHtml;
+
+    def _formatSeriesNameColumnHeadersForTable(self):
+        return '<th colspan="5">Test Box</th>';
 
     def _formatSeriesNameForTable(self, oSet, idKey):
@@ -568,4 +585,13 @@
         sHtml += WuiTestBoxDetailsLink(oTestBox.idTestBox).toHtml();
         sHtml += u'</td>';
+        sHtml += u'<td>%s %s</td>' % (webutils.escapeElem(oTestBox.sOs), webutils.escapeElem(oTestBox.sOsVersion),);
+        sHtml += u'<td>%s</td>'    % (webutils.escapeElem(oTestBox.sCpuArch),);
+        sHtml += u'<td>%s</td>'    % (webutils.escapeElem(oTestBox.sCpuVendor),);
+        sHtml += u'<td>f=%#x, m=%#x, s=%#x' % (oTestBox.getCpuFamily(), oTestBox.getCpuModel(), oTestBox.getCpuStepping(),)
+        if oTestBox.fCpuNestedPaging:   sHtml += u', np';
+        elif oTestBox.fCpuHwVirt:       sHtml += u', hw';
+        else:                           sHtml += u', raw';
+        if oTestBox.fCpu64BitGuest:     sHtml += u', 64';
+        sHtml += u'</td>';
         return sHtml;
 
@@ -578,5 +604,5 @@
         (aidSortedRaw, iSortColumn) = self._getSortedIds(oSet);
 
-        sHtml  = self._generateTableForSet(oSet, 'Test Boxes', aidSortedRaw, iSortColumn);
+        sHtml  = self._generateTableForSet(oSet, aidSortedRaw, iSortColumn);
         sHtml += self._generateTransitionList(oSet);
         sHtml += self._generateGraph(oSet, 'testbox-graph', aidSortedRaw);
