Commit c6dc553d authored by Romain Courteaud's avatar Romain Courteaud

Rename Computer to Compute Node

Rename Computer Partition to Compute Partition
parent 1f247e83
[computer]
[compute_node]
[partition_0]
address = 200.11.11.11/255.255.255.0
......
......@@ -25,11 +25,11 @@ slap interface documentation
:members:
:undoc-members:
.. autointerface:: slapos.slap.interface.slap.IComputerPartition
.. autointerface:: slapos.slap.interface.slap.IComputePartition
:members:
:undoc-members:
.. autointerface:: slapos.slap.interface.slap.IComputer
.. autointerface:: slapos.slap.interface.slap.IComputeNode
:members:
:undoc-members:
......
......@@ -21,7 +21,7 @@ Notes
..
XXX TODO software_group?, computer_group?
XXX TODO software_group?, compute_node_group?
......@@ -75,11 +75,11 @@ Examples
* Request a wordpress instance named "My Beautiful Instance" on Node named "COMP-12345"::
$ slapos request "My Beautiful Instance" wordpress --node computer_guid=COMP-12345
$ slapos request "My Beautiful Instance" wordpress --node compute_node_guid=COMP-12345
* Request a kvm instance named "mykvm" on Node named "COMP-12345", specifying nbd-host and nbd-ip parameters::
$ slapos request mykvm kvm --node computer_guid=COMP-12345 --parameters \
$ slapos request mykvm kvm --node compute_node_guid=COMP-12345 --parameters \
nbd-host=debian.nbd.vifib.net nbd-port=1024
* Request a kvm instance specifying the full URL, with default settings::
......@@ -124,7 +124,7 @@ From SlapOS Master point of view, it should return the list of all non-destroyed
~~~~~~
Note: Not yet implemented.
Usage:
slapos search <search parameters ex. computer region, instance reference, source_section, etc.>
slapos search <search parameters ex. compute_node region, instance reference, source_section, etc.>
Returns visible instances matching search parameters.
......@@ -173,7 +173,7 @@ In this example, ``kvm`` is an alias for the full URL, and is defined in :file:`
~~~~~~~~~~
Note: Not yet implemented.
Usage:
slapos autosupply <software | software_group> <computer_guid | computer_group>
slapos autosupply <software | software_group> <compute_node_guid | compute_node_group>
Like "slapos suppply", but on-demand. Software will be (re)installed only when at least one instance
of this software is requested. When no instance of this software is deployed on the node, it will be uninstalled.
......@@ -233,7 +233,7 @@ A token is valid for a single ``node register`` command and will expire after on
..
XXX-Cedric should be like this: If desired node name is already taken, will raise an error.
XXX-Cedric: --master-url-web url will disappear in REST API. Currently, "register" uses
SlapOS master web URL to register computer, so it needs the web URL (like http://www.slapos.org)
SlapOS master web URL to register compute_node, so it needs the web URL (like http://www.slapos.org)
If the Node is already registered (:file:`slapos.cfg` and certificate are already present), the command
issues a warning, backups the original configuration and creates a new one.
......@@ -249,26 +249,26 @@ Notes:
Examples
* Register computer named "mycomputer" to SlapOS Master::
* Register compute_node named "mycompute_node" to SlapOS Master::
$ slapos node register mycomputer
$ slapos node register mycompute_node
* Register computer named "mycomputer" to SlapOS Master using br0 as primary interface,
* Register compute_node named "mycompute_node" to SlapOS Master using br0 as primary interface,
tap0 as IPv6 interface and different local ipv4 subnet::
$ slapos node register mycomputer --interface-name br0 --ipv6-interface tap0 \
$ slapos node register mycompute_node --interface-name br0 --ipv6-interface tap0 \
--ipv4-local-network 11.0.0.0/16
* Register computer named "mycomputer" to another SlapOS master accessible via https://www.myownslaposmaster.com,
* Register compute_node named "mycompute_node" to another SlapOS master accessible via https://www.myownslaposmaster.com,
and SLAP webservice accessible via https://slap.myownslaposmaster.com (note that this address should be the
"slap" webservice URL, not web URL)::
$ slapos node register mycomputer --master-url https://slap.myownslaposmaster.com \
$ slapos node register mycompute_node --master-url https://slap.myownslaposmaster.com \
--master-url-web https://www.myownslaposmaster.com
* Register computer named "mycomputer" to SlapOS Master, and ask to create tap interface to be able to host KVMs::
* Register compute_node named "mycompute_node" to SlapOS Master, and ask to create tap interface to be able to host KVMs::
$ slapos node register mycomputer --create-tap
$ slapos node register mycompute_node --create-tap
node software
......@@ -312,7 +312,7 @@ Return values:
**************
* 0 Everything went fine.
* 1 Fail to collect computer information.
* 1 Fail to collect compute_node information.
node report
......
......@@ -30,18 +30,18 @@ from zExceptions import Unauthorized
import pkg_resources
import StringIO
def ComputerConsumptionTioXMLFile_parseXml(self, REQUEST=None):
def ComputeNodeConsumptionTioXMLFile_parseXml(self, REQUEST=None):
"""Call bang on self."""
if REQUEST is not None:
raise Unauthorized
xml = self.getData("")
computer_consumption_model = \
compute_node_consumption_model = \
pkg_resources.resource_string(
'slapos.slap', 'doc/computer_consumption.xsd')
'slapos.slap', 'doc/compute_node_consumption.xsd')
# Validate against the xsd
xsd_model = StringIO.StringIO(computer_consumption_model)
xsd_model = StringIO.StringIO(compute_node_consumption_model)
xmlschema_doc = etree.parse(xsd_model)
xmlschema = etree.XMLSchema(xmlschema_doc)
......
......@@ -101,7 +101,7 @@
<key> <string>aggregated_portal_type</string> </key>
<value>
<tuple>
<string>Computer Partition</string>
<string>Compute Partition</string>
<string>Slave Instance</string>
<string>Software Instance</string>
</tuple>
......
......@@ -74,7 +74,7 @@
<key> <string>aggregated_portal_type</string> </key>
<value>
<tuple>
<string>Computer Partition</string>
<string>Compute Partition</string>
<string>Instance Tree</string>
<string>Software Instance</string>
<string>Software Release</string>
......@@ -121,7 +121,7 @@
<key> <string>required_aggregated_portal_type</string> </key>
<value>
<tuple>
<string>Computer Partition</string>
<string>Compute Partition</string>
<string>Instance Tree</string>
<string>Software Instance</string>
<string>Software Release</string>
......
......@@ -74,7 +74,7 @@
<key> <string>aggregated_portal_type</string> </key>
<value>
<tuple>
<string>Computer Partition</string>
<string>Compute Partition</string>
<string>Slave Instance</string>
<string>Software Instance</string>
</tuple>
......
......@@ -74,7 +74,7 @@
<key> <string>aggregated_portal_type</string> </key>
<value>
<tuple>
<string>Computer Partition</string>
<string>Compute Partition</string>
<string>Instance Tree</string>
<string>Software Instance</string>
<string>Software Release</string>
......@@ -121,7 +121,7 @@
<key> <string>required_aggregated_portal_type</string> </key>
<value>
<tuple>
<string>Computer Partition</string>
<string>Compute Partition</string>
<string>Instance Tree</string>
<string>Software Instance</string>
<string>Software Release</string>
......
......@@ -74,7 +74,7 @@
<key> <string>aggregated_portal_type</string> </key>
<value>
<tuple>
<string>Computer Partition</string>
<string>Compute Partition</string>
<string>Instance Tree</string>
<string>Software Instance</string>
<string>Software Release</string>
......@@ -121,7 +121,7 @@
<key> <string>required_aggregated_portal_type</string> </key>
<value>
<tuple>
<string>Computer Partition</string>
<string>Compute Partition</string>
<string>Instance Tree</string>
<string>Software Instance</string>
<string>Software Release</string>
......
......@@ -6,7 +6,7 @@
<item>Cloud Contract</item>
</portal_type>
<portal_type id="Consumption Document Module">
<item>Computer Consumption TioXML File</item>
<item>Compute Node Consumption TioXML File</item>
<item>User Consumption HTML File</item>
</portal_type>
<portal_type id="Delivery Builder">
......
......@@ -6,7 +6,7 @@
<portal_type id="Cloud Contract Module">
<item>business_application</item>
</portal_type>
<portal_type id="Computer Consumption TioXML File">
<portal_type id="Compute Node Consumption TioXML File">
<item>contributor</item>
</portal_type>
<portal_type id="Consumption Document Module">
......
......@@ -3,7 +3,7 @@
<item>Cloud Contract</item>
</portal_type>
<portal_type id="Consumption Document Module">
<item>Computer Consumption TioXML File</item>
<item>Compute Node Consumption TioXML File</item>
<item>User Consumption HTML File</item>
</portal_type>
<portal_type id="Sale Invoice Transaction">
......
......@@ -5,7 +5,7 @@
<portal_type id="Cloud Contract Line">
<item>SlapOSCloudContractLineAccounting</item>
</portal_type>
<portal_type id="Computer Consumption TioXML File">
<portal_type id="Compute Node Consumption TioXML File">
<item>SortIndex</item>
</portal_type>
<portal_type id="Instance Tree">
......
......@@ -30,7 +30,7 @@
</item>
<item>
<key> <string>id</string> </key>
<value> <string>Computer Consumption TioXML File</string> </value>
<value> <string>Compute Node Consumption TioXML File</string> </value>
</item>
<item>
<key> <string>init_script</string> </key>
......
......@@ -8,7 +8,7 @@
<workflow>edit_workflow</workflow>
</chain>
<chain>
<type>Computer Consumption TioXML File</type>
<type>Compute Node Consumption TioXML File</type>
<workflow>document_conversion_interaction_workflow, document_publication_workflow, edit_workflow</workflow>
</chain>
<chain>
......
portal = context.getPortalObject()
portal.portal_catalog.searchAndActivate(
portal_type="Computer Consumption TioXML File",
portal_type="Compute Node Consumption TioXML File",
validation_state="submitted",
method_id='ComputerConsumptionTioXMLFile_solveInvoicingGeneration',
method_id='ComputeNodeConsumptionTioXMLFile_solveInvoicingGeneration',
activity_count=100,
packet_size=100,
activate_kw={'tag': tag, 'priority': 5}
......
......@@ -31,7 +31,7 @@ select_kw.update(
select_dict=select_dict,
left_join_list=select_dict.keys(),
resource__uid=aggregateable_service_uid_list,
default_aggregate_portal_type=ComplexQuery(NegatedQuery(Query(default_aggregate_portal_type='Computer')),
default_aggregate_portal_type=ComplexQuery(NegatedQuery(Query(default_aggregate_portal_type='Compute Node')),
Query(default_aggregate_portal_type=None),logical_operator="OR"),
grouping_reference=None,
sort_on=(('modification_date', 'ASC'),) # the highest chance to find movement which can be delivered
......
portal = context.getPortalObject()
if context.getPortalType() == "Computer":
if context.getPortalType() == "Compute Node":
# Get the Latest Sale Packing List
sale_packing_list_line = portal.portal_catalog.getResultValue(
......@@ -17,4 +17,4 @@ if context.getPortalType() == "Computer":
return sale_packing_list.Base_redirect('Base_viewListMode?proxy_form_id=SalePackingList_view&proxy_field_id=listbox')
# Redirect to web site to hide the indexation process
context.Base_redirect('view', keep_items={'portal_status_message':context.Base_translateString('No Consumption Report for this computer.')})
context.Base_redirect('view', keep_items={'portal_status_message':context.Base_translateString('No Consumption Report for this compute_node.')})
......@@ -8,7 +8,7 @@
<dictionary>
<item>
<key> <string>_function</string> </key>
<value> <string>ComputerConsumptionTioXMLFile_parseXml</string> </value>
<value> <string>ComputeNodeConsumptionTioXMLFile_parseXml</string> </value>
</item>
<item>
<key> <string>_module</string> </key>
......@@ -16,7 +16,7 @@
</item>
<item>
<key> <string>id</string> </key>
<value> <string>ComputerConsumptionTioXMLFile_parseXml</string> </value>
<value> <string>ComputeNodeConsumptionTioXMLFile_parseXml</string> </value>
</item>
<item>
<key> <string>title</string> </key>
......
......@@ -10,7 +10,7 @@ if context.getValidationState() in ["cancelled", "shared"]:
return
try:
tioxml_dict = document.ComputerConsumptionTioXMLFile_parseXml()
tioxml_dict = document.ComputeNodeConsumptionTioXMLFile_parseXml()
except KeyError:
document.reject(comment="Fail")
return
......@@ -19,33 +19,33 @@ if tioxml_dict is None:
document.reject(comment="Not usable TioXML data")
else:
computer = context.getContributorValue(portal_type="Computer")
computer_project_document = computer.Item_getCurrentProjectValue()
compute_node = context.getContributorValue(portal_type="Compute Node")
compute_node_project_document = compute_node.Item_getCurrentProjectValue()
delivery_title = tioxml_dict['title']
computer_project = None
if computer_project_document is not None:
computer_project = computer_project_document.getRelativeUrl()
compute_node_project = None
if compute_node_project_document is not None:
compute_node_project = compute_node_project_document.getRelativeUrl()
movement_list = []
for movement in tioxml_dict["movement"]:
reference = movement['reference']
# It had been reported for the computer itself so it is pure
# It had been reported for the compute_node itself so it is pure
# informative.
if computer.getReference() == reference:
aggregate_value_list = [computer]
person = computer.getSourceAdministrationValue(portal_type="Person")
project = computer_project
if compute_node.getReference() == reference:
aggregate_value_list = [compute_node]
person = compute_node.getSourceAdministrationValue(portal_type="Person")
project = compute_node_project
else:
project = None # For now, else we should calculate this too.
if reference.startswith("slapuser"):
reference = reference.replace("slapuser", "slappart")
# Find the partition / software instance / user
partition = portal.portal_catalog.getResultValue(
parent_uid=computer.getUid(),
parent_uid=compute_node.getUid(),
reference=reference,
portal_type="Computer Partition",
portal_type="Compute Partition",
validation_state="validated")
if partition.getSlapState() != 'busy':
......@@ -85,7 +85,7 @@ else:
)
# Time to create the PL
person = computer.getSourceAdministrationValue(portal_type="Person")
person = compute_node.getSourceAdministrationValue(portal_type="Person")
delivery_template = portal.restrictedTraverse(
portal.portal_preferences.getPreferredInstanceDeliveryTemplate())
delivery = delivery_template.Base_createCloneDocument(batch_mode=1)
......
......@@ -54,7 +54,7 @@
</item>
<item>
<key> <string>id</string> </key>
<value> <string>ComputerConsumptionTioXMLFile_solveInvoicingGenerationEco</string> </value>
<value> <string>ComputeNodeConsumptionTioXMLFile_solveInvoicingGeneration</string> </value>
</item>
</dictionary>
</pickle>
......
......@@ -62,7 +62,7 @@
</item>
<item>
<key> <string>id</string> </key>
<value> <string>Computer_getZeroEmissionRatio</string> </value>
<value> <string>ComputeNode_getLatestCPUPercentLoad</string> </value>
</item>
</dictionary>
</pickle>
......
......@@ -8,7 +8,7 @@ model_id = context.getWattConsumptionModel("no_model")
# Introduce your Consumption Model here
######
def consumption_model_shuttle_ds61_i7(load):
""" Expected consumed watts for the computer load
""" Expected consumed watts for the compute_node load
"""
if load <= 25:
return 21.5 + 1.06*load
......@@ -16,7 +16,7 @@ def consumption_model_shuttle_ds61_i7(load):
return 48 + 0.29*load
def consumption_model_shuttle_nuc_i7(load):
""" Expected consumed watts for the computer load
""" Expected consumed watts for the compute_node load
"""
if load <= 25:
return 8.5 + 0.46*load
......@@ -24,7 +24,7 @@ def consumption_model_shuttle_nuc_i7(load):
return 20 + 0.08*load
def consumption_model_rikomagic_mk802iv(load):
""" Expected consumed watts for the computer load
""" Expected consumed watts for the compute_node load
"""
if load <= 25:
return 2.2 + 0.04*load
......@@ -40,7 +40,7 @@ model_map = {
"intel_nuc_i7": consumption_model_shuttle_nuc_i7
}
if cpu_load_percentage is None:
cpu_load_percentage = context.Computer_getLatestCPUPercentLoad()
cpu_load_percentage = context.ComputeNode_getLatestCPUPercentLoad()
cpu_load_percentage += partition_increment
......
......@@ -62,7 +62,7 @@
</item>
<item>
<key> <string>id</string> </key>
<value> <string>Computer_getWattConsumption</string> </value>
<value> <string>ComputeNode_getWattConsumption</string> </value>
</item>
</dictionary>
</pickle>
......
......@@ -62,7 +62,7 @@
</item>
<item>
<key> <string>id</string> </key>
<value> <string>Project_getComputerReferenceList</string> </value>
<value> <string>ComputeNode_getZeroEmissionRatio</string> </value>
</item>
</dictionary>
</pickle>
......
......@@ -3,22 +3,22 @@ if REQUEST is not None:
raise Unauthorized
portal = context.getPortalObject()
computer = context
compute_node = context
reference = "TIOCONS-%s-%s" % (computer.getReference(), source_reference)
reference = "TIOCONS-%s-%s" % (compute_node.getReference(), source_reference)
version = "%s" % context.getPortalObject().portal_ids.generateNewId(
id_group=('slap_tioxml_consumption_reference', reference), default=1)
document = portal.consumption_document_module.newContent(
portal_type="Computer Consumption TioXML File",
portal_type="Compute Node Consumption TioXML File",
source_reference=source_reference,
title="%s consumption (%s)" % (computer.getReference(), source_reference),
title="%s consumption (%s)" % (compute_node.getReference(), source_reference),
reference=reference,
version=version,
data=consumption_xml,
classification="personal",
publication_section="other",
contributor_value=computer,
contributor_value=compute_node,
)
document.submit()
return document.getRelativeUrl()
......@@ -54,7 +54,7 @@
</item>
<item>
<key> <string>id</string> </key>
<value> <string>Computer_reportComputerConsumption</string> </value>
<value> <string>ComputeNode_reportComputeNodeConsumption</string> </value>
</item>
</dictionary>
</pickle>
......
......@@ -41,7 +41,7 @@ elif context.getPortalType() == 'Person':
else:
return []
elif context.getPortalType() in ['Software Instance', 'Instance Tree',
'Computer']:
'Compute Node']:
query_kw['aggregate_uid'] = context.getUid()
else:
return []
......@@ -69,17 +69,17 @@ def setDetailLine(packing_list_line):
portal_type='Instance Tree')
software_instance = packing_list_line.getAggregateValue(
portal_type='Software Instance')
computer_partition = packing_list_line.getAggregateValue(
portal_type='Computer Partition')
compute_partition = packing_list_line.getAggregateValue(
portal_type='Compute Partition')
if software_instance is None:
# In case we found SPL line not aggregated to instance and hosting
return
instance_tree_reference = hosting_s.getReference()
instance_reference = software_instance.getReference()
computer_title = ""
if computer_partition is not None:
computer = computer_partition.getParent()
computer_title = computer.getTitle() if computer.getCpuCore() is None else '%s (%s CPU Cores)' % (computer.getTitle(), computer.getCpuCore())
compute_node_title = ""
if compute_partition is not None:
compute_node = compute_partition.getParent()
compute_node_title = compute_node.getTitle() if compute_node.getCpuCore() is None else '%s (%s CPU Cores)' % (compute_node.getTitle(), compute_node.getCpuCore())
#default_line = {'date': {'hosting_ref': ['hs_title', {'instance_ref': ['inst_title', ['res1', 'res2', 'resN'] ] } ] } }
if not start_date in consumption_dict:
# Add new date line
......@@ -89,7 +89,7 @@ def setDetailLine(packing_list_line):
[software_instance.getTitle(),
[0.0, 0.0, 0.0],
software_instance.getRelativeUrl(),
computer_title
compute_node_title
]
},
hosting_s.getRelativeUrl()
......@@ -102,7 +102,7 @@ def setDetailLine(packing_list_line):
[software_instance.getTitle(),
[0.0, 0.0, 0.0],
software_instance.getRelativeUrl(),
computer_title
compute_node_title
]
},
hosting_s.getRelativeUrl()
......@@ -111,7 +111,7 @@ def setDetailLine(packing_list_line):
if not instance_reference in consumption_dict[start_date][instance_tree_reference][1]:
consumption_dict[start_date][instance_tree_reference][1][instance_reference] = [
software_instance.getTitle(), [0.0, 0.0, 0.0], software_instance.getRelativeUrl(),
computer_title
compute_node_title
]
if packing_list_line.getResourceUid() == cpu_resource_uid:
quantity = round(float(packing_list_line.getQuantity()), 3)
......@@ -134,7 +134,7 @@ for date in sorted(consumption_dict, reverse=True):
for hosting_key in sorted(consumption_dict[date]):
instance_tree_title, instance_dict, hs_url = consumption_dict[date][hosting_key]
for instance_value_list in instance_dict.values():
instance_title, values, instance_url, computer_title = instance_value_list
instance_title, values, instance_url, compute_node_title = instance_value_list
line = newTempBase(portal, instance_url, uid="%s_%s" % (context.getUid(), i))
line.edit(
title=instance_tree_title,
......@@ -143,7 +143,7 @@ for date in sorted(consumption_dict, reverse=True):
cpu_load=values[0],
memory_used=values[1],
disk_used=values[2],
computer_title=computer_title,
compute_node_title=compute_node_title,
hosting_url=hs_url,
instance_url=instance_url
)
......
......@@ -408,8 +408,8 @@
<string>Software Instance</string>
</tuple>
<tuple>
<string>computer_title</string>
<string>Computer</string>
<string>compute_node_title</string>
<string>ComputeNode</string>
</tuple>
<tuple>
<string>start_date</string>
......
......@@ -408,8 +408,8 @@
<string>Software Instance</string>
</tuple>
<tuple>
<string>computer_title</string>
<string>Computer</string>
<string>compute_node_title</string>
<string>ComputeNode</string>
</tuple>
<tuple>
<string>start_date</string>
......
......@@ -2,10 +2,10 @@ from zExceptions import Unauthorized
if REQUEST is not None:
raise Unauthorized
computer_partition_list = context.getAggregateValueList(portal_type="Computer Partition")
compute_partition_list = context.getAggregateValueList(portal_type="Compute Partition")
current_watt = context.SoftwareRelease_getDeltaCO2List(
computer_partition_list, context.SoftwareInstance_getAverageCPULoad()
compute_partition_list, context.SoftwareInstance_getAverageCPULoad()
)
return current_watt.keys()[0]
......@@ -2,14 +2,14 @@ from zExceptions import Unauthorized
if REQUEST is not None:
raise Unauthorized
computer_partition_list = context.getAggregateValueList(portal_type="Computer Partition")
compute_partition_list = context.getAggregateValueList(portal_type="Compute Partition")
future_watt = "Not Applicable"
master_node = context.SoftwareInstance_getResilientMasterNode()
if master_node is not None:
future_watt = context.SoftwareRelease_getDeltaCO2List(
computer_partition_list, master_node.SoftwareInstance_getAverageCPULoad()
compute_partition_list, master_node.SoftwareInstance_getAverageCPULoad()
)
future_watt = future_watt.keys()[0]
......
computer_partition_list = context.getAggregateValueList(portal_type="Computer Partition")
compute_partition_list = context.getAggregateValueList(portal_type="Compute Partition")
master_node = context.SoftwareInstance_getResilientMasterNode()
current_watt = context.SoftwareRelease_getDeltaCO2List(
computer_partition_list, context.SoftwareInstance_getAverageCPULoad()
compute_partition_list, context.SoftwareInstance_getAverageCPULoad()
)
current_watt = current_watt.keys()
master_node = context.SoftwareInstance_getResilientMasterNode()
if master_node is not None:
future_watt = context.SoftwareRelease_getDeltaCO2List(
computer_partition_list, master_node.SoftwareInstance_getAverageCPULoad()
compute_partition_list, master_node.SoftwareInstance_getAverageCPULoad()
)
future_watt = future_watt.keys()[0]
......
......@@ -9,22 +9,22 @@ else:
partition_delta_co2_dict = {}
for computer_partition in computer_partition_list:
computer = computer_partition.getParentValue()
computer_zero_emission_ratio = computer.Computer_getZeroEmissionRatio()
computer_cpu_load_percentage = computer.Computer_getLatestCPUPercentLoad()
computer_watt = computer.Computer_getWattConsumption(computer_cpu_load_percentage)
for compute_partition in compute_partition_list:
compute_node = compute_partition.getParentValue()
compute_node_zero_emission_ratio = compute_node.ComputeNode_getZeroEmissionRatio()
compute_node_cpu_load_percentage = compute_node.ComputeNode_getLatestCPUPercentLoad()
compute_node_watt = compute_node.ComputeNode_getWattConsumption(compute_node_cpu_load_percentage)
partition_watt = computer.Computer_getWattConsumption(
computer_cpu_load_percentage + partition_average_cpu_load)
partition_watt = compute_node.ComputeNode_getWattConsumption(
compute_node_cpu_load_percentage + partition_average_cpu_load)
delta_watt = (partition_watt-computer_watt)
delta_watt = (partition_watt-compute_node_watt)
delta_co2 = delta_watt - delta_watt*(computer_zero_emission_ratio/100)
delta_co2 = delta_watt - delta_watt*(compute_node_zero_emission_ratio/100)
if delta_co2 in partition_delta_co2_dict:
partition_delta_co2_dict[delta_co2].append(computer_partition)
partition_delta_co2_dict[delta_co2].append(compute_partition)
else:
partition_delta_co2_dict[delta_co2] = [computer_partition]
partition_delta_co2_dict[delta_co2] = [compute_partition]
return partition_delta_co2_dict
......@@ -50,7 +50,7 @@
</item>
<item>
<key> <string>_params</string> </key>
<value> <string>computer_partition_list, simulated_cpu_load=None</string> </value>
<value> <string>compute_partition_list, simulated_cpu_load=None</string> </value>
</item>
<item>
<key> <string>id</string> </key>
......
......@@ -406,8 +406,8 @@
<string>Software Instance</string>
</tuple>
<tuple>
<string>computer_title</string>
<string>Computer</string>
<string>compute_node_title</string>
<string>ComputeNode</string>
</tuple>
<tuple>
<string>start_date</string>
......
......@@ -1378,7 +1378,7 @@ class TestSlapOSGeneratePackingListFromTioXML(SlapOSTestCaseMixin):
document.submit()
self.tic()
script_name = "ComputerConsumptionTioXMLFile_solveInvoicingGeneration"
script_name = "ComputeNodeConsumptionTioXMLFile_solveInvoicingGeneration"
alarm = self.portal.portal_alarms.slapos_accounting_generate_packing_list_from_tioxml
self._test_alarm(
......@@ -1388,7 +1388,7 @@ class TestSlapOSGeneratePackingListFromTioXML(SlapOSTestCaseMixin):
document = self.createTioXMLFile()
self.tic()
script_name = "ComputerConsumptionTioXMLFile_solveInvoicingGeneration"
script_name = "ComputeNodeConsumptionTioXMLFile_solveInvoicingGeneration"
alarm = self.portal.portal_alarms.slapos_accounting_generate_packing_list_from_tioxml
self._test_alarm_not_visited(
......
......@@ -57,7 +57,7 @@ class TestSlapOSRequestValidationPayment(SlapOSTestCaseMixin):
preference = self.portal.portal_preferences.getActiveSystemPreference()
preference.setPreferredCloudContractEnabled(True)
self.tic()
self._makeComputer()
self._makeComputeNode()
self.software_instance.setAggregate(self.partition.getRelativeUrl())
self.tic()
......@@ -73,7 +73,7 @@ class TestSlapOSRequestValidationPayment(SlapOSTestCaseMixin):
preference = self.portal.portal_preferences.getActiveSystemPreference()
preference.setPreferredCloudContractEnabled(True)
self.tic()
self._makeComputer()
self._makeComputeNode()
self.software_instance.setAggregate(self.partition.getRelativeUrl())
self.tic()
......
Cloud Contract Line | view
Cloud Contract Module | view
Cloud Contract | view
Computer Consumption TioXML File | download
Computer Consumption TioXML File | view
Computer | jump_to_consumption_report_view
Compute Node Consumption TioXML File | download
Compute Node Consumption TioXML File | view
Compute Node | jump_to_consumption_report_view
Consumption Document Module | view
Instance Tree | jump_to_related_open_order_line
Instance Tree | periodicity
......
Cloud Contract Module | Cloud Contract
Cloud Contract | Cloud Contract Line
Consumption Document Module | Computer Consumption TioXML File
Consumption Document Module | Compute Node Consumption TioXML File
Consumption Document Module | User Consumption HTML File
Delivery Builder | Root Applied Rule Causality Causality Movement Group
Order Tool | SlapOS Accounting Quantity Updating Order Builder
......
Cloud Contract Module | business_application
Cloud Contract | causality
Cloud Contract | destination_section
Computer Consumption TioXML File | contributor
Compute Node Consumption TioXML File | contributor
Consumption Document Module | business_application
Slave Instance | causality
Software Instance | causality
......
Cloud Contract Module | Cloud Contract
Consumption Document Module | Computer Consumption TioXML File
Consumption Document Module | Compute Node Consumption TioXML File
Consumption Document Module | User Consumption HTML File
Sale Invoice Transaction | Invoice Line
\ No newline at end of file
Cloud Contract
Cloud Contract Line
Cloud Contract Module
Computer Consumption TioXML File
Compute Node Consumption TioXML File
Consumption Document Module
Root Applied Rule Causality Causality Movement Group
SlapOS Accounting Quantity Updating Order Builder
......
Cloud Contract Line | SlapOSCloudContractLineAccounting
Cloud Contract | SlapOSCloudContractAccounting
Computer Consumption TioXML File | SortIndex
Compute Node Consumption TioXML File | SortIndex
Instance Tree | SlapOSAccountingInstanceTreeConstraint
Sale Invoice Transaction | SlapOSAccountingSaleInvoiceTransactionConstraint
Sale Packing List Line | SlapOSAccountingSalePackingListLineConstraint
......
Cloud Contract Line | edit_workflow
Cloud Contract | edit_workflow
Cloud Contract | item_workflow
Computer Consumption TioXML File | document_conversion_interaction_workflow
Computer Consumption TioXML File | document_publication_workflow
Computer Consumption TioXML File | edit_workflow
Compute Node Consumption TioXML File | document_conversion_interaction_workflow
Compute Node Consumption TioXML File | document_publication_workflow
Compute Node Consumption TioXML File | edit_workflow
Instance Tree | slapos_accounting_interaction_workflow
Instance Tree | slapos_api_invoicing_workflow
Sale Invoice Transaction | slapos_accounting_interaction_workflow
......
......@@ -55,7 +55,7 @@
</item>
<item>
<key> <string>description</string> </key>
<value> <string>Allocation of services is closed due to scheduled maintenance of the computer</string> </value>
<value> <string>Allocation of services is closed due to scheduled maintenance of the compute_node</string> </value>
</item>
<item>
<key> <string>effective_date</string> </key>
......
......@@ -63,7 +63,7 @@
</item>
<item>
<key> <string>description</string> </key>
<value> <string>Allocation of services is closed because computer didn\'t communicate with master for too long</string> </value>
<value> <string>Allocation of services is closed because compute_node didn\'t communicate with master for too long</string> </value>
</item>
<item>
<key> <string>effective_date</string> </key>
......
......@@ -55,7 +55,7 @@
</item>
<item>
<key> <string>description</string> </key>
<value> <string>Allocation of services is closed due to future termination of the computer</string> </value>
<value> <string>Allocation of services is closed due to future termination of the compute_node</string> </value>
</item>
<item>
<key> <string>effective_date</string> </key>
......
......@@ -55,7 +55,7 @@
</item>
<item>
<key> <string>description</string> </key>
<value> <string>Allocate services for the owner of the friends of the computer</string> </value>
<value> <string>Allocate services for the owner of the friends of the compute_node</string> </value>
</item>
<item>
<key> <string>effective_date</string> </key>
......
......@@ -55,7 +55,7 @@
</item>
<item>
<key> <string>description</string> </key>
<value> <string>Allocate services for the owner of the computer</string> </value>
<value> <string>Allocate services for the owner of the compute_node</string> </value>
</item>
<item>
<key> <string>effective_date</string> </key>
......
......@@ -89,7 +89,7 @@
</item>
<item>
<key> <string>description</string> </key>
<value> <string>used with getTotalPrice to computer the total of certain prices in an invoice</string> </value>
<value> <string>used with getTotalPrice to compute_node the total of certain prices in an invoice</string> </value>
</item>
<item>
<key> <string>effective_date</string> </key>
......
......@@ -55,7 +55,7 @@
</item>
<item>
<key> <string>description</string> </key>
<value> <string>Computer is overloaded</string> </value>
<value> <string>ComputeNode is overloaded</string> </value>
</item>
<item>
<key> <string>effective_date</string> </key>
......
......@@ -55,7 +55,7 @@
</item>
<item>
<key> <string>description</string> </key>
<value> <string>Computer is OK</string> </value>
<value> <string>ComputeNode is OK</string> </value>
</item>
<item>
<key> <string>effective_date</string> </key>
......
......@@ -83,7 +83,7 @@
</item>
<item>
<key> <string>description</string> </key>
<value> <string>A division in charge of installing, maintaining and shipping computers</string> </value>
<value> <string>A division in charge of installing, maintaining and shipping compute_nodes</string> </value>
</item>
<item>
<key> <string>effective_date</string> </key>
......@@ -93,7 +93,7 @@
</item>
<item>
<key> <string>id</string> </key>
<value> <string>computer</string> </value>
<value> <string>compute_node</string> </value>
</item>
<item>
<key> <string>int_index</string> </key>
......@@ -107,11 +107,11 @@
</item>
<item>
<key> <string>short_title</string> </key>
<value> <string>Computer Maintenance</string> </value>
<value> <string>ComputeNode Maintenance</string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>Computer Installation and Maintenance</string> </value>
<value> <string>ComputeNode Installation and Maintenance</string> </value>
</item>
</dictionary>
</pickle>
......
......@@ -89,7 +89,7 @@
</item>
<item>
<key> <string>title</string> </key>
<value> <string>Computer Maintenance Agent</string> </value>
<value> <string>ComputeNode Maintenance Agent</string> </value>
</item>
</dictionary>
</pickle>
......
......@@ -89,7 +89,7 @@
</item>
<item>
<key> <string>title</string> </key>
<value> <string>Computer Maintenance Manager</string> </value>
<value> <string>ComputeNode Maintenance Manager</string> </value>
</item>
</dictionary>
</pickle>
......
......@@ -83,7 +83,7 @@
</item>
<item>
<key> <string>description</string> </key>
<value> <string>A division in charge of providing location for hosting SlapOS computers</string> </value>
<value> <string>A division in charge of providing location for hosting SlapOS compute_nodes</string> </value>
</item>
<item>
<key> <string>effective_date</string> </key>
......
......@@ -79,7 +79,7 @@
</item>
<item>
<key> <string>id</string> </key>
<value> <string>computer</string> </value>
<value> <string>compute_node</string> </value>
</item>
<item>
<key> <string>portal_type</string> </key>
......@@ -87,11 +87,11 @@
</item>
<item>
<key> <string>short_title</string> </key>
<value> <string>Computer</string> </value>
<value> <string>ComputeNode</string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>Computer Hardware</string> </value>
<value> <string>ComputeNode Hardware</string> </value>
</item>
</dictionary>
</pickle>
......
......@@ -73,7 +73,7 @@
</item>
<item>
<key> <string>title</string> </key>
<value> <string>Computer Hosting Contract</string> </value>
<value> <string>ComputeNode Hosting Contract</string> </value>
</item>
</dictionary>
</pickle>
......
......@@ -65,7 +65,7 @@
</item>
<item>
<key> <string>id</string> </key>
<value> <string>computer</string> </value>
<value> <string>compute_node</string> </value>
</item>
<item>
<key> <string>portal_type</string> </key>
......@@ -73,7 +73,7 @@
</item>
<item>
<key> <string>title</string> </key>
<value> <string>Computer</string> </value>
<value> <string>ComputeNode</string> </value>
</item>
</dictionary>
</pickle>
......
......@@ -57,7 +57,7 @@ portal_categories/order/**
portal_categories/payment_mode/**
portal_categories/product_line/cloud**
portal_categories/product_line/commodity**
portal_categories/product_line/computer**
portal_categories/product_line/compute_node**
portal_categories/product_line/network**
portal_categories/product_line/shipping**
portal_categories/product_line/software**
......
......@@ -40,7 +40,7 @@
</item>
<item>
<key> <string>id</string> </key>
<value> <string>computer_usage</string> </value>
<value> <string>compute_node_usage</string> </value>
</item>
<item>
<key> <string>permissions</string> </key>
......@@ -60,7 +60,7 @@
</item>
<item>
<key> <string>title</string> </key>
<value> <string>Computer Usage</string> </value>
<value> <string>ComputeNode Usage</string> </value>
</item>
<item>
<key> <string>visible</string> </key>
......@@ -77,7 +77,7 @@
<dictionary>
<item>
<key> <string>text</string> </key>
<value> <string>string:${object_url}/Computer_viewCurrentUsageReport</string> </value>
<value> <string>string:${object_url}/ComputeNode_viewCurrentUsageReport</string> </value>
</item>
</dictionary>
</pickle>
......
......@@ -73,7 +73,7 @@
<dictionary>
<item>
<key> <string>text</string> </key>
<value> <string>string:${object_url}/Computer_viewCapacity</string> </value>
<value> <string>string:${object_url}/ComputeNode_viewCapacity</string> </value>
</item>
</dictionary>
</pickle>
......
......@@ -40,7 +40,7 @@
</item>
<item>
<key> <string>id</string> </key>
<value> <string>view_computer_list</string> </value>
<value> <string>view_compute_node_list</string> </value>
</item>
<item>
<key> <string>permissions</string> </key>
......@@ -60,7 +60,7 @@
</item>
<item>
<key> <string>title</string> </key>
<value> <string>Computers</string> </value>
<value> <string>ComputeNodes</string> </value>
</item>
<item>
<key> <string>visible</string> </key>
......@@ -77,7 +77,7 @@
<dictionary>
<item>
<key> <string>text</string> </key>
<value> <string>string:${object_url}/ComputerNetwork_viewComputerList</string> </value>
<value> <string>string:${object_url}/ComputerNetwork_viewComputeNodeList</string> </value>
</item>
</dictionary>
</pickle>
......
......@@ -40,7 +40,7 @@
</item>
<item>
<key> <string>id</string> </key>
<value> <string>jump_to_computer_partition</string> </value>
<value> <string>jump_to_compute_partition</string> </value>
</item>
<item>
<key> <string>permissions</string> </key>
......@@ -60,7 +60,7 @@
</item>
<item>
<key> <string>title</string> </key>
<value> <string>Computer Partition</string> </value>
<value> <string>Compute Partition</string> </value>
</item>
<item>
<key> <string>visible</string> </key>
......@@ -79,7 +79,7 @@
<key> <string>text</string> </key>
<value> <string encoding="cdata"><![CDATA[
string:${object_url}/Base_jumpToRelatedObject?base_category=aggregate&portal_type:list=Computer+Partition
string:${object_url}/Base_jumpToRelatedObject?base_category=aggregate&portal_type:list=ComputeNode+Partition
]]></string> </value>
</item>
......
......@@ -40,7 +40,7 @@
</item>
<item>
<key> <string>id</string> </key>
<value> <string>usable_computer</string> </value>
<value> <string>usable_compute_node</string> </value>
</item>
<item>
<key> <string>permissions</string> </key>
......@@ -60,7 +60,7 @@
</item>
<item>
<key> <string>title</string> </key>
<value> <string>Usable Computer</string> </value>
<value> <string>Usable ComputeNode</string> </value>
</item>
<item>
<key> <string>visible</string> </key>
......@@ -77,7 +77,7 @@
<dictionary>
<item>
<key> <string>text</string> </key>
<value> <string>string:${object_url}/SoftwareRelease_viewUsableComputerListReport</string> </value>
<value> <string>string:${object_url}/SoftwareRelease_viewUsableComputeNodeListReport</string> </value>
</item>
</dictionary>
</pickle>
......
......@@ -46,7 +46,7 @@
</item>
<item>
<key> <string>id</string> </key>
<value> <string>z_create_computer_partition</string> </value>
<value> <string>z0_drop_compute_partition</string> </value>
</item>
<item>
<key> <string>max_cache_</string> </key>
......
......@@ -40,7 +40,7 @@
</item>
<item>
<key> <string>expression</string> </key>
<value> <string>python: context.getPortalType() in [\'Computer Partition\', \'Slave Partition\']</string> </value>
<value> <string>python: context.getPortalType() in [\'Compute Partition\', \'Slave Partition\']</string> </value>
</item>
<item>
<key> <string>expression_cache_key</string> </key>
......@@ -56,7 +56,7 @@
</item>
<item>
<key> <string>id</string> </key>
<value> <string>z0_uncatalog_computer_partition</string> </value>
<value> <string>z0_uncatalog_compute_partition</string> </value>
</item>
<item>
<key> <string>max_cache_</string> </key>
......
DELETE FROM
computer_partition
compute_partition
WHERE
<dtml-in uid>
uid=<dtml-sqlvar sequence-item type="int"><dtml-if sequence-end><dtml-else> OR </dtml-if>
......@@ -10,9 +10,9 @@ WHERE
<dtml-let row_list="[]">
<dtml-in prefix="loop" expr="_.range(_.len(uid))">
<dtml-let free_for_request="ComputerPartition_isFreeForRequest[loop_item]">
<dtml-let software_type="ComputerPartition_getSoftwareType[loop_item]">
<dtml-in prefix="url" expr="ComputerPartition_getAvailableSoftwareReleaseUrlStringList[loop_item]" no_push_item>
<dtml-let free_for_request="ComputePartition_isFreeForRequest[loop_item]">
<dtml-let software_type="ComputePartition_getSoftwareType[loop_item]">
<dtml-in prefix="url" expr="ComputePartition_getAvailableSoftwareReleaseUrlStringList[loop_item]" no_push_item>
<dtml-call expr="row_list.append([
uid[loop_item],
url_item,
......@@ -25,7 +25,7 @@ WHERE
<dtml-if "row_list">
INSERT INTO
computer_partition
compute_partition
VALUES
<dtml-in prefix="row" expr="row_list">
(
......
......@@ -15,9 +15,9 @@
<item>
<key> <string>arguments_src</string> </key>
<value> <string>uid\r\n
ComputerPartition_getAvailableSoftwareReleaseUrlStringList\r\n
ComputerPartition_isFreeForRequest\r\n
ComputerPartition_getSoftwareType</string> </value>
ComputePartition_getAvailableSoftwareReleaseUrlStringList\r\n
ComputePartition_isFreeForRequest\r\n
ComputePartition_getSoftwareType</string> </value>
</item>
<item>
<key> <string>cache_time_</string> </key>
......@@ -43,7 +43,7 @@ ComputerPartition_getSoftwareType</string> </value>
</item>
<item>
<key> <string>expression</string> </key>
<value> <string>python: context.getPortalType() in [\'Computer Partition\', \'Slave Partition\']</string> </value>
<value> <string>python: context.getPortalType() in [\'Compute Partition\', \'Slave Partition\']</string> </value>
</item>
<item>
<key> <string>expression_cache_key</string> </key>
......@@ -59,7 +59,7 @@ ComputerPartition_getSoftwareType</string> </value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>z_catalog_computer_partition_list</string> </value>
<value> <string>z_catalog_compute_partition_list</string> </value>
</item>
<item>
<key> <string>max_cache_</string> </key>
......
REPLACE INTO
catalog
(`uid`, `security_uid`, `group_security_uid`, `shadow_security_uid`, `computer_security_uid`,`user_security_uid`, `subscription_security_uid`, `organisation_security_uid`,
(`uid`, `security_uid`, `group_security_uid`, `shadow_security_uid`, `compute_node_security_uid`,`user_security_uid`, `subscription_security_uid`, `organisation_security_uid`,
`project_security_uid`, `owner`, `viewable_owner`, `path`, `relative_url`, `parent_uid`, `id`, `description`, `title`, `meta_type`,
`portal_type`, `opportunity_state`, `corporate_registration_code`, `ean13_code`, `validation_state`, `simulation_state`,
`causality_state`, `invoice_state`, `payment_state`, `event_state`, `immobilisation_state`, `reference`, `grouping_reference`, `grouping_date`,
......@@ -13,7 +13,7 @@ VALUES
<dtml-sqlvar expr="security_uid[loop_item]" type="int">,
<dtml-sqlvar expr="group_security_uid[loop_item]" type="int" optional>,
<dtml-sqlvar expr="shadow_security_uid[loop_item]" type="int" optional>,
<dtml-sqlvar expr="computer_security_uid[loop_item]" type="int" optional>,
<dtml-sqlvar expr="compute_node_security_uid[loop_item]" type="int" optional>,
<dtml-sqlvar expr="user_security_uid[loop_item]" type="int" optional>,
<dtml-sqlvar expr="subscription_security_uid[loop_item]" type="int" optional>,
<dtml-sqlvar expr="organisation_security_uid[loop_item]" type="int" optional>,
......
......@@ -16,7 +16,7 @@
security_uid\n
group_security_uid\n
shadow_security_uid\n
computer_security_uid\n
compute_node_security_uid\n
user_security_uid\n
subscription_security_uid\n
organisation_security_uid\n
......
......@@ -7,7 +7,7 @@ CREATE TABLE `catalog` (
`security_uid` INT UNSIGNED,
`group_security_uid` INT UNSIGNED,
`shadow_security_uid` INT UNSIGNED,
`computer_security_uid` INT UNSIGNED,
`compute_node_security_uid` INT UNSIGNED,
`user_security_uid` INT UNSIGNED,
`subscription_security_uid` INT UNSIGNED,
`organisation_security_uid` INT UNSIGNED,
......@@ -48,7 +48,7 @@ CREATE TABLE `catalog` (
KEY `security_uid` (`security_uid`),
KEY `group_security_uid` (`group_security_uid`),
KEY `shadow_security_uid` (`shadow_security_uid`),
KEY `computer_security_uid` (`computer_security_uid`),
KEY `compute_node_security_uid` (`compute_node_security_uid`),
KEY `user_security_uid` (`user_security_uid`),
KEY `subscription_security_uid` (`subscription_security_uid`),
KEY `owner` (`owner`),
......
# Host:
# Database: test
# Table: 'computer_partition'
# Table: 'compute_partition'
#
CREATE TABLE `computer_partition` (
CREATE TABLE `compute_partition` (
`uid` BIGINT UNSIGNED NOT NULL,
`software_release_url` varchar(255),
`free_for_request` INT(1),
......
......@@ -46,7 +46,7 @@
</item>
<item>
<key> <string>id</string> </key>
<value> <string>z0_drop_computer_partition</string> </value>
<value> <string>z_create_compute_partition</string> </value>
</item>
<item>
<key> <string>max_cache_</string> </key>
......
<key_list>
<key>computer_partition</key>
<key>compute_partition</key>
<key>slapos_item</key>
<key>software_instance_tree</key>
</key_list>
\ No newline at end of file
<key_list>
<key>computer | computer_security_uid</key>
<key>compute_node | compute_node_security_uid</key>
<key>group | group_security_uid</key>
<key>organisation | organisation_security_uid</key>
<key>project | project_security_uid</key>
......
......@@ -53,7 +53,7 @@
</item>
<item>
<key> <string>acquisition_portal_type</string> </key>
<value> <string>python: [\'Career\', \'Organisation\', \'Person\', \'Computer\']</string> </value>
<value> <string>python: [\'Career\', \'Organisation\', \'Person\', \'ComputeNode\']</string> </value>
</item>
<item>
<key> <string>acquisition_sync_value</string> </key>
......
......@@ -55,7 +55,7 @@
</item>
<item>
<key> <string>acquisition_portal_type</string> </key>
<value> <string>python: [\'Address\', \'Organisation\', \'Person\', \'Computer\']</string> </value>
<value> <string>python: [\'Address\', \'Organisation\', \'Person\', \'ComputeNode\']</string> </value>
</item>
<item>
<key> <string>acquisition_sync_value</string> </key>
......
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment