VirtualBox

Changeset 64951 in vbox


Ignore:
Timestamp:
Dec 18, 2016 2:50:33 PM (8 years ago)
Author:
vboxsync
Message:

testmanager: new result groupings; tab order hack.

Location:
trunk/src/VBox/ValidationKit/testmanager
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/ValidationKit/testmanager/core/testresults.py

    r62484 r64951  
    4040                                                   TMTooManyRows, TMRowNotFound;
    4141from testmanager.core.testgroup             import TestGroupData;
    42 from testmanager.core.build                 import BuildDataEx;
     42from testmanager.core.build                 import BuildDataEx, BuildCategoryData;
    4343from testmanager.core.failurereason         import FailureReasonLogic;
    4444from testmanager.core.testbox               import TestBoxData;
     
    651651    ksResultsGroupingTypeNone       = 'ResultsGroupingTypeNone';
    652652    ksResultsGroupingTypeTestGroup  = 'ResultsGroupingTypeTestGroup';
    653     ksResultsGroupingTypeBuildRev   = 'ResultsGroupingTypeBuild';
     653    ksResultsGroupingTypeBuildCat   = 'ResultsGroupingTypeBuildCat';
     654    ksResultsGroupingTypeBuildRev   = 'ResultsGroupingTypeBuildRev';
    654655    ksResultsGroupingTypeTestBox    = 'ResultsGroupingTypeTestBox';
    655656    ksResultsGroupingTypeTestCase   = 'ResultsGroupingTypeTestCase';
     657    ksResultsGroupingTypeOS         = 'ResultsGroupingTypeOS';
     658    ksResultsGroupingTypeArch       = 'ResultsGroupingTypeArch';
    656659    ksResultsGroupingTypeSchedGroup = 'ResultsGroupingTypeSchedGroup';
    657660
     
    793796        ksResultsGroupingTypeTestBox:    ('', 'TestSets.idTestBox',       None,                      {},),
    794797        ksResultsGroupingTypeTestCase:   ('', 'TestSets.idTestCase',      None,                      {},),
     798        ksResultsGroupingTypeOS:                (
     799            ', TestBoxes',
     800            'TestBoxes.idStrOs',
     801            ' AND TestBoxes.idGenTestBox = TestSets.idGenTestBox',
     802            {},
     803        ),
     804        ksResultsGroupingTypeArch:       (
     805            ', TestBoxes',
     806            'TestBoxes.idStrCpuArch',
     807            ' AND TestBoxes.idGenTestBox = TestSets.idGenTestBox',
     808            {},
     809        ),
     810        ksResultsGroupingTypeBuildCat:   ('', 'TestSets.idBuildCategory', None,                      {},),
    795811        ksResultsGroupingTypeBuildRev: (
    796812            ', Builds',
     
    11861202        return aoRet
    11871203
     1204    def getOSes(self, tsNow, sPeriod):
     1205        """
     1206        Get a list of [idStrOs, sOs] tuples of the OSes that appears in the specified result period.
     1207        """
     1208
     1209        # Note! INNER JOIN TestBoxesWithStrings performs miserable compared to LEFT OUTER JOIN. Doesn't matter for the result
     1210        #       because TestSets.idGenTestBox is a foreign key and unique in TestBoxes.  So, let's do what ever is faster.
     1211        self._oDb.execute('SELECT DISTINCT TestBoxesWithStrings.idStrOs, TestBoxesWithStrings.sOs\n'
     1212                          'FROM   ( SELECT idTestBox         AS idTestBox,\n'
     1213                          '                MAX(idGenTestBox) AS idGenTestBox\n'
     1214                          '         FROM   TestSets\n'
     1215                          '         WHERE  ' + self._getTimePeriodQueryPart(tsNow, sPeriod, '        ') +
     1216                          '         GROUP BY idTestBox\n'
     1217                          '       ) AS TestBoxIDs\n'
     1218                          '       LEFT OUTER JOIN TestBoxesWithStrings\n'
     1219                          '                    ON TestBoxesWithStrings.idGenTestBox = TestBoxIDs.idGenTestBox\n'
     1220                          'ORDER BY TestBoxesWithStrings.sOs\n' );
     1221        return self._oDb.fetchAll();
     1222
     1223    def getArchitectures(self, tsNow, sPeriod):
     1224        """
     1225        Get a list of [idStrCpuArch, sCpuArch] tuples of the architecutres
     1226        that appears in the specified result period.
     1227        """
     1228
     1229        # Note! INNER JOIN TestBoxesWithStrings performs miserable compared to LEFT OUTER JOIN. Doesn't matter for the result
     1230        #       because TestSets.idGenTestBox is a foreign key and unique in TestBoxes.  So, let's do what ever is faster.
     1231        self._oDb.execute('SELECT DISTINCT TestBoxesWithStrings.idStrCpuArch, TestBoxesWithStrings.sCpuArch\n'
     1232                          'FROM   ( SELECT idTestBox         AS idTestBox,\n'
     1233                          '                MAX(idGenTestBox) AS idGenTestBox\n'
     1234                          '         FROM   TestSets\n'
     1235                          '         WHERE  ' + self._getTimePeriodQueryPart(tsNow, sPeriod, '        ') +
     1236                          '         GROUP BY idTestBox\n'
     1237                          '       ) AS TestBoxIDs\n'
     1238                          '       LEFT OUTER JOIN TestBoxesWithStrings\n'
     1239                          '                    ON TestBoxesWithStrings.idGenTestBox = TestBoxIDs.idGenTestBox\n'
     1240                          'ORDER BY TestBoxesWithStrings.sCpuArch\n' );
     1241        return self._oDb.fetchAll();
     1242
     1243    def getBuildCategories(self, tsNow, sPeriod):
     1244        """
     1245        Get a list of BuildCategoryData that appears in the specified result period.
     1246        """
     1247
     1248        self._oDb.execute('SELECT DISTINCT BuildCategories.*\n'
     1249                          'FROM   ( SELECT DISTINCT idBuildCategory AS idBuildCategory\n'
     1250                          '         FROM   TestSets\n'
     1251                          '         WHERE  ' + self._getTimePeriodQueryPart(tsNow, sPeriod, '        ') +
     1252                          '       ) AS BuildCategoryIDs\n'
     1253                          '       LEFT OUTER JOIN BuildCategories\n'
     1254                          '                    ON BuildCategories.idBuildCategory = BuildCategoryIDs.idBuildCategory\n'
     1255                          'ORDER BY BuildCategories.sProduct, BuildCategories.sBranch, BuildCategories.sType\n');
     1256        aoRet = [];
     1257        for aoRow in self._oDb.fetchAll():
     1258            aoRet.append(BuildCategoryData().initFromDbRow(aoRow));
     1259        return aoRet;
     1260
    11881261    def getSchedGroups(self, tsNow, sPeriod):
    11891262        """
  • trunk/src/VBox/ValidationKit/testmanager/webui/template-details.html

    r52776 r64951  
    3535</div>
    3636
    37 <div id="main">
     37<div id="main" tabindex="1">
    3838    @@PAGE_BODY@@
    3939
  • trunk/src/VBox/ValidationKit/testmanager/webui/template.html

    r61252 r64951  
    1 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
     1<!DOCTYPE HTML>
    22<html lang="en">
    33<head>
     
    4747</div>
    4848
    49 <div id="main">
     49<div id="main" tabindex="1">
    5050    @@PAGE_BODY@@
    5151
  • trunk/src/VBox/ValidationKit/testmanager/webui/wuimain.py

    r64529 r64951  
    5858    ksActionResultsGroupedByTestGroup   = 'ResultsGroupedByTestGroup'
    5959    ksActionResultsGroupedByBuildRev    = 'ResultsGroupedByBuildRev'
     60    ksActionResultsGroupedByBuildCat    = 'ResultsGroupedByBuildCat'
    6061    ksActionResultsGroupedByTestBox     = 'ResultsGroupedByTestBox'
    6162    ksActionResultsGroupedByTestCase    = 'ResultsGroupedByTestCase'
     63    ksActionResultsGroupedByOS          = 'ResultsGroupedByOS'
     64    ksActionResultsGroupedByArch        = 'ResultsGroupedByArch'
    6265    ksActionTestSetDetails              = 'TestSetDetails';
    6366    ksActionTestResultDetails           = ksActionTestSetDetails;
     
    199202        self._dDispatch[self.ksActionResultsGroupedByTestGroup]     = self._actionResultsGroupedByTestGroup;
    200203        self._dDispatch[self.ksActionResultsGroupedByBuildRev]      = self._actionResultsGroupedByBuildRev;
     204        self._dDispatch[self.ksActionResultsGroupedByBuildCat]      = self._actionResultsGroupedByBuildCat;
    201205        self._dDispatch[self.ksActionResultsGroupedByTestBox]       = self._actionResultsGroupedByTestBox;
    202206        self._dDispatch[self.ksActionResultsGroupedByTestCase]      = self._actionResultsGroupedByTestCase;
     207        self._dDispatch[self.ksActionResultsGroupedByOS]            = self._actionResultsGroupedByOS;
     208        self._dDispatch[self.ksActionResultsGroupedByArch]          = self._actionResultsGroupedByArch;
    203209        self._dDispatch[self.ksActionResultsGroupedBySchedGroup]    = self._actionResultsGroupedBySchedGroup;
    204210
     
    262268                    [ 'Grouped by TestBox',          sActUrlBase + self.ksActionResultsGroupedByTestBox    + sSheriff ],
    263269                    [ 'Grouped by Test Case',        sActUrlBase + self.ksActionResultsGroupedByTestCase   + sSheriff ],
     270                    [ 'Grouped by OS',               sActUrlBase + self.ksActionResultsGroupedByOS         + sSheriff ],
     271                    [ 'Grouped by Architecture',     sActUrlBase + self.ksActionResultsGroupedByArch       + sSheriff ],
    264272                    [ 'Grouped by Revision',         sActUrlBase + self.ksActionResultsGroupedByBuildRev   + sSheriff ],
     273                    [ 'Grouped by Build Category',   sActUrlBase + self.ksActionResultsGroupedByBuildCat   + sSheriff ],
    265274                ]
    266275            ],
     
    283292                    [ 'Grouped by TestBox',          sActUrlBase + self.ksActionResultsGroupedByTestBox    + sExtraTimeNav ],
    284293                    [ 'Grouped by Test Case',        sActUrlBase + self.ksActionResultsGroupedByTestCase   + sExtraTimeNav ],
     294                    [ 'Grouped by OS',               sActUrlBase + self.ksActionResultsGroupedByOS         + sExtraTimeNav ],
     295                    [ 'Grouped by Architecture',     sActUrlBase + self.ksActionResultsGroupedByArch       + sExtraTimeNav ],
    285296                    [ 'Grouped by Revision',         sActUrlBase + self.ksActionResultsGroupedByBuildRev   + sExtraTimeNav ],
     297                    [ 'Grouped by Build Category',   sActUrlBase + self.ksActionResultsGroupedByBuildCat   + sExtraTimeNav ],
    286298                ]
    287299            ],
     
    294306                    [ 'Grouped by TestBox',          sActUrlBase + self.ksActionResultsGroupedByTestBox    + sOnlyFailures ],
    295307                    [ 'Grouped by Test Case',        sActUrlBase + self.ksActionResultsGroupedByTestCase   + sOnlyFailures ],
     308                    [ 'Grouped by OS',               sActUrlBase + self.ksActionResultsGroupedByOS         + sOnlyFailures ],
     309                    [ 'Grouped by Architecture',     sActUrlBase + self.ksActionResultsGroupedByArch       + sOnlyFailures ],
    296310                    [ 'Grouped by Revision',         sActUrlBase + self.ksActionResultsGroupedByBuildRev   + sOnlyFailures ],
     311                    [ 'Grouped by Build Category',   sActUrlBase + self.ksActionResultsGroupedByBuildCat   + sOnlyFailures ],
    297312                ]
    298313            ],
     
    764779            self._sPageTitle = 'Grouped by Build'
    765780
     781        elif enmResultsGroupingType == TestResultLogic.ksResultsGroupingTypeBuildCat:
     782            aoTmp = oTrLogic.getBuildCategories(tsNow = tsEffective, sPeriod = sCurPeriod)
     783            aoGroupMembers = sorted(list(set([ ( x.idBuildCategory, '%s / %s / %s / %s'
     784                                                 % ( x.sProduct, x.sBranch, ', '.join(x.asOsArches), x.sType) )
     785                                               for x in aoTmp ])),
     786                                    reverse = True, key = lambda asData: asData[1]);
     787            self._sPageTitle = 'Grouped by Build Category'
     788
    766789        elif enmResultsGroupingType == TestResultLogic.ksResultsGroupingTypeTestCase:
    767790            aoTmp = oTrLogic.getTestCases(tsNow = tsEffective, sPeriod = sCurPeriod)
     
    769792                                    reverse = False, key = lambda asData: asData[1])
    770793            self._sPageTitle = 'Grouped by Test Case'
     794
     795        elif enmResultsGroupingType == TestResultLogic.ksResultsGroupingTypeOS:
     796            aoTmp = oTrLogic.getOSes(tsNow = tsEffective, sPeriod = sCurPeriod)
     797            aoGroupMembers = sorted(list(set(aoTmp)), reverse = False, key = lambda asData: asData[1]);
     798            self._sPageTitle = 'Grouped by OS'
     799
     800        elif enmResultsGroupingType == TestResultLogic.ksResultsGroupingTypeArch:
     801            aoTmp = oTrLogic.getArchitectures(tsNow = tsEffective, sPeriod = sCurPeriod)
     802            aoGroupMembers = sorted(list(set(aoTmp)), reverse = False, key = lambda asData: asData[1]);
     803            self._sPageTitle = 'Grouped by Architecture'
    771804
    772805        elif enmResultsGroupingType == TestResultLogic.ksResultsGroupingTypeSchedGroup:
     
    875908                                                 TestResultLogic, WuiGroupedResultList);
    876909
     910    def _actionResultsGroupedByBuildCat(self):
     911        """ Action wrapper. """
     912        from testmanager.webui.wuitestresult        import WuiGroupedResultList;
     913        from testmanager.core.testresults           import TestResultLogic;
     914        return self._actionGroupedResultsListing(TestResultLogic.ksResultsGroupingTypeBuildCat,
     915                                                 TestResultLogic, WuiGroupedResultList);
     916
    877917    def _actionResultsGroupedByTestBox(self):
    878918        """ Action wrapper. """
     
    887927        from testmanager.core.testresults           import TestResultLogic;
    888928        return self._actionGroupedResultsListing(TestResultLogic.ksResultsGroupingTypeTestCase,
     929                                                 TestResultLogic, WuiGroupedResultList);
     930
     931    def _actionResultsGroupedByOS(self):
     932        """ Action wrapper. """
     933        from testmanager.webui.wuitestresult        import WuiGroupedResultList;
     934        from testmanager.core.testresults           import TestResultLogic;
     935        return self._actionGroupedResultsListing(TestResultLogic.ksResultsGroupingTypeOS,
     936                                                 TestResultLogic, WuiGroupedResultList);
     937
     938    def _actionResultsGroupedByArch(self):
     939        """ Action wrapper. """
     940        from testmanager.webui.wuitestresult        import WuiGroupedResultList;
     941        from testmanager.core.testresults           import TestResultLogic;
     942        return self._actionGroupedResultsListing(TestResultLogic.ksResultsGroupingTypeArch,
    889943                                                 TestResultLogic, WuiGroupedResultList);
    890944
Note: See TracChangeset for help on using the changeset viewer.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette