Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
S
slapos.core
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Xavier Thompson
slapos.core
Commits
be11fd4f
Commit
be11fd4f
authored
Sep 04, 2023
by
Rafael Monnerat
Browse files
Options
Browse Files
Download
Plain Diff
Minor improvements for view Computer Usage
See merge request
nexedi/slapos.core!571
parents
5c29de81
859ed207
Changes
21
Hide whitespace changes
Inline
Side-by-side
Showing
21 changed files
with
241 additions
and
443 deletions
+241
-443
master/bt5/slapos_cloud/SkinTemplateItem/portal_skins/slapos_cloud/Base_getSoftwareReleaseStateOnComputeNode.py
...slapos_cloud/Base_getSoftwareReleaseStateOnComputeNode.py
+0
-4
master/bt5/slapos_cloud/SkinTemplateItem/portal_skins/slapos_cloud/Base_getSoftwareReleaseStateOnComputeNode.xml
...lapos_cloud/Base_getSoftwareReleaseStateOnComputeNode.xml
+0
-62
master/bt5/slapos_cloud/SkinTemplateItem/portal_skins/slapos_cloud/Base_getSoftwareReleaseUsageOnComputeNode.py
...slapos_cloud/Base_getSoftwareReleaseUsageOnComputeNode.py
+0
-9
master/bt5/slapos_cloud/SkinTemplateItem/portal_skins/slapos_cloud/Base_getSoftwareReleaseUsageOnComputeNode.xml
...lapos_cloud/Base_getSoftwareReleaseUsageOnComputeNode.xml
+0
-62
master/bt5/slapos_cloud/SkinTemplateItem/portal_skins/slapos_cloud/ComputeNode_getSoftwareReleaseState.py
...skins/slapos_cloud/ComputeNode_getSoftwareReleaseState.py
+0
-21
master/bt5/slapos_cloud/SkinTemplateItem/portal_skins/slapos_cloud/ComputeNode_getSoftwareReleaseUsage.py
...skins/slapos_cloud/ComputeNode_getSoftwareReleaseUsage.py
+19
-6
master/bt5/slapos_cloud/SkinTemplateItem/portal_skins/slapos_cloud/ComputeNode_viewCurrentUsageReport.xml
...skins/slapos_cloud/ComputeNode_viewCurrentUsageReport.xml
+3
-2
master/bt5/slapos_cloud/SkinTemplateItem/portal_skins/slapos_cloud/ComputeNode_viewCurrentUsageReport/listbox.xml
...apos_cloud/ComputeNode_viewCurrentUsageReport/listbox.xml
+5
-1
master/bt5/slapos_cloud/SkinTemplateItem/portal_skins/slapos_cloud/ComputeNode_viewCurrentUsageReport/listbox_error_reported.xml
...uteNode_viewCurrentUsageReport/listbox_error_reported.xml
+121
-0
master/bt5/slapos_cloud/SkinTemplateItem/portal_skins/slapos_cloud/ComputeNode_viewCurrentUsageReport/listbox_installation_state.xml
...ode_viewCurrentUsageReport/listbox_installation_state.xml
+9
-1
master/bt5/slapos_cloud/SkinTemplateItem/portal_skins/slapos_cloud/ComputeNode_viewCurrentUsageReport/listbox_status.xml
...oud/ComputeNode_viewCurrentUsageReport/listbox_status.xml
+44
-90
master/bt5/slapos_cloud/SkinTemplateItem/portal_skins/slapos_cloud/ComputeNode_viewCurrentUsageReport/listbox_usage.xml
...loud/ComputeNode_viewCurrentUsageReport/listbox_usage.xml
+10
-2
master/bt5/slapos_cloud/SkinTemplateItem/portal_skins/slapos_cloud/SoftwareInstallation_getInstallationState.py
...slapos_cloud/SoftwareInstallation_getInstallationState.py
+7
-0
master/bt5/slapos_cloud/SkinTemplateItem/portal_skins/slapos_cloud/SoftwareInstallation_getInstallationState.xml
...lapos_cloud/SoftwareInstallation_getInstallationState.xml
+2
-2
master/bt5/slapos_cloud/SkinTemplateItem/portal_skins/slapos_cloud/SoftwareRelease_getCurrentInstallationStateAsHtml.py
...loud/SoftwareRelease_getCurrentInstallationStateAsHtml.py
+0
-29
master/bt5/slapos_cloud/SkinTemplateItem/portal_skins/slapos_cloud/SoftwareRelease_getCurrentInstallationStateAsHtml.xml
...oud/SoftwareRelease_getCurrentInstallationStateAsHtml.xml
+0
-62
master/bt5/slapos_cloud/SkinTemplateItem/portal_skins/slapos_cloud/SoftwareRelease_getUsableComputeNodeList.py
.../slapos_cloud/SoftwareRelease_getUsableComputeNodeList.py
+7
-12
master/bt5/slapos_cloud/SkinTemplateItem/portal_skins/slapos_cloud/SoftwareRelease_getUsableComputeNodeWithoutSInstanceList.py
...ftwareRelease_getUsableComputeNodeWithoutSInstanceList.py
+0
-11
master/bt5/slapos_cloud/SkinTemplateItem/portal_skins/slapos_cloud/SoftwareRelease_getUsableComputeNodeWithoutSInstanceList.xml
...twareRelease_getUsableComputeNodeWithoutSInstanceList.xml
+0
-62
master/bt5/slapos_cloud/SkinTemplateItem/portal_skins/slapos_cloud/SoftwareRelease_viewUsableComputeNodeListReport/listbox_amount.xml
...elease_viewUsableComputeNodeListReport/listbox_amount.xml
+13
-1
master/bt5/slapos_erp5/TestTemplateItem/portal_components/test.erp5.testSlapOSCodingStyle.py
...Item/portal_components/test.erp5.testSlapOSCodingStyle.py
+1
-4
No files found.
master/bt5/slapos_cloud/SkinTemplateItem/portal_skins/slapos_cloud/Base_getSoftwareReleaseStateOnComputeNode.py
deleted
100644 → 0
View file @
5c29de81
compute_node
=
context
.
REQUEST
.
get
(
'here'
)
software_release
=
context
return
compute_node
.
ComputeNode_getSoftwareReleaseState
(
software_release
.
getUid
())
master/bt5/slapos_cloud/SkinTemplateItem/portal_skins/slapos_cloud/Base_getSoftwareReleaseStateOnComputeNode.xml
deleted
100644 → 0
View file @
5c29de81
<?xml version="1.0"?>
<ZopeData>
<record
id=
"1"
aka=
"AAAAAAAAAAE="
>
<pickle>
<global
name=
"PythonScript"
module=
"Products.PythonScripts.PythonScript"
/>
</pickle>
<pickle>
<dictionary>
<item>
<key>
<string>
_bind_names
</string>
</key>
<value>
<object>
<klass>
<global
name=
"_reconstructor"
module=
"copy_reg"
/>
</klass>
<tuple>
<global
name=
"NameAssignments"
module=
"Shared.DC.Scripts.Bindings"
/>
<global
name=
"object"
module=
"__builtin__"
/>
<none/>
</tuple>
<state>
<dictionary>
<item>
<key>
<string>
_asgns
</string>
</key>
<value>
<dictionary>
<item>
<key>
<string>
name_container
</string>
</key>
<value>
<string>
container
</string>
</value>
</item>
<item>
<key>
<string>
name_context
</string>
</key>
<value>
<string>
context
</string>
</value>
</item>
<item>
<key>
<string>
name_m_self
</string>
</key>
<value>
<string>
script
</string>
</value>
</item>
<item>
<key>
<string>
name_subpath
</string>
</key>
<value>
<string>
traverse_subpath
</string>
</value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</state>
</object>
</value>
</item>
<item>
<key>
<string>
_params
</string>
</key>
<value>
<string>
*args, **kwargs
</string>
</value>
</item>
<item>
<key>
<string>
id
</string>
</key>
<value>
<string>
Base_getSoftwareReleaseStateOnComputeNode
</string>
</value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
master/bt5/slapos_cloud/SkinTemplateItem/portal_skins/slapos_cloud/Base_getSoftwareReleaseUsageOnComputeNode.py
deleted
100644 → 0
View file @
5c29de81
current
=
context
.
REQUEST
.
get
(
'here'
)
if
current
.
getPortalType
()
==
'Software Release'
:
software_release
=
current
compute_node
=
context
else
:
compute_node
=
current
software_release
=
context
return
compute_node
.
ComputeNode_getSoftwareReleaseUsage
(
software_release
.
getUrlString
())
master/bt5/slapos_cloud/SkinTemplateItem/portal_skins/slapos_cloud/Base_getSoftwareReleaseUsageOnComputeNode.xml
deleted
100644 → 0
View file @
5c29de81
<?xml version="1.0"?>
<ZopeData>
<record
id=
"1"
aka=
"AAAAAAAAAAE="
>
<pickle>
<global
name=
"PythonScript"
module=
"Products.PythonScripts.PythonScript"
/>
</pickle>
<pickle>
<dictionary>
<item>
<key>
<string>
_bind_names
</string>
</key>
<value>
<object>
<klass>
<global
name=
"_reconstructor"
module=
"copy_reg"
/>
</klass>
<tuple>
<global
name=
"NameAssignments"
module=
"Shared.DC.Scripts.Bindings"
/>
<global
name=
"object"
module=
"__builtin__"
/>
<none/>
</tuple>
<state>
<dictionary>
<item>
<key>
<string>
_asgns
</string>
</key>
<value>
<dictionary>
<item>
<key>
<string>
name_container
</string>
</key>
<value>
<string>
container
</string>
</value>
</item>
<item>
<key>
<string>
name_context
</string>
</key>
<value>
<string>
context
</string>
</value>
</item>
<item>
<key>
<string>
name_m_self
</string>
</key>
<value>
<string>
script
</string>
</value>
</item>
<item>
<key>
<string>
name_subpath
</string>
</key>
<value>
<string>
traverse_subpath
</string>
</value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</state>
</object>
</value>
</item>
<item>
<key>
<string>
_params
</string>
</key>
<value>
<string>
*args, **kwargs
</string>
</value>
</item>
<item>
<key>
<string>
id
</string>
</key>
<value>
<string>
Base_getSoftwareReleaseUsageOnComputeNode
</string>
</value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
master/bt5/slapos_cloud/SkinTemplateItem/portal_skins/slapos_cloud/ComputeNode_getSoftwareReleaseState.py
deleted
100644 → 0
View file @
5c29de81
portal
=
context
.
getPortalObject
()
software_installation_list
=
portal
.
portal_catalog
(
portal_type
=
'Software Installation'
,
default_aggregate_uid
=
context
.
getUid
(),
validation_state
=
'validated'
,
limit
=
1
,
url_string
=
{
'query'
:
portal
.
portal_catalog
.
getResultValue
(
uid
=
software_release_uid
).
getUrlString
(),
'key'
:
'ExactMatch'
},
sort_on
=
((
'creation_date'
,
'DESC'
),)
)
if
len
(
software_installation_list
)
==
0
:
return
'Destroyed'
software_installation
=
software_installation_list
[
0
].
getObject
()
s
=
software_installation
.
getSlapState
()
if
s
==
'start_requested'
:
return
'Installation requested'
else
:
return
'Destruction requested'
master/bt5/slapos_cloud/SkinTemplateItem/portal_skins/slapos_cloud/ComputeNode_getSoftwareReleaseUsage.py
View file @
be11fd4f
return
context
.
getPortalObject
().
portal_catalog
.
countResults
(
portal
=
context
.
getPortalObject
()
portal_type
=
'Compute Partition'
,
if
context
.
getParentValue
().
isMemberOf
(
'allocation_scope/open'
):
parent_uid
=
context
.
getUid
(),
# This is faster but all values are free_for_request == 0 if the computer is closed
free_for_request
=
0
,
return
context
.
getPortalObject
().
portal_catalog
.
countResults
(
software_release_url
=
software_release_url
portal_type
=
'Compute Partition'
,
)[
0
][
0
]
parent_uid
=
context
.
getUid
(),
free_for_request
=
0
,
software_release_url
=
software_release_url
)[
0
][
0
]
else
:
computer_uid_list
=
[
i
.
uid
for
i
in
portal
.
portal_catalog
(
portal_type
=
'Compute Partition'
,
parent_uid
=
context
.
getUid
()
)]
if
not
computer_uid_list
:
return
0
return
portal
.
portal_catalog
.
countResults
(
portal_type
=
'Software Instance'
,
default_aggregate_uid
=
computer_uid_list
,
url_string
=
software_release_url
)[
0
][
0
]
master/bt5/slapos_cloud/SkinTemplateItem/portal_skins/slapos_cloud/ComputeNode_viewCurrentUsageReport.xml
View file @
be11fd4f
...
@@ -102,13 +102,14 @@
...
@@ -102,13 +102,14 @@
<string>
listbox_installation_state
</string>
<string>
listbox_installation_state
</string>
<string>
listbox_usage
</string>
<string>
listbox_usage
</string>
<string>
my_busy_compute_partition_list_creation_date
</string>
<string>
my_busy_compute_partition_list_creation_date
</string>
<string>
listbox_installation_status
</string>
<string>
my_busy_compute_partition_list_instance_tree_title
</string>
<string>
my_busy_compute_partition_list_instance_tree_title
</string>
<string>
my_busy_compute_partition_list_instance_title
</string>
<string>
my_busy_compute_partition_list_instance_title
</string>
<string>
listbox_image
</string>
<string>
listbox_image
</string>
<string>
listbox_software_release
</string>
<string>
listbox_software_release
</string>
<string>
my_busy_compute_partition_list_error_reported
</string>
<string>
my_busy_compute_partition_list_status
</string>
<string>
my_busy_compute_partition_list_status
</string>
<string>
listbox_status
</string>
<string>
my_busy_compute_partition_list_error_reported
</string>
<string>
listbox_error_reported
</string>
</list>
</list>
</value>
</value>
</item>
</item>
...
...
master/bt5/slapos_cloud/SkinTemplateItem/portal_skins/slapos_cloud/ComputeNode_viewCurrentUsageReport/listbox.xml
View file @
be11fd4f
...
@@ -145,9 +145,13 @@
...
@@ -145,9 +145,13 @@
<string>
Usage
</string>
<string>
Usage
</string>
</tuple>
</tuple>
<tuple>
<tuple>
<string>
installation_
status
</string>
<string>
status
</string>
<string>
Status
</string>
<string>
Status
</string>
</tuple>
</tuple>
<tuple>
<string>
error_reported
</string>
<string>
Reported Message
</string>
</tuple>
</list>
</list>
</value>
</value>
</item>
</item>
...
...
master/bt5/slapos_cloud/SkinTemplateItem/portal_skins/slapos_cloud/ComputeNode_viewCurrentUsageReport/listbox_error_reported.xml
0 → 100644
View file @
be11fd4f
<?xml version="1.0"?>
<ZopeData>
<record
id=
"1"
aka=
"AAAAAAAAAAE="
>
<pickle>
<global
name=
"ProxyField"
module=
"Products.ERP5Form.ProxyField"
/>
</pickle>
<pickle>
<dictionary>
<item>
<key>
<string>
delegated_list
</string>
</key>
<value>
<list>
<string>
default
</string>
<string>
editable
</string>
<string>
title
</string>
</list>
</value>
</item>
<item>
<key>
<string>
id
</string>
</key>
<value>
<string>
listbox_error_reported
</string>
</value>
</item>
<item>
<key>
<string>
message_values
</string>
</key>
<value>
<dictionary>
<item>
<key>
<string>
external_validator_failed
</string>
</key>
<value>
<string>
The input failed the external validator.
</string>
</value>
</item>
</dictionary>
</value>
</item>
<item>
<key>
<string>
overrides
</string>
</key>
<value>
<dictionary>
<item>
<key>
<string>
field_id
</string>
</key>
<value>
<string></string>
</value>
</item>
<item>
<key>
<string>
form_id
</string>
</key>
<value>
<string></string>
</value>
</item>
</dictionary>
</value>
</item>
<item>
<key>
<string>
tales
</string>
</key>
<value>
<dictionary>
<item>
<key>
<string>
default
</string>
</key>
<value>
<persistent>
<string
encoding=
"base64"
>
AAAAAAAAAAI=
</string>
</persistent>
</value>
</item>
<item>
<key>
<string>
editable
</string>
</key>
<value>
<string></string>
</value>
</item>
<item>
<key>
<string>
field_id
</string>
</key>
<value>
<string></string>
</value>
</item>
<item>
<key>
<string>
form_id
</string>
</key>
<value>
<string></string>
</value>
</item>
<item>
<key>
<string>
title
</string>
</key>
<value>
<string></string>
</value>
</item>
</dictionary>
</value>
</item>
<item>
<key>
<string>
values
</string>
</key>
<value>
<dictionary>
<item>
<key>
<string>
default
</string>
</key>
<value>
<string></string>
</value>
</item>
<item>
<key>
<string>
editable
</string>
</key>
<value>
<int>
0
</int>
</value>
</item>
<item>
<key>
<string>
field_id
</string>
</key>
<value>
<string>
my_string_field
</string>
</value>
</item>
<item>
<key>
<string>
form_id
</string>
</key>
<value>
<string>
Base_viewFieldLibrary
</string>
</value>
</item>
<item>
<key>
<string>
title
</string>
</key>
<value>
<string>
Reported Error
</string>
</value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</pickle>
</record>
<record
id=
"2"
aka=
"AAAAAAAAAAI="
>
<pickle>
<global
name=
"TALESMethod"
module=
"Products.Formulator.TALESField"
/>
</pickle>
<pickle>
<dictionary>
<item>
<key>
<string>
_text
</string>
</key>
<value>
<string>
python: cell.getAggregateRelatedValue(portal_type="Software Instance").SoftwareInstance_hasReportedError(include_message=True, )
</string>
</value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
master/bt5/slapos_cloud/SkinTemplateItem/portal_skins/slapos_cloud/ComputeNode_viewCurrentUsageReport/listbox_installation_state.xml
View file @
be11fd4f
...
@@ -60,6 +60,10 @@
...
@@ -60,6 +60,10 @@
<persistent>
<string
encoding=
"base64"
>
AAAAAAAAAAI=
</string>
</persistent>
<persistent>
<string
encoding=
"base64"
>
AAAAAAAAAAI=
</string>
</persistent>
</value>
</value>
</item>
</item>
<item>
<key>
<string>
display_width
</string>
</key>
<value>
<string></string>
</value>
</item>
<item>
<item>
<key>
<string>
field_id
</string>
</key>
<key>
<string>
field_id
</string>
</key>
<value>
<string></string>
</value>
<value>
<string></string>
</value>
...
@@ -72,6 +76,10 @@
...
@@ -72,6 +76,10 @@
<key>
<string>
target
</string>
</key>
<key>
<string>
target
</string>
</key>
<value>
<string></string>
</value>
<value>
<string></string>
</value>
</item>
</item>
<item>
<key>
<string>
title
</string>
</key>
<value>
<string></string>
</value>
</item>
</dictionary>
</dictionary>
</value>
</value>
</item>
</item>
...
@@ -117,7 +125,7 @@
...
@@ -117,7 +125,7 @@
<dictionary>
<dictionary>
<item>
<item>
<key>
<string>
_text
</string>
</key>
<key>
<string>
_text
</string>
</key>
<value>
<string>
cell/
Base_getSoftwareReleaseStateOnComputeNod
e
</string>
</value>
<value>
<string>
cell/
SoftwareInstallation_getInstallationStat
e
</string>
</value>
</item>
</item>
</dictionary>
</dictionary>
</pickle>
</pickle>
...
...
master/bt5/slapos_cloud/SkinTemplateItem/portal_skins/slapos_cloud/ComputeNode_viewCurrentUsageReport/listbox_
installation_
status.xml
→
master/bt5/slapos_cloud/SkinTemplateItem/portal_skins/slapos_cloud/ComputeNode_viewCurrentUsageReport/listbox_status.xml
View file @
be11fd4f
...
@@ -2,13 +2,13 @@
...
@@ -2,13 +2,13 @@
<ZopeData>
<ZopeData>
<record
id=
"1"
aka=
"AAAAAAAAAAE="
>
<record
id=
"1"
aka=
"AAAAAAAAAAE="
>
<pickle>
<pickle>
<global
name=
"
EditorField"
module=
"Products.ERP5Form.Editor
Field"
/>
<global
name=
"
GadgetField"
module=
"Products.ERP5Form.Gadget
Field"
/>
</pickle>
</pickle>
<pickle>
<pickle>
<dictionary>
<dictionary>
<item>
<item>
<key>
<string>
id
</string>
</key>
<key>
<string>
id
</string>
</key>
<value>
<string>
listbox_
installation_
status
</string>
</value>
<value>
<string>
listbox_status
</string>
</value>
</item>
</item>
<item>
<item>
<key>
<string>
message_values
</string>
</key>
<key>
<string>
message_values
</string>
</key>
...
@@ -19,20 +19,8 @@
...
@@ -19,20 +19,8 @@
<value>
<string>
The input failed the external validator.
</string>
</value>
<value>
<string>
The input failed the external validator.
</string>
</value>
</item>
</item>
<item>
<item>
<key>
<string>
line_too_long
</string>
</key>
<key>
<string>
no_validator
</string>
</key>
<value>
<string>
A line was too long.
</string>
</value>
<value>
<string>
Does not support this operation.
</string>
</value>
</item>
<item>
<key>
<string>
required_not_found
</string>
</key>
<value>
<string>
Input is required but no input given.
</string>
</value>
</item>
<item>
<key>
<string>
too_long
</string>
</key>
<value>
<string>
You entered too many characters.
</string>
</value>
</item>
<item>
<key>
<string>
too_many_lines
</string>
</key>
<value>
<string>
You entered too many lines.
</string>
</value>
</item>
</item>
</dictionary>
</dictionary>
</value>
</value>
...
@@ -49,6 +37,10 @@
...
@@ -49,6 +37,10 @@
<key>
<string>
css_class
</string>
</key>
<key>
<string>
css_class
</string>
</key>
<value>
<string></string>
</value>
<value>
<string></string>
</value>
</item>
</item>
<item>
<key>
<string>
data_url
</string>
</key>
<value>
<string></string>
</value>
</item>
<item>
<item>
<key>
<string>
default
</string>
</key>
<key>
<string>
default
</string>
</key>
<value>
<string></string>
</value>
<value>
<string></string>
</value>
...
@@ -74,7 +66,7 @@
...
@@ -74,7 +66,7 @@
<value>
<string></string>
</value>
<value>
<string></string>
</value>
</item>
</item>
<item>
<item>
<key>
<string>
height
</string>
</key>
<key>
<string>
gadget_url
</string>
</key>
<value>
<string></string>
</value>
<value>
<string></string>
</value>
</item>
</item>
<item>
<item>
...
@@ -82,23 +74,11 @@
...
@@ -82,23 +74,11 @@
<value>
<string></string>
</value>
<value>
<string></string>
</value>
</item>
</item>
<item>
<item>
<key>
<string>
max_length
</string>
</key>
<key>
<string>
js_sandbox
</string>
</key>
<value>
<string></string>
</value>
<value>
<string></string>
</value>
</item>
</item>
<item>
<item>
<key>
<string>
max_linelength
</string>
</key>
<key>
<string>
renderjs_extra
</string>
</key>
<value>
<string></string>
</value>
</item>
<item>
<key>
<string>
max_lines
</string>
</key>
<value>
<string></string>
</value>
</item>
<item>
<key>
<string>
required
</string>
</key>
<value>
<string></string>
</value>
</item>
<item>
<key>
<string>
text_editor
</string>
</key>
<value>
<string></string>
</value>
<value>
<string></string>
</value>
</item>
</item>
<item>
<item>
...
@@ -106,15 +86,11 @@
...
@@ -106,15 +86,11 @@
<value>
<string></string>
</value>
<value>
<string></string>
</value>
</item>
</item>
<item>
<item>
<key>
<string>
unicode
</string>
</key>
<key>
<string>
validator_field_id
</string>
</key>
<value>
<string></string>
</value>
</item>
<item>
<key>
<string>
whitespace_preserve
</string>
</key>
<value>
<string></string>
</value>
<value>
<string></string>
</value>
</item>
</item>
<item>
<item>
<key>
<string>
width
</string>
</key>
<key>
<string>
validator_form_id
</string>
</key>
<value>
<string></string>
</value>
<value>
<string></string>
</value>
</item>
</item>
</dictionary>
</dictionary>
...
@@ -132,11 +108,13 @@
...
@@ -132,11 +108,13 @@
<key>
<string>
css_class
</string>
</key>
<key>
<string>
css_class
</string>
</key>
<value>
<string></string>
</value>
<value>
<string></string>
</value>
</item>
</item>
<item>
<key>
<string>
data_url
</string>
</key>
<value>
<string></string>
</value>
</item>
<item>
<item>
<key>
<string>
default
</string>
</key>
<key>
<string>
default
</string>
</key>
<value>
<value>
<string></string>
</value>
<persistent>
<string
encoding=
"base64"
>
AAAAAAAAAAI=
</string>
</persistent>
</value>
</item>
</item>
<item>
<item>
<key>
<string>
description
</string>
</key>
<key>
<string>
description
</string>
</key>
...
@@ -159,7 +137,7 @@
...
@@ -159,7 +137,7 @@
<value>
<string></string>
</value>
<value>
<string></string>
</value>
</item>
</item>
<item>
<item>
<key>
<string>
height
</string>
</key>
<key>
<string>
gadget_url
</string>
</key>
<value>
<string></string>
</value>
<value>
<string></string>
</value>
</item>
</item>
<item>
<item>
...
@@ -167,39 +145,25 @@
...
@@ -167,39 +145,25 @@
<value>
<string></string>
</value>
<value>
<string></string>
</value>
</item>
</item>
<item>
<item>
<key>
<string>
max_length
</string>
</key>
<key>
<string>
js_sandbox
</string>
</key>
<value>
<string></string>
</value>
</item>
<item>
<key>
<string>
max_linelength
</string>
</key>
<value>
<string></string>
</value>
</item>
<item>
<key>
<string>
max_lines
</string>
</key>
<value>
<string></string>
</value>
<value>
<string></string>
</value>
</item>
</item>
<item>
<item>
<key>
<string>
required
</string>
</key>
<key>
<string>
renderjs_extra
</string>
</key>
<value>
<string></string>
</value>
<value>
</item>
<persistent>
<string
encoding=
"base64"
>
AAAAAAAAAAI=
</string>
</persistent>
<item>
</value>
<key>
<string>
text_editor
</string>
</key>
<value>
<string></string>
</value>
</item>
</item>
<item>
<item>
<key>
<string>
title
</string>
</key>
<key>
<string>
title
</string>
</key>
<value>
<string></string>
</value>
<value>
<string></string>
</value>
</item>
</item>
<item>
<item>
<key>
<string>
unicode
</string>
</key>
<key>
<string>
validator_field_id
</string>
</key>
<value>
<string></string>
</value>
<value>
<string></string>
</value>
</item>
</item>
<item>
<item>
<key>
<string>
whitespace_preserve
</string>
</key>
<key>
<string>
validator_form_id
</string>
</key>
<value>
<string></string>
</value>
</item>
<item>
<key>
<string>
width
</string>
</key>
<value>
<string></string>
</value>
<value>
<string></string>
</value>
</item>
</item>
</dictionary>
</dictionary>
...
@@ -217,6 +181,10 @@
...
@@ -217,6 +181,10 @@
<key>
<string>
css_class
</string>
</key>
<key>
<string>
css_class
</string>
</key>
<value>
<string></string>
</value>
<value>
<string></string>
</value>
</item>
</item>
<item>
<key>
<string>
data_url
</string>
</key>
<value>
<int>
0
</int>
</value>
</item>
<item>
<item>
<key>
<string>
default
</string>
</key>
<key>
<string>
default
</string>
</key>
<value>
<string></string>
</value>
<value>
<string></string>
</value>
...
@@ -227,7 +195,7 @@
...
@@ -227,7 +195,7 @@
</item>
</item>
<item>
<item>
<key>
<string>
editable
</string>
</key>
<key>
<string>
editable
</string>
</key>
<value>
<int>
0
</int>
</value>
<value>
<int>
1
</int>
</value>
</item>
</item>
<item>
<item>
<key>
<string>
enabled
</string>
</key>
<key>
<string>
enabled
</string>
</key>
...
@@ -242,48 +210,34 @@
...
@@ -242,48 +210,34 @@
<value>
<string></string>
</value>
<value>
<string></string>
</value>
</item>
</item>
<item>
<item>
<key>
<string>
height
</string>
</key>
<key>
<string>
gadget_url
</string>
</key>
<value>
<
int>
5
</int
>
</value>
<value>
<
string>
gadget_slapos_status.html
</string
>
</value>
</item>
</item>
<item>
<item>
<key>
<string>
hidden
</string>
</key>
<key>
<string>
hidden
</string>
</key>
<value>
<int>
0
</int>
</value>
<value>
<int>
0
</int>
</value>
</item>
</item>
<item>
<item>
<key>
<string>
max_length
</string>
</key>
<key>
<string>
js_sandbox
</string>
</key>
<value>
<string></string>
</value>
<value>
<string></string>
</value>
</item>
</item>
<item>
<item>
<key>
<string>
max_linelength
</string>
</key>
<key>
<string>
renderjs_extra
</string>
</key>
<value>
<string></string>
</value>
<value>
</item>
<list/>
<item>
</value>
<key>
<string>
max_lines
</string>
</key>
<value>
<string></string>
</value>
</item>
<item>
<key>
<string>
required
</string>
</key>
<value>
<int>
0
</int>
</value>
</item>
<item>
<key>
<string>
text_editor
</string>
</key>
<value>
<string>
text_area
</string>
</value>
</item>
</item>
<item>
<item>
<key>
<string>
title
</string>
</key>
<key>
<string>
title
</string>
</key>
<value>
<string>
Monitoring
</string>
</value>
<value>
<string>
Status
</string>
</value>
</item>
<item>
<key>
<string>
unicode
</string>
</key>
<value>
<int>
0
</int>
</value>
</item>
</item>
<item>
<item>
<key>
<string>
whitespace_preserve
</string>
</key>
<key>
<string>
validator_field_id
</string>
</key>
<value>
<
int>
0
</int
>
</value>
<value>
<
string></string
>
</value>
</item>
</item>
<item>
<item>
<key>
<string>
width
</string>
</key>
<key>
<string>
validator_form_id
</string>
</key>
<value>
<
int>
40
</int
>
</value>
<value>
<
string></string
>
</value>
</item>
</item>
</dictionary>
</dictionary>
</value>
</value>
...
@@ -299,7 +253,7 @@
...
@@ -299,7 +253,7 @@
<dictionary>
<dictionary>
<item>
<item>
<key>
<string>
_text
</string>
</key>
<key>
<string>
_text
</string>
</key>
<value>
<string>
python:
cell.SoftwareRelease_getCurrentInstallationStateAsHtml(context.REQUEST.get(\'here\').getUid())
</string>
</value>
<value>
<string>
python:
[(\'jio_key\', cell.getRelativeUrl()), (\'result\', cell.getAccessStatus())]
</string>
</value>
</item>
</item>
</dictionary>
</dictionary>
</pickle>
</pickle>
...
...
master/bt5/slapos_cloud/SkinTemplateItem/portal_skins/slapos_cloud/ComputeNode_viewCurrentUsageReport/listbox_usage.xml
View file @
be11fd4f
...
@@ -60,6 +60,10 @@
...
@@ -60,6 +60,10 @@
<persistent>
<string
encoding=
"base64"
>
AAAAAAAAAAI=
</string>
</persistent>
<persistent>
<string
encoding=
"base64"
>
AAAAAAAAAAI=
</string>
</persistent>
</value>
</value>
</item>
</item>
<item>
<key>
<string>
display_width
</string>
</key>
<value>
<string></string>
</value>
</item>
<item>
<item>
<key>
<string>
field_id
</string>
</key>
<key>
<string>
field_id
</string>
</key>
<value>
<string></string>
</value>
<value>
<string></string>
</value>
...
@@ -72,6 +76,10 @@
...
@@ -72,6 +76,10 @@
<key>
<string>
target
</string>
</key>
<key>
<string>
target
</string>
</key>
<value>
<string></string>
</value>
<value>
<string></string>
</value>
</item>
</item>
<item>
<key>
<string>
title
</string>
</key>
<value>
<string></string>
</value>
</item>
</dictionary>
</dictionary>
</value>
</value>
</item>
</item>
...
@@ -101,7 +109,7 @@
...
@@ -101,7 +109,7 @@
</item>
</item>
<item>
<item>
<key>
<string>
title
</string>
</key>
<key>
<string>
title
</string>
</key>
<value>
<string>
listbox_
installation_stat
e
</string>
</value>
<value>
<string>
listbox_
usag
e
</string>
</value>
</item>
</item>
</dictionary>
</dictionary>
</value>
</value>
...
@@ -117,7 +125,7 @@
...
@@ -117,7 +125,7 @@
<dictionary>
<dictionary>
<item>
<item>
<key>
<string>
_text
</string>
</key>
<key>
<string>
_text
</string>
</key>
<value>
<string>
cell/Base_getSoftwareReleaseUsageOnComputeNode
</string>
</value>
<value>
<string>
python: cell.getAggregateValue(portal_type="Compute Node").ComputeNode_getSoftwareReleaseUsage(cell.getUrlString())
</string>
</value>
</item>
</item>
</dictionary>
</dictionary>
</pickle>
</pickle>
...
...
master/bt5/slapos_cloud/SkinTemplateItem/portal_skins/slapos_cloud/SoftwareInstallation_getInstallationState.py
0 → 100644
View file @
be11fd4f
if
context
.
getValidationState
()
!=
"validated"
:
return
'Destroyed'
if
context
.
getSlapState
()
==
'start_requested'
:
return
'Installation requested'
else
:
return
'Destruction requested'
master/bt5/slapos_cloud/SkinTemplateItem/portal_skins/slapos_cloud/
ComputeNode_getSoftwareRelease
State.xml
→
master/bt5/slapos_cloud/SkinTemplateItem/portal_skins/slapos_cloud/
SoftwareInstallation_getInstallation
State.xml
View file @
be11fd4f
...
@@ -50,11 +50,11 @@
...
@@ -50,11 +50,11 @@
</item>
</item>
<item>
<item>
<key>
<string>
_params
</string>
</key>
<key>
<string>
_params
</string>
</key>
<value>
<string>
software_release_uid
</string>
</value>
<value>
<string></string>
</value>
</item>
</item>
<item>
<item>
<key>
<string>
id
</string>
</key>
<key>
<string>
id
</string>
</key>
<value>
<string>
ComputeNode_getSoftwareRelease
State
</string>
</value>
<value>
<string>
SoftwareInstallation_getInstallation
State
</string>
</value>
</item>
</item>
</dictionary>
</dictionary>
</pickle>
</pickle>
...
...
master/bt5/slapos_cloud/SkinTemplateItem/portal_skins/slapos_cloud/SoftwareRelease_getCurrentInstallationStateAsHtml.py
deleted
100644 → 0
View file @
5c29de81
from
DateTime
import
DateTime
portal
=
context
.
getPortalObject
()
error_style
=
'background-color: red; display: block; height: 2em; width: 2em; float: left; margin: 5px;'
access_style
=
'background-color: green; display: block; height: 2em; width: 2em; float: left; margin: 5px;'
software_installation
=
portal
.
portal_catalog
.
getResultValue
(
portal_type
=
'Software Installation'
,
validation_state
=
'validated'
,
url_string
=
context
.
getUrlString
(),
default_aggregate_uid
=
compute_node_uid
)
if
not
software_installation
or
software_installation
.
getSlapState
()
==
"destroy_requested"
:
return
'<span" style="%s" title="Information not available"></a>'
%
error_style
d
=
software_installation
.
getAccessStatus
()
if
d
.
get
(
"no_data"
)
==
1
:
return
"<a href='%s' style='%s'></a>"
%
(
software_installation
.
getRelativeUrl
(),
error_style
)
result
=
d
[
'text'
]
date
=
DateTime
(
d
[
'created_at'
])
limit_date
=
DateTime
()
-
0.084
if
result
.
startswith
(
'#error '
)
or
(
date
-
limit_date
)
<
0
:
access_style
=
error_style
return
"<a href='%s' style='%s' title='%s at %s'></a>"
%
(
software_installation
.
getRelativeUrl
(),
access_style
,
result
,
d
[
'created_at'
])
master/bt5/slapos_cloud/SkinTemplateItem/portal_skins/slapos_cloud/SoftwareRelease_getCurrentInstallationStateAsHtml.xml
deleted
100644 → 0
View file @
5c29de81
<?xml version="1.0"?>
<ZopeData>
<record
id=
"1"
aka=
"AAAAAAAAAAE="
>
<pickle>
<global
name=
"PythonScript"
module=
"Products.PythonScripts.PythonScript"
/>
</pickle>
<pickle>
<dictionary>
<item>
<key>
<string>
_bind_names
</string>
</key>
<value>
<object>
<klass>
<global
name=
"_reconstructor"
module=
"copy_reg"
/>
</klass>
<tuple>
<global
name=
"NameAssignments"
module=
"Shared.DC.Scripts.Bindings"
/>
<global
name=
"object"
module=
"__builtin__"
/>
<none/>
</tuple>
<state>
<dictionary>
<item>
<key>
<string>
_asgns
</string>
</key>
<value>
<dictionary>
<item>
<key>
<string>
name_container
</string>
</key>
<value>
<string>
container
</string>
</value>
</item>
<item>
<key>
<string>
name_context
</string>
</key>
<value>
<string>
context
</string>
</value>
</item>
<item>
<key>
<string>
name_m_self
</string>
</key>
<value>
<string>
script
</string>
</value>
</item>
<item>
<key>
<string>
name_subpath
</string>
</key>
<value>
<string>
traverse_subpath
</string>
</value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</state>
</object>
</value>
</item>
<item>
<key>
<string>
_params
</string>
</key>
<value>
<string>
compute_node_uid
</string>
</value>
</item>
<item>
<key>
<string>
id
</string>
</key>
<value>
<string>
SoftwareRelease_getCurrentInstallationStateAsHtml
</string>
</value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
master/bt5/slapos_cloud/SkinTemplateItem/portal_skins/slapos_cloud/SoftwareRelease_getUsableComputeNodeList.py
View file @
be11fd4f
kw
[
'portal_type'
]
=
'Software Installation'
portal
=
context
.
getPortalObject
()
kw
[
'validation_state'
]
=
'validated'
kw
[
'url_string'
]
=
context
.
getUrlString
()
software_installation_list
=
context
.
portal_catalog
(
**
kw
)
compute_partition_list
=
portal
.
portal_catalog
(
compute_node_list
=
[]
software_release_url
=
context
.
getUrlString
(),
allocation_scope_list
=
[
'open/personal'
,
'open/public'
]
free_for_request
=
1
,
for
software_installation
in
software_installation_list
:
group_by
=
(
"parent_uid"
,)
compute_node
=
software_installation
.
getAggregateValue
()
)
if
software_installation
.
getSlapState
()
==
'start_requested'
and
\
compute_node
.
getAllocationScope
()
in
allocation_scope_list
:
compute_node_list
.
append
(
compute_node
)
return
compute_node_list
return
[
c
.
getParentValue
()
for
c
in
compute_partition_list
]
master/bt5/slapos_cloud/SkinTemplateItem/portal_skins/slapos_cloud/SoftwareRelease_getUsableComputeNodeWithoutSInstanceList.py
deleted
100644 → 0
View file @
5c29de81
compute_node_list
=
[]
for
si
in
context
.
portal_catalog
(
url_string
=
context
.
getUrlString
(),
portal_type
=
'Software Installation'
,
validation_state
=
'validated'
):
compute_node
=
si
.
getAggregateValue
()
if
si
.
getSlapState
()
==
'start_requested'
and
\
not
compute_node
.
ComputeNode_getSoftwareReleaseUsage
(
context
.
getUrlString
())
\
and
compute_node
.
getValidationState
()
==
'validated'
:
compute_node_list
.
append
(
compute_node
)
return
compute_node_list
master/bt5/slapos_cloud/SkinTemplateItem/portal_skins/slapos_cloud/SoftwareRelease_getUsableComputeNodeWithoutSInstanceList.xml
deleted
100644 → 0
View file @
5c29de81
<?xml version="1.0"?>
<ZopeData>
<record
id=
"1"
aka=
"AAAAAAAAAAE="
>
<pickle>
<global
name=
"PythonScript"
module=
"Products.PythonScripts.PythonScript"
/>
</pickle>
<pickle>
<dictionary>
<item>
<key>
<string>
_bind_names
</string>
</key>
<value>
<object>
<klass>
<global
name=
"_reconstructor"
module=
"copy_reg"
/>
</klass>
<tuple>
<global
name=
"NameAssignments"
module=
"Shared.DC.Scripts.Bindings"
/>
<global
name=
"object"
module=
"__builtin__"
/>
<none/>
</tuple>
<state>
<dictionary>
<item>
<key>
<string>
_asgns
</string>
</key>
<value>
<dictionary>
<item>
<key>
<string>
name_container
</string>
</key>
<value>
<string>
container
</string>
</value>
</item>
<item>
<key>
<string>
name_context
</string>
</key>
<value>
<string>
context
</string>
</value>
</item>
<item>
<key>
<string>
name_m_self
</string>
</key>
<value>
<string>
script
</string>
</value>
</item>
<item>
<key>
<string>
name_subpath
</string>
</key>
<value>
<string>
traverse_subpath
</string>
</value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</state>
</object>
</value>
</item>
<item>
<key>
<string>
_params
</string>
</key>
<value>
<string>
**kw
</string>
</value>
</item>
<item>
<key>
<string>
id
</string>
</key>
<value>
<string>
SoftwareRelease_getUsableComputeNodeWithoutSInstanceList
</string>
</value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
master/bt5/slapos_cloud/SkinTemplateItem/portal_skins/slapos_cloud/SoftwareRelease_viewUsableComputeNodeListReport/listbox_amount.xml
View file @
be11fd4f
...
@@ -61,6 +61,14 @@
...
@@ -61,6 +61,14 @@
<persistent>
<string
encoding=
"base64"
>
AAAAAAAAAAI=
</string>
</persistent>
<persistent>
<string
encoding=
"base64"
>
AAAAAAAAAAI=
</string>
</persistent>
</value>
</value>
</item>
</item>
<item>
<key>
<string>
display_width
</string>
</key>
<value>
<string></string>
</value>
</item>
<item>
<key>
<string>
editable
</string>
</key>
<value>
<string></string>
</value>
</item>
<item>
<item>
<key>
<string>
field_id
</string>
</key>
<key>
<string>
field_id
</string>
</key>
<value>
<string></string>
</value>
<value>
<string></string>
</value>
...
@@ -73,6 +81,10 @@
...
@@ -73,6 +81,10 @@
<key>
<string>
target
</string>
</key>
<key>
<string>
target
</string>
</key>
<value>
<string></string>
</value>
<value>
<string></string>
</value>
</item>
</item>
<item>
<key>
<string>
title
</string>
</key>
<value>
<string></string>
</value>
</item>
</dictionary>
</dictionary>
</value>
</value>
</item>
</item>
...
@@ -122,7 +134,7 @@
...
@@ -122,7 +134,7 @@
<dictionary>
<dictionary>
<item>
<item>
<key>
<string>
_text
</string>
</key>
<key>
<string>
_text
</string>
</key>
<value>
<string>
python: cell.
Base_getSoftwareReleaseUsageOnComputeNode(
)
</string>
</value>
<value>
<string>
python: cell.
ComputeNode_getSoftwareReleaseUsage(context.getUrlString()
)
</string>
</value>
</item>
</item>
</dictionary>
</dictionary>
</pickle>
</pickle>
...
...
master/bt5/slapos_erp5/TestTemplateItem/portal_components/test.erp5.testSlapOSCodingStyle.py
View file @
be11fd4f
...
@@ -71,8 +71,6 @@ def makeTestSlapOSCodingStyleTestCase(tested_business_template):
...
@@ -71,8 +71,6 @@ def makeTestSlapOSCodingStyleTestCase(tested_business_template):
'slapos_cloud/AlarmTool_checkComputeNodeMigrationConsistency'
,
'slapos_cloud/AlarmTool_checkComputeNodeMigrationConsistency'
,
'slapos_cloud/AlarmTool_checkInstanceTreeMigrationConsistency'
,
'slapos_cloud/AlarmTool_checkInstanceTreeMigrationConsistency'
,
'slapos_cloud/AlarmTool_checkPredecessorToSuccessorMigrationConsistency'
,
'slapos_cloud/AlarmTool_checkPredecessorToSuccessorMigrationConsistency'
,
'slapos_cloud/Base_getSoftwareReleaseStateOnComputeNode'
,
'slapos_cloud/Base_getSoftwareReleaseUsageOnComputeNode'
,
'slapos_cloud/ComputeNode_afterClone'
,
'slapos_cloud/ComputeNode_afterClone'
,
'slapos_cloud/ComputeNode_applyComputerModel'
,
'slapos_cloud/ComputeNode_applyComputerModel'
,
'slapos_cloud/ComputeNode_getBusyComputePartitionList'
,
'slapos_cloud/ComputeNode_getBusyComputePartitionList'
,
...
@@ -110,6 +108,7 @@ def makeTestSlapOSCodingStyleTestCase(tested_business_template):
...
@@ -110,6 +108,7 @@ def makeTestSlapOSCodingStyleTestCase(tested_business_template):
'slapos_cloud/Project_init'
,
'slapos_cloud/Project_init'
,
'slapos_cloud/Resource_zGetTrackingList'
,
'slapos_cloud/Resource_zGetTrackingList'
,
'slapos_cloud/SoftwareInstallation_requestDestruction'
,
'slapos_cloud/SoftwareInstallation_requestDestruction'
,
'slapos_cloud/SoftwareInstallation_getInstallationState'
,
'slapos_cloud/SoftwareInstance_afterClone'
,
'slapos_cloud/SoftwareInstance_afterClone'
,
'slapos_cloud/SoftwareInstance_checkPredecessorToSuccessorMigrationConsistency'
,
'slapos_cloud/SoftwareInstance_checkPredecessorToSuccessorMigrationConsistency'
,
'slapos_cloud/SoftwareInstance_getComputeNodeUrl'
,
'slapos_cloud/SoftwareInstance_getComputeNodeUrl'
,
...
@@ -118,10 +117,8 @@ def makeTestSlapOSCodingStyleTestCase(tested_business_template):
...
@@ -118,10 +117,8 @@ def makeTestSlapOSCodingStyleTestCase(tested_business_template):
'slapos_cloud/SoftwareInstance_getPartitionUrl'
,
'slapos_cloud/SoftwareInstance_getPartitionUrl'
,
'slapos_cloud/SoftwareInstance_init'
,
'slapos_cloud/SoftwareInstance_init'
,
'slapos_cloud/SoftwareInstance_renameAndRequestStopAction'
,
'slapos_cloud/SoftwareInstance_renameAndRequestStopAction'
,
'slapos_cloud/SoftwareRelease_getCurrentInstallationStateAsHtml'
,
'slapos_cloud/SoftwareRelease_getRelatedNetworkList'
,
'slapos_cloud/SoftwareRelease_getRelatedNetworkList'
,
'slapos_cloud/SoftwareRelease_getUsableComputeNodeList'
,
'slapos_cloud/SoftwareRelease_getUsableComputeNodeList'
,
'slapos_cloud/SoftwareRelease_getUsableComputeNodeWithoutSInstanceList'
,
'slapos_cloud/SoftwareInstance_viewRenameAndRequestDestroyAction'
,
'slapos_cloud/SoftwareInstance_viewRenameAndRequestDestroyAction'
,
'slapos_cloud/Base_getSupportRequestInProgress'
,
'slapos_cloud/Base_getSupportRequestInProgress'
,
'slapos_cloud/SoftwareInstance_checkDuplicationOnInstanceTreeConsistency'
,
'slapos_cloud/SoftwareInstance_checkDuplicationOnInstanceTreeConsistency'
,
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment