Changeset 61254 in vbox for trunk/src/VBox/ValidationKit/testmanager/webui
- Timestamp:
- May 28, 2016 1:38:58 AM (9 years ago)
- svn:sync-xref-src-repo-rev:
- 107546
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/ValidationKit/testmanager/webui/wuireport.py
r61220 r61254 31 31 32 32 # Validation Kit imports. 33 from testmanager.webui.wuicontentbase import WuiContentBase; 34 from testmanager.webui.wuihlpgraph import WuiHlpGraphDataTable, WuiHlpBarGraph; 33 from common import webutils; 34 from testmanager.webui.wuicontentbase import WuiContentBase, WuiSvnLinkWithTooltip; 35 from testmanager.webui.wuihlpgraph import WuiHlpGraphDataTable, WuiHlpBarGraph; 35 36 from testmanager.core.report import ReportModelBase; 36 37 … … 132 133 """ 133 134 134 def generateReportBody(self): 135 # Mockup. 136 self._sTitle = 'Success rate'; 137 return '<p>Graph showing COUNT(idFailureReason) grouped by time period.</p>' \ 138 '<p>New reasons per period, tracked down to build revision.</p>' \ 139 '<p>Show graph content in table form.</p>'; 135 def _formatEdgeOccurence(self, oTransient): 136 """ 137 Helper for formatting the transients. 138 oTransient is of type ReportFailureReasonTransient. 139 """ 140 sHtml = u'<li>'; 141 if oTransient.fEnter: sHtml += 'Since '; 142 else: sHtml += 'Till '; 143 sHtml += WuiSvnLinkWithTooltip(oTransient.iRevision, oTransient.sRepository, fBracketed = 'False').toHtml(); 144 sHtml += u', %s: ' % (self.formatTsShort(oTransient.tsDone),); 145 sHtml += u'%s / %s' % (webutils.escapeElem(oTransient.oReason.oCategory.sShort), 146 webutils.escapeElem(oTransient.oReason.sShort),); 147 sHtml += u'</li>\n'; 148 149 return sHtml; 150 151 152 def generateReportBody(self): 153 self._sTitle = 'Failure reasons'; 154 155 sHtml = u''; 156 157 # 158 # The array of periods we get have the oldest period first [0]. 159 # 160 oSet = self._oModel.getFailureReasons(); 161 162 # 163 # List failure reasons starting or stopping to appear within the data set. 164 # 165 dtFirstLast = {}; 166 for iPeriod, oPeriod in enumerate(oSet.aoPeriods): 167 for oRow in oPeriod.aoRows: 168 tIt = dtFirstLast.get(oRow.idFailureReason, (iPeriod, iPeriod)); 169 #sHtml += u'<!-- %d: %d,%d -- %d -->\n' % (oRow.idFailureReason, tIt[0], tIt[1], iPeriod); 170 dtFirstLast[oRow.idFailureReason] = (tIt[0], iPeriod); 171 172 sHtml += '<!-- \n'; 173 for iPeriod, oPeriod in enumerate(oSet.aoPeriods): 174 sHtml += ' iPeriod=%d tsStart=%s tsEnd=%s\n' % (iPeriod, oPeriod.tsStart, oPeriod.tsEnd,); 175 sHtml += ' tsMin=%s tsMax=%s\n' % (oPeriod.tsMin, oPeriod.tsMax,); 176 sHtml += ' %d / %s\n' % (oPeriod.iPeriod, oPeriod.sDesc,) 177 sHtml += '-->\n'; 178 179 sHtml += u'<h4>Changes:</h4>\n' \ 180 u'<ul>\n'; 181 if len(oSet.aoEnterInfo) == 0 and len(oSet.aoLeaveInfo) == 0: 182 sHtml += u'<li> No changes</li>\n'; 183 else: 184 for oTransient in oSet.aoEnterInfo: 185 sHtml += self._formatEdgeOccurence(oTransient); 186 for oTransient in oSet.aoLeaveInfo: 187 sHtml += self._formatEdgeOccurence(oTransient); 188 sHtml += u'</ul>\n'; 189 190 # 191 # Graph. 192 # 193 if True: # pylint: disable=W0125 194 aidSorted = sorted(oSet.dReasons, key = lambda idReason: oSet.dTotals[idReason], reverse = True); 195 else: 196 aidSorted = sorted(oSet.dReasons, 197 key = lambda idReason: '%s / %s' % (oSet.dReasons[idReason].oCategory.sShort, 198 oSet.dReasons[idReason].sShort,)); 199 200 asNames = []; 201 for idReason in aidSorted: 202 oReason = oSet.dReasons[idReason]; 203 asNames.append('%s / %s' % (oReason.oCategory.sShort, oReason.sShort,) ) 204 oTable = WuiHlpGraphDataTable('Period', asNames); 205 206 for iPeriod, oPeriod in enumerate(reversed(oSet.aoPeriods)): 207 aiValues = []; 208 for idReason in aidSorted: 209 oRow = oPeriod.dById.get(idReason, None); 210 iValue = oRow.cHits if oRow is not None else 0; 211 aiValues.append(iValue); 212 oTable.addRow(oPeriod.sDesc, aiValues); 213 214 oGraph = WuiHlpBarGraph('failure-reason', oTable, self._oDisp); 215 oGraph.setRangeMax(max(oSet.cMaxRowHits + 1, 3)); 216 sHtml += oGraph.renderGraph(); 217 218 # 219 # Table form necessary? 220 # 221 #sHtml += u'<p>TODO: Show graph content in table form.</p>'; 222 223 return sHtml; 140 224 141 225 … … 152 236 oSuccessRate = WuiReportSuccessRate(self._oModel, self._dParams, fSubReport = True, 153 237 fnDPrint = self._fnDPrint, oDisp = self._oDisp); 154 sHtml += oSuccessRate.show()[1]; 238 239 240 241 oFailureReasons = WuiReportFailureReasons(self._oModel, self._dParams, fSubReport = True, 242 fnDPrint = self._fnDPrint, oDisp = self._oDisp); 243 for oReport in [oSuccessRate, oFailureReasons, ]: 244 (sTitle, sContent) = oReport.show(); 245 sHtml += '<br>'; # drop this layout hack 246 sHtml += '<div>'; 247 sHtml += '<h3>%s</h3>\n' % (webutils.escapeElem(sTitle),); 248 sHtml += sContent; 249 sHtml += '</div>'; 155 250 156 251 return sHtml;
Note:
See TracChangeset
for help on using the changeset viewer.