def _formatListEntry(self, iEntry):
        """
        Format *show all* table entry
        """

        from testmanager.webui.wuiadmin import WuiAdmin
        oEntry = self._aoEntries[iEntry]

        aoActions = [
            WuiTmLink(
                'Details', WuiAdmin.ksScriptName, {
                    WuiAdmin.ksParamAction: WuiAdmin.ksActionBuildSrcDetails,
                    BuildSourceData.ksParam_idBuildSrc: oEntry.idBuildSrc,
                    WuiAdmin.ksParamEffectiveDate: self._tsEffectiveDate,
                }),
            WuiTmLink(
                'Clone', WuiAdmin.ksScriptName, {
                    WuiAdmin.ksParamAction: WuiAdmin.ksActionBuildSrcClone,
                    BuildSourceData.ksParam_idBuildSrc: oEntry.idBuildSrc,
                    WuiAdmin.ksParamEffectiveDate: self._tsEffectiveDate,
                }),
        ]
        if isDbTimestampInfinity(oEntry.tsExpire):
            aoActions += [
                WuiTmLink(
                    'Modify', WuiAdmin.ksScriptName, {
                        WuiAdmin.ksParamAction: WuiAdmin.ksActionBuildSrcEdit,
                        BuildSourceData.ksParam_idBuildSrc: oEntry.idBuildSrc
                    }),
                WuiTmLink(
                    'Remove',
                    WuiAdmin.ksScriptName, {
                        WuiAdmin.ksParamAction:
                        WuiAdmin.ksActionBuildSrcDoRemove,
                        BuildSourceData.ksParam_idBuildSrc: oEntry.idBuildSrc
                    },
                    sConfirm='Are you sure you want to remove build source #%d?'
                    % (oEntry.idBuildSrc, ))
            ]

        return [
            oEntry.idBuildSrc,
            oEntry.sName,
            oEntry.sDescription,
            oEntry.sProduct,
            oEntry.sBranch,
            self._getSubList(oEntry.asTypes),
            self._getSubList(oEntry.asOsArches),
            oEntry.iFirstRevision,
            oEntry.iLastRevision,
            utils.formatIntervalSeconds2(oEntry.cSecMaxAge)
            if oEntry.cSecMaxAge is not None else None,
            aoActions,
        ]
Пример #2
0
    def _formatListEntry(self, iEntry):
        from testmanager.webui.wuiadmin import WuiAdmin
        oEntry = self._aoEntries[iEntry];

        aoActions = [];
        if oEntry.sLogUrl is not None:
            aoActions.append(WuiBuildLogLink(oEntry.sLogUrl, 'Build Log'));

        dParams = { WuiAdmin.ksParamAction:                    WuiAdmin.ksActionBuildBlacklistAdd,
                    BuildBlacklistData.ksParam_sProduct:       oEntry.oCat.sProduct,
                    BuildBlacklistData.ksParam_sBranch:        oEntry.oCat.sBranch,
                    BuildBlacklistData.ksParam_asTypes:        oEntry.oCat.sType,
                    BuildBlacklistData.ksParam_asOsArches:     oEntry.oCat.asOsArches,
                    BuildBlacklistData.ksParam_iFirstRevision: oEntry.iRevision,
                    BuildBlacklistData.ksParam_iLastRevision:  oEntry.iRevision }

        if self._oDisp is None or not self._oDisp.isReadOnlyUser():
            aoActions += [
                WuiTmLink('Blacklist', WuiAdmin.ksScriptName, dParams),
                WuiTmLink('Details', WuiAdmin.ksScriptName,
                          { WuiAdmin.ksParamAction: WuiAdmin.ksActionBuildDetails,
                            BuildData.ksParam_idBuild: oEntry.idBuild,
                            WuiAdmin.ksParamEffectiveDate: self._tsEffectiveDate, }),
                WuiTmLink('Clone', WuiAdmin.ksScriptName,
                          { WuiAdmin.ksParamAction: WuiAdmin.ksActionBuildClone,
                            BuildData.ksParam_idBuild: oEntry.idBuild,
                            WuiAdmin.ksParamEffectiveDate: self._tsEffectiveDate, }),
            ];
            if isDbTimestampInfinity(oEntry.tsExpire):
                aoActions += [
                    WuiTmLink('Modify', WuiAdmin.ksScriptName,
                              { WuiAdmin.ksParamAction: WuiAdmin.ksActionBuildEdit,
                                BuildData.ksParam_idBuild: oEntry.idBuild }),
                    WuiTmLink('Remove', WuiAdmin.ksScriptName,
                              { WuiAdmin.ksParamAction: WuiAdmin.ksActionBuildDoRemove,
                                BuildData.ksParam_idBuild: oEntry.idBuild },
                              sConfirm = 'Are you sure you want to remove build #%d?' % (oEntry.idBuild,) ),
                ];

        return [ oEntry.idBuild,
                 oEntry.oCat.sProduct,
                 oEntry.oCat.sBranch,
                 WuiSvnLinkWithTooltip(oEntry.iRevision, oEntry.oCat.sRepository,
                                       sName = '%s r%s' % (oEntry.sVersion, oEntry.iRevision,)),
                 oEntry.oCat.sType,
                 ' '.join(oEntry.oCat.asOsArches),
                 'batch' if oEntry.uidAuthor is None else oEntry.uidAuthor,
                 self.formatTsShort(oEntry.tsCreated),
                 oEntry.sBinaries if not oEntry.fBinariesDeleted else '<Deleted>',
                 aoActions,
        ];
    def _formatListEntry(self, iEntry):
        from testmanager.webui.wuiadmin import WuiAdmin
        oEntry = self._aoEntries[iEntry];

        aoActions = [];
        if oEntry.sLogUrl is not None:
            aoActions.append(WuiBuildLogLink(oEntry.sLogUrl, 'Build Log'));

        dParams = { WuiAdmin.ksParamAction:                    WuiAdmin.ksActionBuildBlacklistAdd,
                    BuildBlacklistData.ksParam_sProduct:       oEntry.oCat.sProduct,
                    BuildBlacklistData.ksParam_sBranch:        oEntry.oCat.sBranch,
                    BuildBlacklistData.ksParam_asTypes:        oEntry.oCat.sType,
                    BuildBlacklistData.ksParam_asOsArches:     oEntry.oCat.asOsArches,
                    BuildBlacklistData.ksParam_iFirstRevision: oEntry.iRevision,
                    BuildBlacklistData.ksParam_iLastRevision:  oEntry.iRevision }

        if self._oDisp is None or not self._oDisp.isReadOnlyUser():
            aoActions += [
                WuiTmLink('Blacklist', WuiAdmin.ksScriptName, dParams),
                WuiTmLink('Details', WuiAdmin.ksScriptName,
                          { WuiAdmin.ksParamAction: WuiAdmin.ksActionBuildDetails,
                            BuildData.ksParam_idBuild: oEntry.idBuild,
                            WuiAdmin.ksParamEffectiveDate: self._tsEffectiveDate, }),
                WuiTmLink('Clone', WuiAdmin.ksScriptName,
                          { WuiAdmin.ksParamAction: WuiAdmin.ksActionBuildClone,
                            BuildData.ksParam_idBuild: oEntry.idBuild,
                            WuiAdmin.ksParamEffectiveDate: self._tsEffectiveDate, }),
            ];
            if isDbTimestampInfinity(oEntry.tsExpire):
                aoActions += [
                    WuiTmLink('Modify', WuiAdmin.ksScriptName,
                              { WuiAdmin.ksParamAction: WuiAdmin.ksActionBuildEdit,
                                BuildData.ksParam_idBuild: oEntry.idBuild }),
                    WuiTmLink('Remove', WuiAdmin.ksScriptName,
                              { WuiAdmin.ksParamAction: WuiAdmin.ksActionBuildDoRemove,
                                BuildData.ksParam_idBuild: oEntry.idBuild },
                              sConfirm = 'Are you sure you want to remove build #%d?' % (oEntry.idBuild,) ),
                ];

        return [ oEntry.idBuild,
                 oEntry.oCat.sProduct,
                 oEntry.oCat.sBranch,
                 WuiSvnLinkWithTooltip(oEntry.iRevision, oEntry.oCat.sRepository,
                                       sName = '%s r%s' % (oEntry.sVersion, oEntry.iRevision,)),
                 oEntry.oCat.sType,
                 ' '.join(oEntry.oCat.asOsArches),
                 'batch' if oEntry.uidAuthor is None else oEntry.uidAuthor,
                 self.formatTsShort(oEntry.tsCreated),
                 oEntry.sBinaries if not oEntry.fBinariesDeleted else '<Deleted>',
                 aoActions,
        ];
    def _formatListEntry(self, iEntry):
        """
        Format *show all* table entry
        """

        from testmanager.webui.wuiadmin import WuiAdmin
        oEntry  = self._aoEntries[iEntry]

        aoActions = [
            WuiTmLink('Details', WuiAdmin.ksScriptName,
                      { WuiAdmin.ksParamAction: WuiAdmin.ksActionBuildSrcDetails,
                        BuildSourceData.ksParam_idBuildSrc: oEntry.idBuildSrc,
                        WuiAdmin.ksParamEffectiveDate: self._tsEffectiveDate, }),
        ];
        if self._oDisp is None or not self._oDisp.isReadOnlyUser():
            aoActions += [
                WuiTmLink('Clone', WuiAdmin.ksScriptName,
                          { WuiAdmin.ksParamAction: WuiAdmin.ksActionBuildSrcClone,
                            BuildSourceData.ksParam_idBuildSrc: oEntry.idBuildSrc,
                            WuiAdmin.ksParamEffectiveDate: self._tsEffectiveDate, }),
            ];
            if isDbTimestampInfinity(oEntry.tsExpire):
                aoActions += [
                    WuiTmLink('Modify', WuiAdmin.ksScriptName,
                              { WuiAdmin.ksParamAction: WuiAdmin.ksActionBuildSrcEdit,
                                BuildSourceData.ksParam_idBuildSrc: oEntry.idBuildSrc } ),
                    WuiTmLink('Remove', WuiAdmin.ksScriptName,
                              { WuiAdmin.ksParamAction: WuiAdmin.ksActionBuildSrcDoRemove,
                                BuildSourceData.ksParam_idBuildSrc: oEntry.idBuildSrc },
                              sConfirm = 'Are you sure you want to remove build source #%d?' % (oEntry.idBuildSrc,) )
                ];

        return [ oEntry.idBuildSrc,
                 oEntry.sName,
                 oEntry.sDescription,
                 oEntry.sProduct,
                 oEntry.sBranch,
                 self._getSubList(oEntry.asTypes),
                 self._getSubList(oEntry.asOsArches),
                 oEntry.iFirstRevision,
                 oEntry.iLastRevision,
                 utils.formatIntervalSeconds2(oEntry.cSecMaxAge) if oEntry.cSecMaxAge is not None else None,
                 aoActions,
        ]
Пример #5
0
    def _formatListEntry(self, iEntry):
        oEntry = self._aoEntries[iEntry]
        from testmanager.webui.wuiadmin import WuiAdmin

        aoRet = \
        [
            oEntry.sName.replace('-', u'\u2011'),
            'Enabled' if oEntry.fEnabled else 'Disabled',
            utils.formatIntervalSeconds(oEntry.cSecTimeout),
        ]

        # Base command and variations.
        fNoGang = True
        fNoSubName = True
        fAllDefaultTimeouts = True
        for oVar in oEntry.aoTestCaseArgs:
            if fNoSubName and oVar.sSubName is not None and len(
                    oVar.sSubName.strip()) > 0:
                fNoSubName = False
            if oVar.cGangMembers > 1:
                fNoGang = False
            if oVar.cSecTimeout is not None:
                fAllDefaultTimeouts = False

        sHtml  = '  <table class="tminnertbl" width=100%>\n' \
                 '    <tr>\n' \
                 '      '
        if not fNoSubName:
            sHtml += '<th class="tmtcasubname">Sub-name</th>'
        if not fNoGang:
            sHtml += '<th class="tmtcagangsize">Gang Size</th>'
        if not fAllDefaultTimeouts:
            sHtml += '<th class="tmtcatimeout">Timeout</th>'
        sHtml += '<th>Additional Arguments</b></th>\n' \
                 '    </tr>\n'
        for oTmp in oEntry.aoTestCaseArgs:
            sHtml += '<tr>'
            if not fNoSubName:
                sHtml += '<td>%s</td>' % (webutils.escapeElem(oTmp.sSubName)
                                          if oTmp.sSubName is not None else '')
            if not fNoGang:
                sHtml += '<td>%d</td>' % (oTmp.cGangMembers, )
            if not fAllDefaultTimeouts:
                sHtml += '<td>%s</td>' \
                       % (utils.formatIntervalSeconds(oTmp.cSecTimeout) if oTmp.cSecTimeout is not None else 'Default',)
            sHtml += u'<td>%s</td></tr>' \
                % ( webutils.escapeElem(oTmp.sArgs.replace('-', u'\u2011')) if len(oTmp.sArgs) > 0 else u'\u2011',)
            sHtml += '</tr>\n'
        sHtml += '  </table>'

        aoRet.append(
            [oEntry.sBaseCmd.replace('-', u'\u2011'),
             WuiRawHtml(sHtml)])

        # Next.
        aoRet += [
            oEntry.sValidationKitZips
            if oEntry.sValidationKitZips is not None else '',
        ]

        # Show dependency on other testcases
        if oEntry.aoDepTestCases not in (None, []):
            sHtml = '  <ul class="tmshowall">\n'
            for sTmp in oEntry.aoDepTestCases:
                sHtml += '    <li class="tmshowall"><a href="%s?%s=%s&%s=%s">%s</a></li>\n' \
                       % (WuiAdmin.ksScriptName,
                          WuiAdmin.ksParamAction, WuiAdmin.ksActionTestCaseEdit,
                          TestCaseData.ksParam_idTestCase, sTmp.idTestCase,
                          sTmp.sName)
            sHtml += '  </ul>\n'
        else:
            sHtml = '<ul class="tmshowall"><li class="tmshowall">None</li></ul>\n'
        aoRet.append(WuiRawHtml(sHtml))

        # Show dependency on global resources
        if oEntry.aoDepGlobalResources not in (None, []):
            sHtml = '  <ul class="tmshowall">\n'
            for sTmp in oEntry.aoDepGlobalResources:
                sHtml += '    <li class="tmshowall"><a href="%s?%s=%s&%s=%s">%s</a></li>\n' \
                       % (WuiAdmin.ksScriptName,
                          WuiAdmin.ksParamAction, WuiAdmin.ksActionGlobalRsrcShowEdit,
                          GlobalResourceData.ksParam_idGlobalRsrc, sTmp.idGlobalRsrc,
                          sTmp.sName)
            sHtml += '  </ul>\n'
        else:
            sHtml = '<ul class="tmshowall"><li class="tmshowall">None</li></ul>\n'
        aoRet.append(WuiRawHtml(sHtml))

        # Comment (note).
        aoRet.append(self._formatCommentCell(oEntry.sComment))

        # Show actions that can be taken.
        aoActions = [
            WuiTmLink(
                'Details', WuiAdmin.ksScriptName, {
                    WuiAdmin.ksParamAction: WuiAdmin.ksActionTestCaseDetails,
                    TestCaseData.ksParam_idGenTestCase: oEntry.idGenTestCase
                }),
        ]
        if isDbTimestampInfinity(oEntry.tsExpire):
            aoActions.append(
                WuiTmLink(
                    'Modify', WuiAdmin.ksScriptName, {
                        WuiAdmin.ksParamAction: WuiAdmin.ksActionTestCaseEdit,
                        TestCaseData.ksParam_idTestCase: oEntry.idTestCase
                    }))
        aoActions.append(
            WuiTmLink(
                'Clone', WuiAdmin.ksScriptName, {
                    WuiAdmin.ksParamAction: WuiAdmin.ksActionTestCaseClone,
                    TestCaseData.ksParam_idGenTestCase: oEntry.idGenTestCase
                }))
        if isDbTimestampInfinity(oEntry.tsExpire):
            aoActions.append(
                WuiTmLink(
                    'Remove',
                    WuiAdmin.ksScriptName, {
                        WuiAdmin.ksParamAction:
                        WuiAdmin.ksActionTestCaseDoRemove,
                        TestCaseData.ksParam_idTestCase: oEntry.idTestCase
                    },
                    sConfirm='Are you sure you want to remove test case #%d?' %
                    (oEntry.idTestCase, )))
        aoRet.append(aoActions)

        return aoRet
    def _formatListEntry(self, iEntry):
        oEntry = self._aoEntries[iEntry]
        from testmanager.webui.wuiadmin import WuiAdmin

        #
        # Test case list.
        #
        sHtml = ''
        if len(oEntry.aoMembers) > 0:
            for oMember in oEntry.aoMembers:
                sHtml += '<dl>\n' \
                         '  <dd><strong>%s</strong> (priority: %d) %s %s</dd>\n' \
                       % ( webutils.escapeElem(oMember.oTestCase.sName),
                           oMember.iSchedPriority,
                           WuiTmLink('Details', WuiAdmin.ksScriptName,
                                     { WuiAdmin.ksParamAction: WuiAdmin.ksActionTestCaseDetails,
                                       TestCaseData.ksParam_idGenTestCase: oMember.oTestCase.idGenTestCase, } ).toHtml(),
                           WuiTmLink('Edit', WuiAdmin.ksScriptName,
                                     { WuiAdmin.ksParamAction: WuiAdmin.ksActionTestCaseEdit,
                                       TestCaseData.ksParam_idTestCase: oMember.oTestCase.idTestCase, } ).toHtml()
                           if isDbTimestampInfinity(oMember.oTestCase.tsExpire) else '',
                           )

                sHtml += '  <dt>\n'

                fNoGang = True
                for oVar in oMember.oTestCase.aoTestCaseArgs:
                    if oVar.cGangMembers > 1:
                        fNoGang = False
                        break

                sHtml += '    <table class="tminnertbl" width="100%">\n'
                if fNoGang:
                    sHtml += '      <tr><th>Timeout</th><th>Arguments</th></tr>\n'
                else:
                    sHtml += '      <tr><th>Gang Size</th><th>Timeout</th><th style="text-align:left;">Arguments</th></tr>\n'

                cArgsIncluded = 0
                for oVar in oMember.oTestCase.aoTestCaseArgs:
                    if oMember.aidTestCaseArgs is None or oVar.idTestCaseArgs in oMember.aidTestCaseArgs:
                        cArgsIncluded += 1
                        if fNoGang:
                            sHtml += '      <tr>'
                        else:
                            sHtml += '      <tr><td>%s</td>' % (
                                oVar.cGangMembers, )
                        sHtml += '<td>%s</td><td>%s</td></tr>\n' \
                               % ( utils.formatIntervalSeconds(oMember.oTestCase.cSecTimeout if oVar.cSecTimeout is None
                                                               else oVar.cSecTimeout),
                                   webutils.escapeElem(oVar.sArgs), )
                if cArgsIncluded == 0:
                    sHtml += '      <tr><td colspan="%u">No arguments selected.</td></tr>\n' % (
                        2 if fNoGang else 3, )
                sHtml += '    </table>\n' \
                         '  </dl>\n'
        oTestCases = WuiRawHtml(sHtml)

        #
        # Actions.
        #
        aoActions = [
            WuiTmLink(
                'Details', WuiAdmin.ksScriptName, {
                    WuiAdmin.ksParamAction: WuiAdmin.ksActionTestGroupDetails,
                    TestGroupData.ksParam_idTestGroup: oEntry.idTestGroup,
                    WuiAdmin.ksParamEffectiveDate: self._tsEffectiveDate,
                })
        ]
        if isDbTimestampInfinity(oEntry.tsExpire):
            aoActions.append(
                WuiTmLink(
                    'Modify', WuiAdmin.ksScriptName, {
                        WuiAdmin.ksParamAction: WuiAdmin.ksActionTestGroupEdit,
                        TestGroupData.ksParam_idTestGroup: oEntry.idTestGroup
                    }))
            aoActions.append(
                WuiTmLink(
                    'Clone', WuiAdmin.ksScriptName, {
                        WuiAdmin.ksParamAction:
                        WuiAdmin.ksActionTestGroupClone,
                        TestGroupData.ksParam_idTestGroup: oEntry.idTestGroup,
                        WuiAdmin.ksParamEffectiveDate: self._tsEffectiveDate,
                    }))
            aoActions.append(
                WuiTmLink(
                    'Remove',
                    WuiAdmin.ksScriptName, {
                        WuiAdmin.ksParamAction:
                        WuiAdmin.ksActionTestGroupDoRemove,
                        TestGroupData.ksParam_idTestGroup: oEntry.idTestGroup
                    },
                    sConfirm='Do you really want to remove test group #%d?' %
                    (oEntry.idTestGroup, )))
        else:
            aoActions.append(
                WuiTmLink(
                    'Clone', WuiAdmin.ksScriptName, {
                        WuiAdmin.ksParamAction:
                        WuiAdmin.ksActionTestGroupClone,
                        TestGroupData.ksParam_idTestGroup: oEntry.idTestGroup,
                        WuiAdmin.ksParamEffectiveDate: self._tsEffectiveDate,
                    }))

        return [
            oEntry.idTestGroup, oEntry.sName,
            oEntry.sDescription if oEntry.sDescription is not None else '',
            oTestCases,
            self._formatCommentCell(oEntry.sComment,
                                    cMaxLines=max(3,
                                                  len(oEntry.aoMembers) * 2)),
            aoActions
        ]
    def _formatListEntry(self, iEntry):
        """
        Format *show all* table entry
        """
        from testmanager.webui.wuiadmin import WuiAdmin
        oEntry  = self._aoEntries[iEntry]

        oBuildSrc = None;
        if oEntry.idBuildSrc is not None:
            oBuildSrc     = WuiTmLink(oEntry.oBuildSrc.sName if oEntry.oBuildSrc else str(oEntry.idBuildSrc),
                                      WuiAdmin.ksScriptName,
                                      { WuiAdmin.ksParamAction: WuiAdmin.ksActionBuildSrcDetails,
                                        BuildSourceData.ksParam_idBuildSrc: oEntry.idBuildSrc, });

        oValidationKitSrc = None;
        if oEntry.idBuildSrcTestSuite is not None:
            oValidationKitSrc = WuiTmLink(oEntry.oBuildSrcValidationKit.sName if oEntry.oBuildSrcValidationKit
                                      else str(oEntry.idBuildSrcTestSuite),
                                      WuiAdmin.ksScriptName,
                                      { WuiAdmin.ksParamAction: WuiAdmin.ksActionBuildSrcDetails,
                                        BuildSourceData.ksParam_idBuildSrc: oEntry.idBuildSrcTestSuite, });

        # Test groups
        aoMembers = [];
        for oMember in oEntry.aoMembers:
            aoMembers.append(WuiTmLink(oMember.oTestGroup.sName, WuiAdmin.ksScriptName,
                                       { WuiAdmin.ksParamAction: WuiAdmin.ksActionTestGroupDetails,
                                         TestGroupData.ksParam_idTestGroup: oMember.idTestGroup,
                                         WuiAdmin.ksParamEffectiveDate: self._tsEffectiveDate, },
                                       sTitle = '#%s' % (oMember.idTestGroup,) if oMember.oTestGroup.sDescription is None
                                                else '#%s - %s' % (oMember.idTestGroup, oMember.oTestGroup.sDescription,) ));

        # Test boxes.
        aoTestBoxes = [];
        for oTestBox in oEntry.aoTestBoxes:
            aoTestBoxes.append(WuiTmLink(oTestBox.sName, WuiAdmin.ksScriptName,
                                         { WuiAdmin.ksParamAction: WuiAdmin.ksActionTestBoxDetails,
                                           TestBoxData.ksParam_idTestBox: oTestBox.idTestBox,
                                           WuiAdmin.ksParamEffectiveDate: self._tsEffectiveDate, },
                                         sTitle = '#%s - %s / %s - %s.%s (%s)'
                                                % (oTestBox.idTestBox, oTestBox.ip, oTestBox.uuidSystem, oTestBox.sOs,
                                                   oTestBox.sCpuArch, oTestBox.sOsVersion,)));


        # Actions
        aoActions = [ WuiTmLink('Details', WuiAdmin.ksScriptName,
                                { WuiAdmin.ksParamAction: WuiAdmin.ksActionSchedGroupDetails,
                                  SchedGroupData.ksParam_idSchedGroup: oEntry.idSchedGroup,
                                  WuiAdmin.ksParamEffectiveDate: self._tsEffectiveDate, } ),];
        if isDbTimestampInfinity(oEntry.tsExpire):
            aoActions.append(WuiTmLink('Modify', WuiAdmin.ksScriptName,
                                       { WuiAdmin.ksParamAction: WuiAdmin.ksActionSchedGroupEdit,
                                         SchedGroupData.ksParam_idSchedGroup: oEntry.idSchedGroup } ));
        aoActions.append(WuiTmLink('Clone', WuiAdmin.ksScriptName,
                                   { WuiAdmin.ksParamAction: WuiAdmin.ksActionSchedGroupClone,
                                     SchedGroupData.ksParam_idSchedGroup: oEntry.idSchedGroup,
                                     WuiAdmin.ksParamEffectiveDate: self._tsEffectiveDate, } ));
        if isDbTimestampInfinity(oEntry.tsExpire):
            aoActions.append(WuiTmLink('Remove', WuiAdmin.ksScriptName,
                                       { WuiAdmin.ksParamAction: WuiAdmin.ksActionSchedGroupDoRemove,
                                         SchedGroupData.ksParam_idSchedGroup: oEntry.idSchedGroup },
                                       sConfirm = 'Are you sure you want to remove scheduling group #%d?'
                                                % (oEntry.idSchedGroup,)));

        return [
            oEntry.idSchedGroup,
            oEntry.sName,
            oEntry.fEnabled,
            oEntry.enmScheduler,
            oBuildSrc,
            oValidationKitSrc,
            aoMembers,
            aoTestBoxes,
            aoActions,
        ];
Пример #8
0
    def _formatListEntry(self, iEntry):  # pylint: disable=R0914
        from testmanager.webui.wuiadmin import WuiAdmin
        oEntry = self._aoEntries[iEntry]

        # Lights outs managment.
        if oEntry.enmLomKind == TestBoxData.ksLomKind_ILOM:
            aoLom = [
                WuiLinkBase('ILOM',
                            'https://%s/' % (oEntry.ipLom, ),
                            fBracketed=False),
            ]
        elif oEntry.enmLomKind == TestBoxData.ksLomKind_ELOM:
            aoLom = [
                WuiLinkBase('ELOM',
                            'http://%s/' % (oEntry.ipLom, ),
                            fBracketed=False),
            ]
        elif oEntry.enmLomKind == TestBoxData.ksLomKind_AppleXserveLom:
            aoLom = ['Apple LOM']
        elif oEntry.enmLomKind == TestBoxData.ksLomKind_None:
            aoLom = ['none']
        else:
            aoLom = [
                'Unexpected enmLomKind value "%s"' % (oEntry.enmLomKind, )
            ]
        if oEntry.ipLom is not None:
            if oEntry.enmLomKind in [
                    TestBoxData.ksLomKind_ILOM, TestBoxData.ksLomKind_ELOM
            ]:
                aoLom += [
                    WuiLinkBase('(ssh)',
                                'ssh://%s' % (oEntry.ipLom, ),
                                fBracketed=False)
                ]
            aoLom += [WuiRawHtml('<br>'),
                      '%s' % (oEntry.ipLom, )]

        # State and Last seen.
        if oEntry.oStatus is None:
            oSeen = WuiSpanText('tmspan-offline', 'Never')
            oState = ''
        else:
            oDelta = oEntry.tsCurrent - oEntry.oStatus.tsUpdated
            if oDelta.days <= 0 and oDelta.seconds <= self.kcSecMaxStatusDeltaAlive:
                oSeen = WuiSpanText(
                    'tmspan-online', u'%s\u00a0s\u00a0ago' %
                    (oDelta.days * 24 * 3600 + oDelta.seconds, ))
            else:
                oSeen = WuiSpanText(
                    'tmspan-offline',
                    u'%s' % (self.formatTsShort(oEntry.oStatus.tsUpdated), ))

            if oEntry.oStatus.idTestSet is None:
                oState = str(oEntry.oStatus.enmState)
            else:
                from testmanager.webui.wuimain import WuiMain
                oState = WuiTmLink(
                    oEntry.oStatus.enmState,
                    WuiMain.ksScriptName,  # pylint: disable=R0204
                    {
                        WuiMain.ksParamAction:
                        WuiMain.ksActionTestResultDetails,
                        TestSetData.ksParam_idTestSet:
                        oEntry.oStatus.idTestSet,
                    },
                    sTitle='#%u' % (oEntry.oStatus.idTestSet, ),
                    fBracketed=False)
        # Comment
        oComment = self._formatCommentCell(oEntry.sComment)

        # Group links.
        aoGroups = []
        for oInGroup in oEntry.aoInSchedGroups:
            oSchedGroup = oInGroup.oSchedGroup
            aoGroups.append(
                WuiTmLink(oSchedGroup.sName,
                          WuiAdmin.ksScriptName, {
                              WuiAdmin.ksParamAction:
                              WuiAdmin.ksActionSchedGroupEdit,
                              SchedGroupData.ksParam_idSchedGroup:
                              oSchedGroup.idSchedGroup,
                          },
                          sTitle='#%u' % (oSchedGroup.idSchedGroup, ),
                          fBracketed=len(oEntry.aoInSchedGroups) > 1))

        # Reformat the OS version to take less space.
        aoOs = ['N/A']
        if oEntry.sOs is not None and oEntry.sOsVersion is not None and oEntry.sCpuArch:
            sOsVersion = oEntry.sOsVersion
            if      sOsVersion[0] not in [ 'v', 'V', 'r', 'R'] \
                and sOsVersion[0].isdigit() \
                and sOsVersion.find('.') in range(4) \
                and oEntry.sOs in [ 'linux', 'solaris', 'darwin', ]:
                sOsVersion = 'v' + sOsVersion

            sVer1 = sOsVersion
            sVer2 = None
            if oEntry.sOs == 'linux' or oEntry.sOs == 'darwin':
                iSep = sOsVersion.find(' / ')
                if iSep > 0:
                    sVer1 = sOsVersion[:iSep].strip()
                    sVer2 = sOsVersion[iSep + 3:].strip()
                    sVer2 = sVer2.replace('Red Hat Enterprise Linux Server',
                                          'RHEL')
                    sVer2 = sVer2.replace('Oracle Linux Server', 'OL')
            elif oEntry.sOs == 'solaris':
                iSep = sOsVersion.find(' (')
                if iSep > 0 and sOsVersion[-1] == ')':
                    sVer1 = sOsVersion[:iSep].strip()
                    sVer2 = sOsVersion[iSep + 2:-1].strip()
            elif oEntry.sOs == 'win':
                iSep = sOsVersion.find('build')
                if iSep > 0:
                    sVer1 = sOsVersion[:iSep].strip()
                    sVer2 = 'B' + sOsVersion[iSep + 1:].strip()
            aoOs = [
                WuiSpanText('tmspan-osarch', u'%s.%s' % (
                    oEntry.sOs,
                    oEntry.sCpuArch,
                )),
                WuiSpanText(
                    'tmspan-osver1',
                    sVer1.replace('-', u'\u2011'),
                ),
            ]
            if sVer2 is not None:
                aoOs += [
                    WuiRawHtml('<br>'),
                    WuiSpanText('tmspan-osver2', sVer2.replace('-',
                                                               u'\u2011')),
                ]

        # Format the CPU revision.
        oCpu = None
        if oEntry.lCpuRevision is not None and oEntry.sCpuVendor is not None and oEntry.sCpuName is not None:
            oCpu = [
                u'%s (fam:%xh\u00a0m:%xh\u00a0s:%xh)' % (
                    oEntry.sCpuVendor,
                    oEntry.getCpuFamily(),
                    oEntry.getCpuModel(),
                    oEntry.getCpuStepping(),
                ),
                WuiRawHtml('<br>'),
                oEntry.sCpuName,
            ]
        else:
            oCpu = []
            if oEntry.sCpuVendor is not None:
                oCpu.append(oEntry.sCpuVendor)
            if oEntry.lCpuRevision is not None:
                oCpu.append('%#x' % (oEntry.lCpuRevision, ))
            if oEntry.sCpuName is not None:
                oCpu.append(oEntry.sCpuName)

        # Stuff cpu vendor and cpu/box features into one field.
        asFeatures = []
        if oEntry.fCpuHwVirt is True: asFeatures.append(u'HW\u2011Virt')
        if oEntry.fCpuNestedPaging is True:
            asFeatures.append(u'Nested\u2011Paging')
        if oEntry.fCpu64BitGuest is True:
            asFeatures.append(u'64\u2011bit\u2011Guest')
        if oEntry.fChipsetIoMmu is True: asFeatures.append(u'I/O\u2011MMU')
        sFeatures = u' '.join(asFeatures) if asFeatures else u''

        # Collection applicable actions.
        aoActions = [
            WuiTmLink(
                'Details', WuiAdmin.ksScriptName, {
                    WuiAdmin.ksParamAction: WuiAdmin.ksActionTestBoxDetails,
                    TestBoxData.ksParam_idTestBox: oEntry.idTestBox,
                    WuiAdmin.ksParamEffectiveDate: self._tsEffectiveDate,
                }),
        ]

        if self._oDisp is None or not self._oDisp.isReadOnlyUser():
            if isDbTimestampInfinity(oEntry.tsExpire):
                aoActions += [
                    WuiTmLink(
                        'Edit', WuiAdmin.ksScriptName, {
                            WuiAdmin.ksParamAction:
                            WuiAdmin.ksActionTestBoxEdit,
                            TestBoxData.ksParam_idTestBox: oEntry.idTestBox,
                        }),
                    WuiTmLink(
                        'Remove',
                        WuiAdmin.ksScriptName, {
                            WuiAdmin.ksParamAction:
                            WuiAdmin.ksActionTestBoxRemovePost,
                            TestBoxData.ksParam_idTestBox: oEntry.idTestBox
                        },
                        sConfirm='Are you sure that you want to remove %s (%s)?'
                        % (oEntry.sName, oEntry.ip)),
                ]

            if oEntry.sOs not in [
                    'win',
                    'os2',
            ] and oEntry.ip is not None:
                aoActions.append(
                    WuiLinkBase(
                        'ssh',
                        'ssh://vbox@%s' % (oEntry.ip, ),
                    ))

        return [
            self._getCheckBoxColumn(iEntry, oEntry.idTestBox),
            [
                WuiSpanText('tmspan-name', oEntry.sName),
                WuiRawHtml('<br>'),
                '%s' % (oEntry.ip, ),
            ],
            aoLom,
            [
                '' if oEntry.fEnabled else 'disabled / ',
                oState,
                WuiRawHtml('<br>'),
                oSeen,
            ],
            oEntry.enmPendingCmd,
            oComment,
            WuiSvnLink(oEntry.iTestBoxScriptRev),
            oEntry.formatPythonVersion(),
            aoGroups,
            aoOs,
            oCpu,
            sFeatures,
            oEntry.cCpus if oEntry.cCpus is not None else 'N/A',
            utils.formatNumberNbsp(oEntry.cMbMemory) +
            u'\u00a0MB' if oEntry.cMbMemory is not None else 'N/A',
            utils.formatNumberNbsp(oEntry.cMbScratch) +
            u'\u00a0MB' if oEntry.cMbScratch is not None else 'N/A',
            aoActions,
        ]
Пример #9
0
    def _formatListEntry(self, iEntry): # pylint: disable=R0914
        from testmanager.webui.wuiadmin import WuiAdmin;
        oEntry  = self._aoEntries[iEntry];

        # Lights outs managment.
        if oEntry.enmLomKind == TestBoxData.ksLomKind_ILOM:
            aoLom = [ WuiLinkBase('ILOM', 'https://%s/' % (oEntry.ipLom,), fBracketed = False), ];
        elif oEntry.enmLomKind == TestBoxData.ksLomKind_ELOM:
            aoLom = [ WuiLinkBase('ELOM', 'http://%s/'  % (oEntry.ipLom,), fBracketed = False), ];
        elif oEntry.enmLomKind == TestBoxData.ksLomKind_AppleXserveLom:
            aoLom = [ 'Apple LOM' ];
        elif oEntry.enmLomKind == TestBoxData.ksLomKind_None:
            aoLom = [ 'none' ];
        else:
            aoLom = [ 'Unexpected enmLomKind value "%s"' % (oEntry.enmLomKind,) ];
        if oEntry.ipLom is not None:
            if oEntry.enmLomKind in [ TestBoxData.ksLomKind_ILOM,  TestBoxData.ksLomKind_ELOM ]:
                aoLom += [ WuiLinkBase('(ssh)', 'ssh://%s' % (oEntry.ipLom,), fBracketed = False) ];
            aoLom += [ WuiRawHtml('<br>'), '%s' % (oEntry.ipLom,) ];

        # State and Last seen.
        if oEntry.oStatus is None:
            oSeen = WuiSpanText('tmspan-offline', 'Never');
            oState = '';
        else:
            oDelta = oEntry.tsCurrent - oEntry.oStatus.tsUpdated;
            if oDelta.days <= 0 and oDelta.seconds <= 15*60: # 15 mins and we consider you dead.
                oSeen = WuiSpanText('tmspan-online',  u'%s\u00a0s\u00a0ago' % (oDelta.days * 24 * 3600 + oDelta.seconds,));
            else:
                oSeen = WuiSpanText('tmspan-offline', u'%s' % (self.formatTsShort(oEntry.oStatus.tsUpdated),));

            if oEntry.oStatus.idTestSet is None:
                oState = str(oEntry.oStatus.enmState);
            else:
                from testmanager.webui.wuimain import WuiMain;
                oState = WuiTmLink(oEntry.oStatus.enmState, WuiMain.ksScriptName,                       # pylint: disable=R0204
                                   { WuiMain.ksParamAction: WuiMain.ksActionTestResultDetails,
                                     TestSetData.ksParam_idTestSet: oEntry.oStatus.idTestSet, },
                                   sTitle = '#%u' % (oEntry.oStatus.idTestSet,),
                                   fBracketed = False);
        # Comment
        oComment = self._formatCommentCell(oEntry.sComment);

        # Group links.
        aoGroups = [];
        for oInGroup in oEntry.aoInSchedGroups:
            oSchedGroup = oInGroup.oSchedGroup;
            aoGroups.append(WuiTmLink(oSchedGroup.sName, WuiAdmin.ksScriptName,
                                      { WuiAdmin.ksParamAction: WuiAdmin.ksActionSchedGroupEdit,
                                        SchedGroupData.ksParam_idSchedGroup: oSchedGroup.idSchedGroup, },
                                      sTitle = '#%u' % (oSchedGroup.idSchedGroup,),
                                      fBracketed = len(oEntry.aoInSchedGroups) > 1));

        # Reformat the OS version to take less space.
        aoOs = [ 'N/A' ];
        if oEntry.sOs is not None and oEntry.sOsVersion is not None and oEntry.sCpuArch:
            sOsVersion = oEntry.sOsVersion;
            if      sOsVersion[0] not in [ 'v', 'V', 'r', 'R'] \
                and sOsVersion[0].isdigit() \
                and sOsVersion.find('.') in range(4) \
                and oEntry.sOs in [ 'linux', 'solaris', 'darwin', ]:
                sOsVersion = 'v' + sOsVersion;

            sVer1 = sOsVersion;
            sVer2 = None;
            if oEntry.sOs == 'linux' or oEntry.sOs == 'darwin':
                iSep = sOsVersion.find(' / ');
                if iSep > 0:
                    sVer1 = sOsVersion[:iSep].strip();
                    sVer2 = sOsVersion[iSep + 3:].strip();
                    sVer2 = sVer2.replace('Red Hat Enterprise Linux Server', 'RHEL');
                    sVer2 = sVer2.replace('Oracle Linux Server', 'OL');
            elif oEntry.sOs == 'solaris':
                iSep = sOsVersion.find(' (');
                if iSep > 0 and sOsVersion[-1] == ')':
                    sVer1 = sOsVersion[:iSep].strip();
                    sVer2 = sOsVersion[iSep + 2:-1].strip();
            aoOs = [
                WuiSpanText('tmspan-osarch', u'%s.%s' % (oEntry.sOs, oEntry.sCpuArch,)),
                WuiSpanText('tmspan-osver1', sVer1.replace('-', u'\u2011'),),
            ];
            if sVer2 is not None:
                aoOs += [ WuiRawHtml('<br>'), WuiSpanText('tmspan-osver2', sVer2.replace('-', u'\u2011')), ];

        # Format the CPU revision.
        oCpu = None;
        if oEntry.lCpuRevision is not None  and  oEntry.sCpuVendor is not None and oEntry.sCpuName is not None:
            oCpu = [
                u'%s (fam:%xh\u00a0m:%xh\u00a0s:%xh)'
                % (oEntry.sCpuVendor, oEntry.getCpuFamily(), oEntry.getCpuModel(), oEntry.getCpuStepping(),),
                WuiRawHtml('<br>'),
                oEntry.sCpuName,
            ];
        else:
            oCpu = [];
            if oEntry.sCpuVendor is not None:
                oCpu.append(oEntry.sCpuVendor);
            if oEntry.lCpuRevision is not None:
                oCpu.append('%#x' % (oEntry.lCpuRevision,));
            if oEntry.sCpuName is not None:
                oCpu.append(oEntry.sCpuName);

        # Stuff cpu vendor and cpu/box features into one field.
        asFeatures = []
        if oEntry.fCpuHwVirt       is True: asFeatures.append(u'HW\u2011Virt');
        if oEntry.fCpuNestedPaging is True: asFeatures.append(u'Nested\u2011Paging');
        if oEntry.fCpu64BitGuest   is True: asFeatures.append(u'64\u2011bit\u2011Guest');
        if oEntry.fChipsetIoMmu    is True: asFeatures.append(u'I/O\u2011MMU');
        sFeatures = u' '.join(asFeatures) if len(asFeatures) > 0 else u'';

        # Collection applicable actions.
        aoActions = [
             WuiTmLink('Details', WuiAdmin.ksScriptName,
                       { WuiAdmin.ksParamAction: WuiAdmin.ksActionTestBoxDetails,
                         TestBoxData.ksParam_idTestBox: oEntry.idTestBox,
                         WuiAdmin.ksParamEffectiveDate: self._tsEffectiveDate, } ),
            ]

        if isDbTimestampInfinity(oEntry.tsExpire):
            aoActions += [
                WuiTmLink('Edit', WuiAdmin.ksScriptName,
                          { WuiAdmin.ksParamAction: WuiAdmin.ksActionTestBoxEdit,
                            TestBoxData.ksParam_idTestBox: oEntry.idTestBox, } ),
                WuiTmLink('Remove', WuiAdmin.ksScriptName,
                          { WuiAdmin.ksParamAction: WuiAdmin.ksActionTestBoxRemovePost,
                            TestBoxData.ksParam_idTestBox: oEntry.idTestBox },
                          sConfirm = 'Are you sure that you want to remove %s (%s)?' % (oEntry.sName, oEntry.ip) ),
            ]

        if oEntry.sOs not in [ 'win', 'os2', ] and oEntry.ip is not None:
            aoActions.append(WuiLinkBase('ssh', 'ssh://vbox@%s' % (oEntry.ip,),));

        return [ self._getCheckBoxColumn(iEntry, oEntry.idTestBox),
                 [ WuiSpanText('tmspan-name', oEntry.sName), WuiRawHtml('<br>'), '%s' % (oEntry.ip,),],
                 aoLom,
                 [
                     '' if oEntry.fEnabled else 'disabled / ',
                     oState,
                     WuiRawHtml('<br>'),
                     oSeen,
                  ],
                 oEntry.enmPendingCmd,
                 oComment,
                 WuiSvnLink(oEntry.iTestBoxScriptRev),
                 oEntry.formatPythonVersion(),
                 aoGroups,
                 aoOs,
                 oCpu,
                 sFeatures,
                 oEntry.cCpus            if oEntry.cCpus                is not None else 'N/A',
                 utils.formatNumberNbsp(oEntry.cMbMemory)  + u'\u00a0MB' if oEntry.cMbMemory  is not None else 'N/A',
                 utils.formatNumberNbsp(oEntry.cMbScratch) + u'\u00a0MB' if oEntry.cMbScratch is not None else 'N/A',
                 aoActions,
        ];
Пример #10
0
    def _formatListEntry(self, iEntry):
        """
        Format *show all* table entry
        """
        from testmanager.webui.wuiadmin import WuiAdmin
        oEntry = self._aoEntries[iEntry]

        oBuildSrc = None
        if oEntry.idBuildSrc is not None:
            oBuildSrc = WuiTmLink(
                oEntry.oBuildSrc.sName if oEntry.oBuildSrc else
                str(oEntry.idBuildSrc), WuiAdmin.ksScriptName, {
                    WuiAdmin.ksParamAction: WuiAdmin.ksActionBuildSrcDetails,
                    BuildSourceData.ksParam_idBuildSrc: oEntry.idBuildSrc,
                })

        oValidationKitSrc = None
        if oEntry.idBuildSrcTestSuite is not None:
            oValidationKitSrc = WuiTmLink(
                oEntry.oBuildSrcValidationKit.sName
                if oEntry.oBuildSrcValidationKit else
                str(oEntry.idBuildSrcTestSuite), WuiAdmin.ksScriptName, {
                    WuiAdmin.ksParamAction: WuiAdmin.ksActionBuildSrcDetails,
                    BuildSourceData.ksParam_idBuildSrc:
                    oEntry.idBuildSrcTestSuite,
                })

        # Test groups
        aoMembers = []
        for oMember in oEntry.aoMembers:
            aoMembers.append(
                WuiTmLink(
                    oMember.oTestGroup.sName,
                    WuiAdmin.ksScriptName, {
                        WuiAdmin.ksParamAction:
                        WuiAdmin.ksActionTestGroupDetails,
                        TestGroupData.ksParam_idTestGroup: oMember.idTestGroup,
                        WuiAdmin.ksParamEffectiveDate: self._tsEffectiveDate,
                    },
                    sTitle='#%s' % (oMember.idTestGroup, ) if
                    oMember.oTestGroup.sDescription is None else '#%s - %s' % (
                        oMember.idTestGroup,
                        oMember.oTestGroup.sDescription,
                    )))

        # Test boxes.
        aoTestBoxes = []
        for oTestBox in oEntry.aoTestBoxes:
            aoTestBoxes.append(
                WuiTmLink(
                    oTestBox.sName,
                    WuiAdmin.ksScriptName, {
                        WuiAdmin.ksParamAction:
                        WuiAdmin.ksActionTestBoxDetails,
                        TestBoxData.ksParam_idTestBox: oTestBox.idTestBox,
                        WuiAdmin.ksParamEffectiveDate: self._tsEffectiveDate,
                    },
                    sTitle='#%s - %s / %s - %s.%s (%s)' % (
                        oTestBox.idTestBox,
                        oTestBox.ip,
                        oTestBox.uuidSystem,
                        oTestBox.sOs,
                        oTestBox.sCpuArch,
                        oTestBox.sOsVersion,
                    )))

        # Actions
        aoActions = [
            WuiTmLink(
                'Details', WuiAdmin.ksScriptName, {
                    WuiAdmin.ksParamAction: WuiAdmin.ksActionSchedGroupDetails,
                    SchedGroupData.ksParam_idSchedGroup: oEntry.idSchedGroup,
                    WuiAdmin.ksParamEffectiveDate: self._tsEffectiveDate,
                }),
        ]
        if isDbTimestampInfinity(oEntry.tsExpire):
            aoActions.append(
                WuiTmLink(
                    'Modify', WuiAdmin.ksScriptName, {
                        WuiAdmin.ksParamAction:
                        WuiAdmin.ksActionSchedGroupEdit,
                        SchedGroupData.ksParam_idSchedGroup:
                        oEntry.idSchedGroup
                    }))
        aoActions.append(
            WuiTmLink(
                'Clone', WuiAdmin.ksScriptName, {
                    WuiAdmin.ksParamAction: WuiAdmin.ksActionSchedGroupClone,
                    SchedGroupData.ksParam_idSchedGroup: oEntry.idSchedGroup,
                    WuiAdmin.ksParamEffectiveDate: self._tsEffectiveDate,
                }))
        if isDbTimestampInfinity(oEntry.tsExpire):
            aoActions.append(
                WuiTmLink(
                    'Remove',
                    WuiAdmin.ksScriptName, {
                        WuiAdmin.ksParamAction:
                        WuiAdmin.ksActionSchedGroupDoRemove,
                        SchedGroupData.ksParam_idSchedGroup:
                        oEntry.idSchedGroup
                    },
                    sConfirm=
                    'Are you sure you want to remove scheduling group #%d?' %
                    (oEntry.idSchedGroup, )))

        return [
            oEntry.idSchedGroup,
            oEntry.sName,
            oEntry.fEnabled,
            oEntry.enmScheduler,
            oBuildSrc,
            oValidationKitSrc,
            aoMembers,
            aoTestBoxes,
            aoActions,
        ]
Пример #11
0
    def _formatListEntry(self, iEntry):
        oEntry = self._aoEntries[iEntry];
        from testmanager.webui.wuiadmin import WuiAdmin;

        aoRet = \
        [
            oEntry.sName.replace('-', u'\u2011'),
            'Enabled' if oEntry.fEnabled else 'Disabled',
            utils.formatIntervalSeconds(oEntry.cSecTimeout),
        ];

        # Base command and variations.
        fNoGang = True;
        for oVar in oEntry.aoTestCaseArgs:
            if oVar.cGangMembers > 1:
                fNoGang = False;
                break;
        sHtml  = '  <table class="tminnertbl" width=100%>\n' \
                 '    <tr>\n' \
                 '      <th>';
        if not fNoGang:
            sHtml += '<th>Gang Size</th>';
        sHtml += 'Timeout</th><th>Additional Arguments</b></th>\n' \
                 '    </tr>\n'
        for oTmp in oEntry.aoTestCaseArgs:
            sHtml += '<tr>';
            if not fNoGang:
                sHtml += '<td>%d</td>' % (oTmp.cGangMembers,)
            sHtml += '<td>%s</td><td>%s</td></tr>\n' \
                   % ( utils.formatIntervalSeconds(oTmp.cSecTimeout) if oTmp.cSecTimeout is not None else 'Default',
                       webutils.escapeElem(oTmp.sArgs.replace('-', u'\u2011')),)
        sHtml += '  </table>'

        aoRet.append([oEntry.sBaseCmd.replace('-', u'\u2011'), WuiRawHtml(sHtml)]);

        # Next.
        aoRet += [ oEntry.sValidationKitZips if oEntry.sValidationKitZips is not None else '', ];

        # Show dependency on other testcases
        if oEntry.aoDepTestCases not in (None, []):
            sHtml = '  <ul class="tmshowall">\n'
            for sTmp in oEntry.aoDepTestCases:
                sHtml += '    <li class="tmshowall"><a href="%s?%s=%s&%s=%s">%s</a></li>\n' \
                       % (WuiAdmin.ksScriptName,
                          WuiAdmin.ksParamAction, WuiAdmin.ksActionTestCaseEdit,
                          TestCaseData.ksParam_idTestCase, sTmp.idTestCase,
                          sTmp.sName)
            sHtml += '  </ul>\n'
        else:
            sHtml = '<ul class="tmshowall"><li class="tmshowall">None</li></ul>\n'
        aoRet.append(WuiRawHtml(sHtml));

        # Show dependency on global resources
        if oEntry.aoDepGlobalResources not in (None, []):
            sHtml = '  <ul class="tmshowall">\n'
            for sTmp in oEntry.aoDepGlobalResources:
                sHtml += '    <li class="tmshowall"><a href="%s?%s=%s&%s=%s">%s</a></li>\n' \
                       % (WuiAdmin.ksScriptName,
                          WuiAdmin.ksParamAction, WuiAdmin.ksActionGlobalRsrcShowEdit,
                          GlobalResourceData.ksParam_idGlobalRsrc, sTmp.idGlobalRsrc,
                          sTmp.sName)
            sHtml += '  </ul>\n'
        else:
            sHtml = '<ul class="tmshowall"><li class="tmshowall">None</li></ul>\n'
        aoRet.append(WuiRawHtml(sHtml));

        # Show actions that can be taken.
        aoActions = [ WuiTmLink('Details', WuiAdmin.ksScriptName,
                                { WuiAdmin.ksParamAction: WuiAdmin.ksActionTestCaseDetails,
                                  TestCaseData.ksParam_idGenTestCase: oEntry.idGenTestCase }), ];
        if isDbTimestampInfinity(oEntry.tsExpire):
            aoActions.append(WuiTmLink('Modify', WuiAdmin.ksScriptName,
                                       { WuiAdmin.ksParamAction: WuiAdmin.ksActionTestCaseEdit,
                                         TestCaseData.ksParam_idTestCase: oEntry.idTestCase }));
        aoActions.append(WuiTmLink('Clone', WuiAdmin.ksScriptName,
                                   { WuiAdmin.ksParamAction: WuiAdmin.ksActionTestCaseClone,
                                     TestCaseData.ksParam_idGenTestCase: oEntry.idGenTestCase }));
        if isDbTimestampInfinity(oEntry.tsExpire):
            aoActions.append(WuiTmLink('Remove', WuiAdmin.ksScriptName,
                                       { WuiAdmin.ksParamAction: WuiAdmin.ksActionTestCaseDoRemove,
                                         TestCaseData.ksParam_idTestCase: oEntry.idTestCase },
                                       sConfirm = 'Are you sure you want to remove test case #%d?' % (oEntry.idTestCase,)));
        aoRet.append(aoActions);

        return aoRet;
Пример #12
0
    def _formatListEntry(self, iEntry):
        oEntry = self._aoEntries[iEntry];
        from testmanager.webui.wuiadmin import WuiAdmin;

        #
        # Test case list.
        #
        sHtml = '';
        if len(oEntry.aoMembers) > 0:
            for oMember in oEntry.aoMembers:
                sHtml += '<dl>\n' \
                         '  <dd><strong>%s</strong> (priority: %d) %s %s</dd>\n' \
                       % ( webutils.escapeElem(oMember.oTestCase.sName),
                           oMember.iSchedPriority,
                           WuiTmLink('Details', WuiAdmin.ksScriptName,
                                     { WuiAdmin.ksParamAction: WuiAdmin.ksActionTestCaseDetails,
                                       TestCaseData.ksParam_idGenTestCase: oMember.oTestCase.idGenTestCase, } ).toHtml(),
                           WuiTmLink('Edit', WuiAdmin.ksScriptName,
                                     { WuiAdmin.ksParamAction: WuiAdmin.ksActionTestCaseEdit,
                                       TestCaseData.ksParam_idTestCase: oMember.oTestCase.idTestCase, } ).toHtml()
                           if isDbTimestampInfinity(oMember.oTestCase.tsExpire) else '',
                           );

                sHtml += '  <dt>\n';

                fNoGang = True;
                for oVar in oMember.oTestCase.aoTestCaseArgs:
                    if oVar.cGangMembers > 1:
                        fNoGang = False
                        break;

                sHtml += '    <table class="tminnertbl" width="100%">\n'
                if fNoGang:
                    sHtml += '      <tr><th>Timeout</th><th>Arguments</th></tr>\n';
                else:
                    sHtml += '      <tr><th>Gang Size</th><th>Timeout</th><th style="text-align:left;">Arguments</th></tr>\n';

                cArgsIncluded = 0;
                for oVar in oMember.oTestCase.aoTestCaseArgs:
                    if oMember.aidTestCaseArgs is None  or  oVar.idTestCaseArgs in oMember.aidTestCaseArgs:
                        cArgsIncluded += 1;
                        if fNoGang:
                            sHtml += '      <tr>';
                        else:
                            sHtml += '      <tr><td>%s</td>' % (oVar.cGangMembers,);
                        sHtml += '<td>%s</td><td>%s</td></tr>\n' \
                               % ( utils.formatIntervalSeconds(oMember.oTestCase.cSecTimeout if oVar.cSecTimeout is None
                                                               else oVar.cSecTimeout),
                                   webutils.escapeElem(oVar.sArgs), );
                if cArgsIncluded == 0:
                    sHtml += '      <tr><td colspan="%u">No arguments selected.</td></tr>\n' % ( 2 if fNoGang else 3, );
                sHtml += '    </table>\n' \
                         '  </dl>\n';
        oTestCases = WuiRawHtml(sHtml);

        #
        # Actions.
        #
        aoActions = [ WuiTmLink('Details', WuiAdmin.ksScriptName,
                                { WuiAdmin.ksParamAction: WuiAdmin.ksActionTestGroupDetails,
                                  TestGroupData.ksParam_idTestGroup: oEntry.idTestGroup,
                                  WuiAdmin.ksParamEffectiveDate: self._tsEffectiveDate, }) ];
        if isDbTimestampInfinity(oEntry.tsExpire):
            aoActions.append(WuiTmLink('Modify', WuiAdmin.ksScriptName,
                                       { WuiAdmin.ksParamAction: WuiAdmin.ksActionTestGroupEdit,
                                         TestGroupData.ksParam_idTestGroup: oEntry.idTestGroup }));
            aoActions.append(WuiTmLink('Clone', WuiAdmin.ksScriptName,
                                       { WuiAdmin.ksParamAction: WuiAdmin.ksActionTestGroupClone,
                                         TestGroupData.ksParam_idTestGroup: oEntry.idTestGroup,
                                         WuiAdmin.ksParamEffectiveDate: self._tsEffectiveDate, }));
            aoActions.append(WuiTmLink('Remove', WuiAdmin.ksScriptName,
                                       { WuiAdmin.ksParamAction: WuiAdmin.ksActionTestGroupDoRemove,
                                         TestGroupData.ksParam_idTestGroup: oEntry.idTestGroup },
                                       sConfirm = 'Do you really want to remove test group #%d?' % (oEntry.idTestGroup,)));
        else:
            aoActions.append(WuiTmLink('Clone', WuiAdmin.ksScriptName,
                                       { WuiAdmin.ksParamAction: WuiAdmin.ksActionTestGroupClone,
                                         TestGroupData.ksParam_idTestGroup: oEntry.idTestGroup,
                                         WuiAdmin.ksParamEffectiveDate: self._tsEffectiveDate, }));



        return [ oEntry.idTestGroup,
                 oEntry.sName,
                 oEntry.sDescription if oEntry.sDescription is not None else '',
                 oTestCases,
                 aoActions ];
Пример #13
0
    def _formatListEntry(self, iEntry):
        oEntry = self._aoEntries[iEntry]
        from testmanager.webui.wuiadmin import WuiAdmin

        aoRet = [
            oEntry.sName.replace("-", u"\u2011"),
            "Enabled" if oEntry.fEnabled else "Disabled",
            utils.formatIntervalSeconds(oEntry.cSecTimeout),
        ]

        # Base command and variations.
        fNoGang = True
        fNoSubName = True
        fAllDefaultTimeouts = True
        for oVar in oEntry.aoTestCaseArgs:
            if fNoSubName and oVar.sSubName is not None and len(oVar.sSubName.strip()) > 0:
                fNoSubName = False
            if oVar.cGangMembers > 1:
                fNoGang = False
            if oVar.cSecTimeout is not None:
                fAllDefaultTimeouts = False

        sHtml = '  <table class="tminnertbl" width=100%>\n' "    <tr>\n" "      "
        if not fNoSubName:
            sHtml += '<th class="tmtcasubname">Sub-name</th>'
        if not fNoGang:
            sHtml += '<th class="tmtcagangsize">Gang Size</th>'
        if not fAllDefaultTimeouts:
            sHtml += '<th class="tmtcatimeout">Timeout</th>'
        sHtml += "<th>Additional Arguments</b></th>\n" "    </tr>\n"
        for oTmp in oEntry.aoTestCaseArgs:
            sHtml += "<tr>"
            if not fNoSubName:
                sHtml += "<td>%s</td>" % (webutils.escapeElem(oTmp.sSubName) if oTmp.sSubName is not None else "")
            if not fNoGang:
                sHtml += "<td>%d</td>" % (oTmp.cGangMembers,)
            if not fAllDefaultTimeouts:
                sHtml += "<td>%s</td>" % (
                    utils.formatIntervalSeconds(oTmp.cSecTimeout) if oTmp.cSecTimeout is not None else "Default",
                )
            sHtml += u"<td>%s</td></tr>" % (
                webutils.escapeElem(oTmp.sArgs.replace("-", u"\u2011")) if len(oTmp.sArgs) > 0 else u"\u2011",
            )
            sHtml += "</tr>\n"
        sHtml += "  </table>"

        aoRet.append([oEntry.sBaseCmd.replace("-", u"\u2011"), WuiRawHtml(sHtml)])

        # Next.
        aoRet += [oEntry.sValidationKitZips if oEntry.sValidationKitZips is not None else ""]

        # Show dependency on other testcases
        if oEntry.aoDepTestCases not in (None, []):
            sHtml = '  <ul class="tmshowall">\n'
            for sTmp in oEntry.aoDepTestCases:
                sHtml += '    <li class="tmshowall"><a href="%s?%s=%s&%s=%s">%s</a></li>\n' % (
                    WuiAdmin.ksScriptName,
                    WuiAdmin.ksParamAction,
                    WuiAdmin.ksActionTestCaseEdit,
                    TestCaseData.ksParam_idTestCase,
                    sTmp.idTestCase,
                    sTmp.sName,
                )
            sHtml += "  </ul>\n"
        else:
            sHtml = '<ul class="tmshowall"><li class="tmshowall">None</li></ul>\n'
        aoRet.append(WuiRawHtml(sHtml))

        # Show dependency on global resources
        if oEntry.aoDepGlobalResources not in (None, []):
            sHtml = '  <ul class="tmshowall">\n'
            for sTmp in oEntry.aoDepGlobalResources:
                sHtml += '    <li class="tmshowall"><a href="%s?%s=%s&%s=%s">%s</a></li>\n' % (
                    WuiAdmin.ksScriptName,
                    WuiAdmin.ksParamAction,
                    WuiAdmin.ksActionGlobalRsrcShowEdit,
                    GlobalResourceData.ksParam_idGlobalRsrc,
                    sTmp.idGlobalRsrc,
                    sTmp.sName,
                )
            sHtml += "  </ul>\n"
        else:
            sHtml = '<ul class="tmshowall"><li class="tmshowall">None</li></ul>\n'
        aoRet.append(WuiRawHtml(sHtml))

        # Comment (note).
        aoRet.append(self._formatCommentCell(oEntry.sComment))

        # Show actions that can be taken.
        aoActions = [
            WuiTmLink(
                "Details",
                WuiAdmin.ksScriptName,
                {
                    WuiAdmin.ksParamAction: WuiAdmin.ksActionTestCaseDetails,
                    TestCaseData.ksParam_idGenTestCase: oEntry.idGenTestCase,
                },
            )
        ]
        if isDbTimestampInfinity(oEntry.tsExpire):
            aoActions.append(
                WuiTmLink(
                    "Modify",
                    WuiAdmin.ksScriptName,
                    {
                        WuiAdmin.ksParamAction: WuiAdmin.ksActionTestCaseEdit,
                        TestCaseData.ksParam_idTestCase: oEntry.idTestCase,
                    },
                )
            )
        aoActions.append(
            WuiTmLink(
                "Clone",
                WuiAdmin.ksScriptName,
                {
                    WuiAdmin.ksParamAction: WuiAdmin.ksActionTestCaseClone,
                    TestCaseData.ksParam_idGenTestCase: oEntry.idGenTestCase,
                },
            )
        )
        if isDbTimestampInfinity(oEntry.tsExpire):
            aoActions.append(
                WuiTmLink(
                    "Remove",
                    WuiAdmin.ksScriptName,
                    {
                        WuiAdmin.ksParamAction: WuiAdmin.ksActionTestCaseDoRemove,
                        TestCaseData.ksParam_idTestCase: oEntry.idTestCase,
                    },
                    sConfirm="Are you sure you want to remove test case #%d?" % (oEntry.idTestCase,),
                )
            )
        aoRet.append(aoActions)

        return aoRet
Пример #14
0
    def _formatListEntry(self, iEntry):
        """
        Format *show all* table entry
        """
        from testmanager.webui.wuiadmin import WuiAdmin
        oEntry  = self._aoEntries[iEntry]   # type: SchedGroupDataEx

        oBuildSrc = None;
        if oEntry.idBuildSrc is not None:
            oBuildSrc     = WuiTmLink(oEntry.oBuildSrc.sName if oEntry.oBuildSrc else str(oEntry.idBuildSrc),
                                      WuiAdmin.ksScriptName,
                                      { WuiAdmin.ksParamAction: WuiAdmin.ksActionBuildSrcDetails,
                                        BuildSourceData.ksParam_idBuildSrc: oEntry.idBuildSrc, });

        oValidationKitSrc = None;
        if oEntry.idBuildSrcTestSuite is not None:
            oValidationKitSrc = WuiTmLink(oEntry.oBuildSrcValidationKit.sName if oEntry.oBuildSrcValidationKit
                                      else str(oEntry.idBuildSrcTestSuite),
                                      WuiAdmin.ksScriptName,
                                      { WuiAdmin.ksParamAction: WuiAdmin.ksActionBuildSrcDetails,
                                        BuildSourceData.ksParam_idBuildSrc: oEntry.idBuildSrcTestSuite, });

        # Test groups
        aoMembers = [];
        for oMember in oEntry.aoMembers:
            aoMembers.append(WuiTmLink(oMember.oTestGroup.sName, WuiAdmin.ksScriptName,
                                       { WuiAdmin.ksParamAction: WuiAdmin.ksActionTestGroupDetails,
                                         TestGroupData.ksParam_idTestGroup: oMember.idTestGroup,
                                         WuiAdmin.ksParamEffectiveDate: self._tsEffectiveDate, },
                                       sTitle = '#%s' % (oMember.idTestGroup,) if oMember.oTestGroup.sDescription is None
                                                else '#%s - %s' % (oMember.idTestGroup, oMember.oTestGroup.sDescription,) ));

        # Test boxes.
        aoTestBoxes = [];
        for oRelation in oEntry.aoTestBoxes:
            oTestBox = oRelation.oTestBox;
            if oTestBox:
                aoTestBoxes.append(WuiTestBoxDetailsLink(oTestBox, fBracketed = True, tsNow = self._tsEffectiveDate));
            else:
                aoTestBoxes.append(WuiRawHtml('#%s' % (oRelation.idTestBox,)));

        # Actions
        aoActions = [ WuiTmLink('Details', WuiAdmin.ksScriptName,
                                { WuiAdmin.ksParamAction: WuiAdmin.ksActionSchedGroupDetails,
                                  SchedGroupData.ksParam_idSchedGroup: oEntry.idSchedGroup,
                                  WuiAdmin.ksParamEffectiveDate: self._tsEffectiveDate, } ),];
        if self._oDisp is None or not self._oDisp.isReadOnlyUser():

            if isDbTimestampInfinity(oEntry.tsExpire):
                aoActions.append(WuiTmLink('Modify', WuiAdmin.ksScriptName,
                                           { WuiAdmin.ksParamAction: WuiAdmin.ksActionSchedGroupEdit,
                                             SchedGroupData.ksParam_idSchedGroup: oEntry.idSchedGroup } ));
            aoActions.append(WuiTmLink('Clone', WuiAdmin.ksScriptName,
                                       { WuiAdmin.ksParamAction: WuiAdmin.ksActionSchedGroupClone,
                                         SchedGroupData.ksParam_idSchedGroup: oEntry.idSchedGroup,
                                         WuiAdmin.ksParamEffectiveDate: self._tsEffectiveDate, } ));
            if isDbTimestampInfinity(oEntry.tsExpire):
                aoActions.append(WuiTmLink('Remove', WuiAdmin.ksScriptName,
                                           { WuiAdmin.ksParamAction: WuiAdmin.ksActionSchedGroupDoRemove,
                                             SchedGroupData.ksParam_idSchedGroup: oEntry.idSchedGroup },
                                           sConfirm = 'Are you sure you want to remove scheduling group #%d?'
                                                    % (oEntry.idSchedGroup,)));

        return [
            oEntry.idSchedGroup,
            oEntry.sName,
            oEntry.fEnabled,
            oEntry.enmScheduler,
            oBuildSrc,
            oValidationKitSrc,
            aoMembers,
            aoTestBoxes,
            self._formatCommentCell(oEntry.sComment),
            aoActions,
        ];
    def _formatListEntry(self, iEntry):
        from testmanager.webui.wuiadmin import WuiAdmin

        oEntry = self._aoEntries[iEntry]

        aoActions = []
        if oEntry.sLogUrl is not None:
            aoActions.append(WuiBuildLogLink(oEntry.sLogUrl, "Build Log"))

        dParams = {
            WuiAdmin.ksParamAction: WuiAdmin.ksActionBuildBlacklistAdd,
            BuildBlacklistData.ksParam_sProduct: oEntry.oCat.sProduct,
            BuildBlacklistData.ksParam_sBranch: oEntry.oCat.sBranch,
            BuildBlacklistData.ksParam_asTypes: oEntry.oCat.sType,
            BuildBlacklistData.ksParam_asOsArches: oEntry.oCat.asOsArches,
            BuildBlacklistData.ksParam_iFirstRevision: oEntry.iRevision,
            BuildBlacklistData.ksParam_iLastRevision: oEntry.iRevision,
        }
        aoActions += [
            WuiTmLink("Blacklist", WuiAdmin.ksScriptName, dParams),
            WuiTmLink(
                "Details",
                WuiAdmin.ksScriptName,
                {
                    WuiAdmin.ksParamAction: WuiAdmin.ksActionBuildDetails,
                    BuildData.ksParam_idBuild: oEntry.idBuild,
                    WuiAdmin.ksParamEffectiveDate: self._tsEffectiveDate,
                },
            ),
            WuiTmLink(
                "Clone",
                WuiAdmin.ksScriptName,
                {
                    WuiAdmin.ksParamAction: WuiAdmin.ksActionBuildClone,
                    BuildData.ksParam_idBuild: oEntry.idBuild,
                    WuiAdmin.ksParamEffectiveDate: self._tsEffectiveDate,
                },
            ),
        ]
        if isDbTimestampInfinity(oEntry.tsExpire):
            aoActions += [
                WuiTmLink(
                    "Modify",
                    WuiAdmin.ksScriptName,
                    {WuiAdmin.ksParamAction: WuiAdmin.ksActionBuildEdit, BuildData.ksParam_idBuild: oEntry.idBuild},
                ),
                WuiTmLink(
                    "Remove",
                    WuiAdmin.ksScriptName,
                    {WuiAdmin.ksParamAction: WuiAdmin.ksActionBuildDoRemove, BuildData.ksParam_idBuild: oEntry.idBuild},
                    sConfirm="Are you sure you want to remove build #%d?" % (oEntry.idBuild,),
                ),
            ]

        return [
            oEntry.idBuild,
            oEntry.oCat.sProduct,
            oEntry.oCat.sBranch,
            WuiSvnLinkWithTooltip(
                oEntry.iRevision, oEntry.oCat.sRepository, sName="%s r%s" % (oEntry.sVersion, oEntry.iRevision)
            ),
            oEntry.oCat.sType,
            " ".join(oEntry.oCat.asOsArches),
            "batch" if oEntry.uidAuthor is None else oEntry.uidAuthor,
            self.formatTsShort(oEntry.tsCreated),
            oEntry.sBinaries if not oEntry.fBinariesDeleted else "<Deleted>",
            aoActions,
        ]