Changeset 56764 in vbox
- Timestamp:
- Jul 3, 2015 3:03:42 AM (10 years ago)
- svn:sync-xref-src-repo-rev:
- 101413
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/ValidationKit/testmanager/core/testresults.py
r56295 r56764 520 520 ksResultsGroupingTypeSchedGroup = 'ResultsGroupingTypeSchedGroup' 521 521 522 ksBaseTables = 'BuildCategories, Builds, TestBoxes, TestResults, TestCases, TestCaseArgs,\n' \523 + ' TestSets LEFT OUTER JOIN Builds AS TestSuiteBits\n' \524 ' ON TestSets.idBuildTestSuite = TestSuiteBits.idBuild\n';525 526 ksBasePreCondition = 'TestSets.idTestSet = TestResults.idTestSet\n' \527 + ' AND TestResults.idTestResultParent is NULL\n' \528 + ' AND TestSets.idBuild = Builds.idBuild\n' \529 + ' AND Builds.tsExpire > TestSets.tsCreated\n' \530 + ' AND Builds.tsEffective <= TestSets.tsCreated\n' \531 + ' AND Builds.idBuildCategory = BuildCategories.idBuildCategory\n' \532 + ' AND TestSets.idGenTestBox = TestBoxes.idGenTestBox\n' \533 + ' AND TestSets.idGenTestCase = TestCases.idGenTestCase\n' \534 + ' AND TestSets.idGenTestCaseArgs = TestCaseArgs.idGenTestCaseArgs\n'535 522 kdResultGroupingMap = { 536 ksResultsGroupingTypeNone: (ksBaseTables, 537 ksBasePreCondition,), 538 539 ksResultsGroupingTypeTestGroup: (ksBaseTables, 540 ksBasePreCondition + ' AND TestSets.idTestGroup',), 541 542 ksResultsGroupingTypeBuildRev: (ksBaseTables, 543 ksBasePreCondition + ' AND Builds.iRevision',), 544 545 ksResultsGroupingTypeTestBox: (ksBaseTables, 546 ksBasePreCondition + ' AND TestSets.idTestBox',), 547 548 ksResultsGroupingTypeTestCase: (ksBaseTables, 549 ksBasePreCondition + ' AND TestSets.idTestCase',), 550 551 ksResultsGroupingTypeSchedGroup: (ksBaseTables, 552 ksBasePreCondition + ' AND TestBoxes.idSchedGroup',), 523 ksResultsGroupingTypeNone: ('TestSets', None, None), 524 ksResultsGroupingTypeTestGroup: ('TestSets', 'TestSets.idTestGroup', None), 525 ksResultsGroupingTypeTestBox: ('TestSets', 'TestSets.idTestBox', None), 526 ksResultsGroupingTypeTestCase: ('TestSets', 'TestSets.idTestCase', None), 527 ksResultsGroupingTypeBuildRev: ('TestSets, Builds', 'Builds.iRevision', 528 ' AND Builds.idBuild = TestSets.idBuild' 529 ' AND Builds.tsExpire > TestSets.tsCreated' 530 ' AND Builds.tsEffective <= TestSets.tsCreated' ), 531 ksResultsGroupingTypeSchedGroup: ('TestSets, TestBoxes', 'TestBoxes.idSchedGroup', 532 ' AND TestSets.idGenTestBox = TestBoxes.idGenTestBox'), 553 533 } 554 534 … … 575 555 return sRet 576 556 577 def _getSqlQueryForGroupSearch(self, sWhat, tsNow, sInterval, enmResultsGroupingType, iResultsGroupingValue, fOnlyFailures):578 """579 Returns an SQL query that limits SELECT result580 in order to satisfy @param enmResultsGroupingType.581 """582 583 if enmResultsGroupingType is None:584 raise TMExceptionBase('Unknown grouping type')585 586 if enmResultsGroupingType not in self.kdResultGroupingMap:587 raise TMExceptionBase('Unknown grouping type')588 589 # Get SQL query parameters590 sTables, sCondition = self.kdResultGroupingMap[enmResultsGroupingType]591 592 # Extend SQL query with time period limitation593 sTimePeriodQuery = self._getTimePeriodQueryPart(tsNow, sInterval)594 595 if iResultsGroupingValue is not None:596 sCondition += ' = %d' % iResultsGroupingValue + '\n';597 sCondition += ' AND ' + sTimePeriodQuery598 599 # Extend the condition with test status limitations if requested.600 if fOnlyFailures:601 sCondition += '\n AND TestSets.enmStatus != \'success\'::TestStatus_T' \602 '\n AND TestSets.enmStatus != \'running\'::TestStatus_T';603 604 # Assemble the query.605 sQuery = 'SELECT DISTINCT %s\n' % sWhat606 sQuery += 'FROM %s\n' % sTables607 sQuery += 'WHERE %s\n' % sCondition608 609 return sQuery610 611 557 def fetchResultsForListing(self, iStart, cMaxRows, tsNow, sInterval, enmResultsGroupingType, iResultsGroupingValue, 612 558 fOnlyFailures): … … 625 571 """ 626 572 627 sWhat = 'TestSets.idTestSet,\n' \ 628 ' BuildCategories.idBuildCategory,\n' \ 629 ' BuildCategories.sProduct,\n' \ 630 ' BuildCategories.sRepository,\n' \ 631 ' BuildCategories.sBranch,\n' \ 632 ' BuildCategories.sType,\n' \ 633 ' Builds.idBuild,\n' \ 634 ' Builds.sVersion,\n' \ 635 ' Builds.iRevision,\n' \ 636 ' TestBoxes.sOs,\n' \ 637 ' TestBoxes.sOsVersion,\n' \ 638 ' TestBoxes.sCpuArch,\n' \ 639 ' TestBoxes.sCpuVendor,\n' \ 640 ' TestBoxes.sCpuName,\n' \ 641 ' TestBoxes.cCpus,\n' \ 642 ' TestBoxes.fCpuHwVirt,\n' \ 643 ' TestBoxes.fCpuNestedPaging,\n' \ 644 ' TestBoxes.fCpu64BitGuest,\n' \ 645 ' TestBoxes.idTestBox,\n' \ 646 ' TestBoxes.sName,\n' \ 647 ' TestResults.tsCreated,\n' \ 648 ' COALESCE(TestResults.tsElapsed, CURRENT_TIMESTAMP - TestResults.tsCreated),\n' \ 649 ' TestSets.enmStatus,\n' \ 650 ' TestResults.cErrors,\n' \ 651 ' TestCases.idTestCase,\n' \ 652 ' TestCases.sName,\n' \ 653 ' TestCases.sBaseCmd,\n' \ 654 ' TestCaseArgs.sArgs,\n' \ 655 ' TestSuiteBits.idBuild AS idBuildTestSuite,\n' \ 656 ' TestSuiteBits.iRevision AS iRevisionTestSuite,\n' \ 657 ' (TestSets.tsDone IS NULL) SortRunningFirst' \ 658 ; 659 660 sSqlQuery = self._getSqlQueryForGroupSearch(sWhat, tsNow, sInterval, enmResultsGroupingType, iResultsGroupingValue, 661 fOnlyFailures); 662 663 sSqlQuery += 'ORDER BY SortRunningFirst DESC, TestSets.idTestSet DESC\n'; 664 sSqlQuery += 'LIMIT %s OFFSET %s\n' % (cMaxRows, iStart,); 665 666 self._oDb.execute(sSqlQuery); 573 # 574 # Get SQL query parameters 575 # 576 if enmResultsGroupingType is None: 577 raise TMExceptionBase('Unknown grouping type') 578 if enmResultsGroupingType not in self.kdResultGroupingMap: 579 raise TMExceptionBase('Unknown grouping type') 580 sTables, sGroupingField, sGroupingCondition = self.kdResultGroupingMap[enmResultsGroupingType] 581 582 # 583 # Construct the query. 584 # 585 sQuery = 'SELECT DISTINCT TestSets.idTestSet,\n' \ 586 ' BuildCategories.idBuildCategory,\n' \ 587 ' BuildCategories.sProduct,\n' \ 588 ' BuildCategories.sRepository,\n' \ 589 ' BuildCategories.sBranch,\n' \ 590 ' BuildCategories.sType,\n' \ 591 ' Builds.idBuild,\n' \ 592 ' Builds.sVersion,\n' \ 593 ' Builds.iRevision,\n' \ 594 ' TestBoxes.sOs,\n' \ 595 ' TestBoxes.sOsVersion,\n' \ 596 ' TestBoxes.sCpuArch,\n' \ 597 ' TestBoxes.sCpuVendor,\n' \ 598 ' TestBoxes.sCpuName,\n' \ 599 ' TestBoxes.cCpus,\n' \ 600 ' TestBoxes.fCpuHwVirt,\n' \ 601 ' TestBoxes.fCpuNestedPaging,\n' \ 602 ' TestBoxes.fCpu64BitGuest,\n' \ 603 ' TestBoxes.idTestBox,\n' \ 604 ' TestBoxes.sName,\n' \ 605 ' TestResults.tsCreated,\n' \ 606 ' COALESCE(TestResults.tsElapsed, CURRENT_TIMESTAMP - TestResults.tsCreated),\n' \ 607 ' TestSets.enmStatus,\n' \ 608 ' TestResults.cErrors,\n' \ 609 ' TestCases.idTestCase,\n' \ 610 ' TestCases.sName,\n' \ 611 ' TestCases.sBaseCmd,\n' \ 612 ' TestCaseArgs.sArgs,\n' \ 613 ' TestSuiteBits.idBuild AS idBuildTestSuite,\n' \ 614 ' TestSuiteBits.iRevision AS iRevisionTestSuite,\n' \ 615 ' (TestSets.tsDone IS NULL) SortRunningFirst\n' \ 616 'FROM BuildCategories,\n' \ 617 ' Builds,\n' \ 618 ' TestBoxes,\n' \ 619 ' TestResults,\n' \ 620 ' TestCases,\n' \ 621 ' TestCaseArgs,\n' \ 622 ' ( SELECT TestSets.idTestSet AS idTestSet,\n' \ 623 ' TestSets.tsDone AS tsDone,\n' \ 624 ' TestSets.tsCreated AS tsCreated,\n' \ 625 ' TestSets.enmStatus AS enmStatus,\n' \ 626 ' TestSets.idBuild AS idBuild,\n' \ 627 ' TestSets.idBuildTestSuite AS idBuildTestSuite,\n' \ 628 ' TestSets.idGenTestBox AS idGenTestBox,\n' \ 629 ' TestSets.idGenTestCase AS idGenTestCase,\n' \ 630 ' TestSets.idGenTestCaseArgs AS idGenTestCaseArgs\n' \ 631 ' FROM ' + sTables + '\n' \ 632 ' WHERE ' + self._getTimePeriodQueryPart(tsNow, sInterval); 633 if fOnlyFailures: 634 sQuery += ' AND TestSets.enmStatus != \'success\'::TestStatus_T' \ 635 ' AND TestSets.enmStatus != \'running\'::TestStatus_T'; 636 if sGroupingField is not None: 637 sQuery += ' AND %s = %d\n' % (sGroupingField, iResultsGroupingValue,); 638 if sGroupingCondition is not None: 639 sQuery += sGroupingCondition.replace(' AND ', ' AND '); 640 sQuery += ' ORDER BY (TestSets.tsDone IS NULL) DESC, TestSets.idTestSet DESC\n' \ 641 ' LIMIT %s OFFSET %s\n' % (cMaxRows, iStart,); 642 643 sQuery += ' ) AS TestSets\n' \ 644 ' LEFT OUTER JOIN Builds AS TestSuiteBits\n' \ 645 ' ON TestSets.idBuildTestSuite = TestSuiteBits.idBuild\n' \ 646 'WHERE TestSets.idTestSet = TestResults.idTestSet\n' \ 647 ' AND TestResults.idTestResultParent is NULL\n' \ 648 ' AND TestSets.idBuild = Builds.idBuild\n' \ 649 ' AND Builds.tsExpire > TestSets.tsCreated\n' \ 650 ' AND Builds.tsEffective <= TestSets.tsCreated\n' \ 651 ' AND Builds.idBuildCategory = BuildCategories.idBuildCategory\n' \ 652 ' AND TestSets.idGenTestBox = TestBoxes.idGenTestBox\n' \ 653 ' AND TestSets.idGenTestCase = TestCases.idGenTestCase\n' \ 654 ' AND TestSets.idGenTestCaseArgs = TestCaseArgs.idGenTestCaseArgs\n' \ 655 'ORDER BY (TestSets.tsDone IS NULL) DESC, TestSets.idTestSet DESC\n' 656 657 # 658 # Execute the query and return the wrapped results. 659 # 660 self._oDb.execute(sQuery); 667 661 668 662 aoRows = []; … … 684 678 """ 685 679 686 sSqlQuery = self._getSqlQueryForGroupSearch('COUNT(TestSets.idTestSet)', tsNow, sInterval, 687 enmResultsGroupingType, iResultsGroupingValue, fOnlyFailures) 688 self._oDb.execute(sSqlQuery) 680 # 681 # Get SQL query parameters 682 # 683 if enmResultsGroupingType is None: 684 raise TMExceptionBase('Unknown grouping type') 685 686 if enmResultsGroupingType not in self.kdResultGroupingMap: 687 raise TMExceptionBase('Unknown grouping type') 688 sTables, sGroupingField, sGroupingCondition = self.kdResultGroupingMap[enmResultsGroupingType] 689 690 # 691 # Construct the query. 692 # 693 sQuery = 'SELECT COUNT(idTestSet)\n' \ 694 'FROM ' + sTables + '\n' \ 695 'WHERE ' + self._getTimePeriodQueryPart(tsNow, sInterval); 696 if fOnlyFailures: 697 sQuery += ' AND TestSets.enmStatus != \'success\'::TestStatus_T' \ 698 ' AND TestSets.enmStatus != \'running\'::TestStatus_T'; 699 if sGroupingField is not None: 700 sQuery += ' AND %s = %d\n' % (sGroupingField, iResultsGroupingValue,); 701 if sGroupingCondition is not None: 702 sQuery += sGroupingCondition.replace(' AND ', ' AND '); 703 704 # 705 # Execute the query and return the result. 706 # 707 self._oDb.execute(sQuery) 689 708 return self._oDb.fetchOne()[0] 690 709
Note:
See TracChangeset
for help on using the changeset viewer.