VirtualBox

source: vbox/trunk/src/VBox/ValidationKit/testmanager/webui/wuiadminschedgroup.py@ 83390

最後變更 在這個檔案從83390是 83385,由 vboxsync 提交於 5 年 前

TestManager/SchedQueue: Fixed various validation issues with the testbox-in-sched-group stuff. Added change log to the scheduling queue details page.

  • 屬性 svn:eol-style 設為 native
  • 屬性 svn:keywords 設為 Author Date Id Revision
檔案大小: 10.5 KB
 
1# -*- coding: utf-8 -*-
2# $Id: wuiadminschedgroup.py 83385 2020-03-24 14:46:13Z vboxsync $
3
4"""
5Test Manager WUI - Scheduling groups.
6"""
7
8__copyright__ = \
9"""
10Copyright (C) 2012-2020 Oracle Corporation
11
12This file is part of VirtualBox Open Source Edition (OSE), as
13available from http://www.alldomusa.eu.org. This file is free software;
14you can redistribute it and/or modify it under the terms of the GNU
15General Public License (GPL) as published by the Free Software
16Foundation, in version 2 as it comes in the "COPYING" file of the
17VirtualBox OSE distribution. VirtualBox OSE is distributed in the
18hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
19
20The contents of this file may alternatively be used under the terms
21of the Common Development and Distribution License Version 1.0
22(CDDL) only, as it comes in the "COPYING.CDDL" file of the
23VirtualBox OSE distribution, in which case the provisions of the
24CDDL are applicable instead of those of the GPL.
25
26You may elect to license modified versions of this file under the
27terms and conditions of either the GPL or the CDDL or both.
28"""
29__version__ = "$Revision: 83385 $"
30
31
32# Validation Kit imports.
33from testmanager.core.buildsource import BuildSourceData, BuildSourceLogic;
34from testmanager.core.db import isDbTimestampInfinity;
35from testmanager.core.schedgroup import SchedGroupData, SchedGroupDataEx;
36from testmanager.core.testgroup import TestGroupData, TestGroupLogic;
37from testmanager.core.testbox import TestBoxData, TestBoxLogic;
38from testmanager.webui.wuicontentbase import WuiFormContentBase, WuiListContentBase, WuiTmLink, WuiRawHtml;
39
40
41class WuiSchedGroup(WuiFormContentBase):
42 """
43 WUI Scheduling Groups HTML content generator.
44 """
45
46 def __init__(self, oData, sMode, oDisp):
47 assert isinstance(oData, SchedGroupData);
48 if sMode == WuiFormContentBase.ksMode_Add:
49 sTitle = 'New Scheduling Group';
50 elif sMode == WuiFormContentBase.ksMode_Edit:
51 sTitle = 'Edit Scheduling Group'
52 else:
53 assert sMode == WuiFormContentBase.ksMode_Show;
54 sTitle = 'Scheduling Group';
55 WuiFormContentBase.__init__(self, oData, sMode, 'SchedGroup', oDisp, sTitle);
56
57 # Read additional bits form the DB, unless we're in
58 if sMode != WuiFormContentBase.ksMode_Show:
59 self._aoAllRelevantTestGroups = TestGroupLogic(oDisp.getDb()).getAll();
60 self._aoAllRelevantTestBoxes = TestBoxLogic(oDisp.getDb()).getAll();
61 else:
62 self._aoAllRelevantTestGroups = [oMember.oTestGroup for oMember in oData.aoMembers];
63 self._aoAllRelevantTestBoxes = [oMember.oTestBox for oMember in oData.aoTestBoxes];
64
65 def _populateForm(self, oForm, oData): # type: (WuiHlpForm, SchedGroupDataEx) -> bool
66 """
67 Construct an HTML form
68 """
69
70 oForm.addIntRO( SchedGroupData.ksParam_idSchedGroup, oData.idSchedGroup, 'ID')
71 oForm.addTimestampRO(SchedGroupData.ksParam_tsEffective, oData.tsEffective, 'Last changed')
72 oForm.addTimestampRO(SchedGroupData.ksParam_tsExpire, oData.tsExpire, 'Expires (excl)')
73 oForm.addIntRO( SchedGroupData.ksParam_uidAuthor, oData.uidAuthor, 'Changed by UID')
74 oForm.addText( SchedGroupData.ksParam_sName, oData.sName, 'Name')
75 oForm.addText( SchedGroupData.ksParam_sDescription, oData.sDescription, 'Description')
76 oForm.addCheckBox( SchedGroupData.ksParam_fEnabled, oData.fEnabled, 'Enabled')
77
78 oForm.addComboBox( SchedGroupData.ksParam_enmScheduler, oData.enmScheduler, 'Scheduler type',
79 SchedGroupData.kasSchedulerDesc)
80
81 aoBuildSrcIds = BuildSourceLogic(self._oDisp.getDb()).fetchForCombo();
82 oForm.addComboBox( SchedGroupData.ksParam_idBuildSrc, oData.idBuildSrc, 'Build source', aoBuildSrcIds);
83 oForm.addComboBox( SchedGroupData.ksParam_idBuildSrcTestSuite,
84 oData.idBuildSrcTestSuite, 'Test suite', aoBuildSrcIds);
85
86 oForm.addListOfSchedGroupMembers(SchedGroupDataEx.ksParam_aoMembers,
87 oData.aoMembers, self._aoAllRelevantTestGroups, 'Test groups',
88 oData.idSchedGroup, fReadOnly = self._sMode == WuiFormContentBase.ksMode_Show);
89
90 oForm.addListOfSchedGroupBoxes(SchedGroupDataEx.ksParam_aoTestBoxes,
91 oData.aoTestBoxes, self._aoAllRelevantTestBoxes, 'Test boxes',
92 oData.idSchedGroup, fReadOnly = self._sMode == WuiFormContentBase.ksMode_Show);
93
94 oForm.addMultilineText(SchedGroupData.ksParam_sComment, oData.sComment, 'Comment');
95 oForm.addSubmit()
96
97 return True;
98
99class WuiAdminSchedGroupList(WuiListContentBase):
100 """
101 Content generator for the schedule group listing.
102 """
103
104 def __init__(self, aoEntries, iPage, cItemsPerPage, tsEffective, fnDPrint, oDisp, aiSelectedSortColumns = None):
105 WuiListContentBase.__init__(self, aoEntries, iPage, cItemsPerPage, tsEffective,
106 sTitle = 'Registered Scheduling Groups', sId = 'schedgroups',
107 fnDPrint = fnDPrint, oDisp = oDisp, aiSelectedSortColumns = aiSelectedSortColumns);
108
109 self._asColumnHeaders = [
110 'ID', 'Name', 'Enabled', 'Scheduler Type',
111 'Build Source', 'Validation Kit Source', 'Test Groups', 'TestBoxes', 'Note', 'Actions',
112 ];
113
114 self._asColumnAttribs = [
115 'align="right"', 'align="center"', 'align="center"', 'align="center"',
116 'align="center"', 'align="center"', '', '', 'align="center"', 'align="center"',
117 ];
118
119 def _formatListEntry(self, iEntry):
120 """
121 Format *show all* table entry
122 """
123 from testmanager.webui.wuiadmin import WuiAdmin
124 oEntry = self._aoEntries[iEntry] # type: SchedGroupDataEx
125
126 oBuildSrc = None;
127 if oEntry.idBuildSrc is not None:
128 oBuildSrc = WuiTmLink(oEntry.oBuildSrc.sName if oEntry.oBuildSrc else str(oEntry.idBuildSrc),
129 WuiAdmin.ksScriptName,
130 { WuiAdmin.ksParamAction: WuiAdmin.ksActionBuildSrcDetails,
131 BuildSourceData.ksParam_idBuildSrc: oEntry.idBuildSrc, });
132
133 oValidationKitSrc = None;
134 if oEntry.idBuildSrcTestSuite is not None:
135 oValidationKitSrc = WuiTmLink(oEntry.oBuildSrcValidationKit.sName if oEntry.oBuildSrcValidationKit
136 else str(oEntry.idBuildSrcTestSuite),
137 WuiAdmin.ksScriptName,
138 { WuiAdmin.ksParamAction: WuiAdmin.ksActionBuildSrcDetails,
139 BuildSourceData.ksParam_idBuildSrc: oEntry.idBuildSrcTestSuite, });
140
141 # Test groups
142 aoMembers = [];
143 for oMember in oEntry.aoMembers:
144 aoMembers.append(WuiTmLink(oMember.oTestGroup.sName, WuiAdmin.ksScriptName,
145 { WuiAdmin.ksParamAction: WuiAdmin.ksActionTestGroupDetails,
146 TestGroupData.ksParam_idTestGroup: oMember.idTestGroup,
147 WuiAdmin.ksParamEffectiveDate: self._tsEffectiveDate, },
148 sTitle = '#%s' % (oMember.idTestGroup,) if oMember.oTestGroup.sDescription is None
149 else '#%s - %s' % (oMember.idTestGroup, oMember.oTestGroup.sDescription,) ));
150
151 # Test boxes.
152 aoTestBoxes = [];
153 for oRelation in oEntry.aoTestBoxes:
154 oTestBox = oRelation.oTestBox;
155 if oTestBox:
156 aoTestBoxes.append(WuiTmLink(oTestBox.sName, WuiAdmin.ksScriptName,
157 { WuiAdmin.ksParamAction: WuiAdmin.ksActionTestBoxDetails,
158 TestBoxData.ksParam_idTestBox: oTestBox.idTestBox,
159 WuiAdmin.ksParamEffectiveDate: self._tsEffectiveDate, },
160 sTitle = '#%s - %s / %s - %s.%s (%s)'
161 % (oTestBox.idTestBox, oTestBox.ip, oTestBox.uuidSystem, oTestBox.sOs,
162 oTestBox.sCpuArch, oTestBox.sOsVersion,)));
163 else:
164 aoTestBoxes.append(WuiRawHtml('#%s' % (oRelation.idTestBox,)));
165
166 # Actions
167 aoActions = [ WuiTmLink('Details', WuiAdmin.ksScriptName,
168 { WuiAdmin.ksParamAction: WuiAdmin.ksActionSchedGroupDetails,
169 SchedGroupData.ksParam_idSchedGroup: oEntry.idSchedGroup,
170 WuiAdmin.ksParamEffectiveDate: self._tsEffectiveDate, } ),];
171 if self._oDisp is None or not self._oDisp.isReadOnlyUser():
172
173 if isDbTimestampInfinity(oEntry.tsExpire):
174 aoActions.append(WuiTmLink('Modify', WuiAdmin.ksScriptName,
175 { WuiAdmin.ksParamAction: WuiAdmin.ksActionSchedGroupEdit,
176 SchedGroupData.ksParam_idSchedGroup: oEntry.idSchedGroup } ));
177 aoActions.append(WuiTmLink('Clone', WuiAdmin.ksScriptName,
178 { WuiAdmin.ksParamAction: WuiAdmin.ksActionSchedGroupClone,
179 SchedGroupData.ksParam_idSchedGroup: oEntry.idSchedGroup,
180 WuiAdmin.ksParamEffectiveDate: self._tsEffectiveDate, } ));
181 if isDbTimestampInfinity(oEntry.tsExpire):
182 aoActions.append(WuiTmLink('Remove', WuiAdmin.ksScriptName,
183 { WuiAdmin.ksParamAction: WuiAdmin.ksActionSchedGroupDoRemove,
184 SchedGroupData.ksParam_idSchedGroup: oEntry.idSchedGroup },
185 sConfirm = 'Are you sure you want to remove scheduling group #%d?'
186 % (oEntry.idSchedGroup,)));
187
188 return [
189 oEntry.idSchedGroup,
190 oEntry.sName,
191 oEntry.fEnabled,
192 oEntry.enmScheduler,
193 oBuildSrc,
194 oValidationKitSrc,
195 aoMembers,
196 aoTestBoxes,
197 self._formatCommentCell(oEntry.sComment),
198 aoActions,
199 ];
200
注意: 瀏覽 TracBrowser 來幫助您使用儲存庫瀏覽器

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