Commit 3c192583 authored by Rafael Monnerat's avatar Rafael Monnerat

slapos_cloud&crm: Check before call workflow API

   The transition should be excessively called since it creates an entry on workflow history. So we could skip the expensive call by pre-checking before all it, rather then let the API skip itself.
parent 16752b7f
portal = context.getPortalObject()
aggregate_value = portal.restrictedTraverse(aggregate)
return portal.portal_catalog.getResultValue(
portal_type = 'Support Request',
title = title,
simulation_state = ["validated", "submitted", "suspended"],
default_aggregate_uid = aggregate_value.getUid(),
)
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="PythonScript" module="Products.PythonScripts.PythonScript"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>Script_magic</string> </key>
<value> <int>3</int> </value>
</item>
<item>
<key> <string>_bind_names</string> </key>
<value>
<object>
<klass>
<global name="NameAssignments" module="Shared.DC.Scripts.Bindings"/>
</klass>
<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>title, aggregate</string> </value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>Base_getSupportRequestInProgress</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
...@@ -15,11 +15,9 @@ except KeyError: ...@@ -15,11 +15,9 @@ except KeyError:
aggregate_value = portal.restrictedTraverse(aggregate) aggregate_value = portal.restrictedTraverse(aggregate)
support_request_in_progress = portal.portal_catalog.getResultValue( support_request_in_progress = person.Base_getSupportRequestInProgress(
portal_type = 'Support Request', title=support_request_title,
title = support_request_title, aggregate=aggregate
simulation_state = ["validated", "submitted", "suspended"],
default_aggregate_uid = aggregate_value.getUid(),
) )
if support_request_in_progress is not None: if support_request_in_progress is not None:
......
...@@ -29,12 +29,18 @@ request_title = 'Allocation scope of %s changed to %s' % (compute_node_reference ...@@ -29,12 +29,18 @@ request_title = 'Allocation scope of %s changed to %s' % (compute_node_reference
request_description = 'Allocation scope has been changed to ' \ request_description = 'Allocation scope has been changed to ' \
'%s for %s' % (target_allocation_scope, compute_node_reference) '%s for %s' % (target_allocation_scope, compute_node_reference)
person.notify(support_request_title=request_title, support_request = person.Base_getSupportRequestInProgress(
title=request_title,
aggregate=context.getRelativeUrl()
)
if support_request is None:
person.notify(support_request_title=request_title,
support_request_description=request_description, support_request_description=request_description,
aggregate=context.getRelativeUrl()) aggregate=context.getRelativeUrl())
support_request_relative_url = context.REQUEST.get("support_request_relative_url") support_request_relative_url = context.REQUEST.get("support_request_relative_url")
support_request = portal.restrictedTraverse(support_request_relative_url) support_request = portal.restrictedTraverse(support_request_relative_url)
if support_request is not None: if support_request is not None:
if support_request.getSimulationState() != "validated": if support_request.getSimulationState() != "validated":
...@@ -54,8 +60,10 @@ if support_request is not None: ...@@ -54,8 +60,10 @@ if support_request is not None:
message = notification_message.asText( message = notification_message.asText(
substitution_method_parameter_dict={'mapping_dict': mapping_dict}) substitution_method_parameter_dict={'mapping_dict': mapping_dict})
support_request.notify(message_title=request_title, message=message) event = support_request.SupportRequest_getLastEvent(request_title)
event = support_request.REQUEST.get("ticket_notified_item") if event is None:
support_request.notify(message_title=request_title, message=message)
event = support_request.REQUEST.get("ticket_notified_item")
if event is not None: if event is not None:
# event added, suspend ticket # event added, suspend ticket
......
...@@ -49,15 +49,23 @@ for software_installation in software_installation_list: ...@@ -49,15 +49,23 @@ for software_installation in software_installation_list:
(software_installation.getUrlString(), compute_node_title, software_installation.getCreationDate()) (software_installation.getUrlString(), compute_node_title, software_installation.getCreationDate())
if should_notify: if should_notify:
person.notify(support_request_title=ticket_title, support_request = person.Base_getSupportRequestInProgress(
title=ticket_title,
aggregate=software_installation.getRelativeUrl())
if support_request is None:
person.notify(support_request_title=ticket_title,
support_request_description=description, support_request_description=description,
aggregate=software_installation.getRelativeUrl()) aggregate=software_installation.getRelativeUrl())
support_request_relative_url = context.REQUEST.get("support_request_relative_url") support_request_relative_url = context.REQUEST.get("support_request_relative_url")
if support_request_relative_url is None: if support_request_relative_url is None:
return return
support_request = portal.restrictedTraverse(support_request_relative_url) support_request = portal.restrictedTraverse(support_request_relative_url)
if support_request is None:
return
# Send Notification message # Send Notification message
notification_reference = 'slapos-crm-compute_node_software_installation_state.notification' notification_reference = 'slapos-crm-compute_node_software_installation_state.notification'
...@@ -74,7 +82,10 @@ for software_installation in software_installation_list: ...@@ -74,7 +82,10 @@ for software_installation in software_installation_list:
message = notification_message.asText( message = notification_message.asText(
substitution_method_parameter_dict={'mapping_dict':mapping_dict}) substitution_method_parameter_dict={'mapping_dict':mapping_dict})
support_request.notify(message_title=ticket_title, message=message) event = support_request.SupportRequest_getLastEvent(ticket_title)
if event is None:
support_request.notify(message_title=ticket_title, message=message)
support_request_list.append(support_request) support_request_list.append(support_request)
return support_request_list return support_request_list
...@@ -31,15 +31,24 @@ else: ...@@ -31,15 +31,24 @@ else:
# Nothing to notify. # Nothing to notify.
return return
person.notify(support_request_title=ticket_title, support_request = person.Base_getSupportRequestInProgress(
title=ticket_title,
aggregate=context.getRelativeUrl())
if support_request is None:
person.notify(support_request_title=ticket_title,
support_request_description=description, support_request_description=description,
aggregate=context.getRelativeUrl()) aggregate=context.getRelativeUrl())
support_request_relative_url = context.REQUEST.get("support_request_relative_url") support_request_relative_url = context.REQUEST.get("support_request_relative_url")
if support_request_relative_url is None: if support_request_relative_url is None:
return
support_request = portal.restrictedTraverse(support_request_relative_url)
if support_request is None:
return return
support_request = portal.restrictedTraverse(support_request_relative_url)
# Send Notification message # Send Notification message
notification_message = portal.portal_notifications.getDocumentValue( notification_message = portal.portal_notifications.getDocumentValue(
...@@ -54,6 +63,8 @@ else: ...@@ -54,6 +63,8 @@ else:
message = notification_message.asText( message = notification_message.asText(
substitution_method_parameter_dict={'mapping_dict': mapping_dict}) substitution_method_parameter_dict={'mapping_dict': mapping_dict})
support_request.notify(message_title=ticket_title, message=message) event = support_request.SupportRequest_getLastEvent(ticket_title)
if event is None:
support_request.notify(message_title=ticket_title, message=message)
return support_request return support_request
...@@ -16,15 +16,23 @@ if error_message: ...@@ -16,15 +16,23 @@ if error_message:
else: else:
error_message = "No message!" error_message = "No message!"
person.notify(support_request_title=ticket_title, support_request = person.Base_getSupportRequestInProgress(
title=ticket_title,
aggregate=context.getRelativeUrl())
if support_request is None:
person.notify(support_request_title=ticket_title,
support_request_description=description, support_request_description=description,
aggregate=context.getRelativeUrl()) aggregate=context.getRelativeUrl())
support_request_relative_url = context.REQUEST.get("support_request_relative_url") support_request_relative_url = context.REQUEST.get("support_request_relative_url")
if support_request_relative_url is None: if support_request_relative_url is None:
return return
support_request = portal.restrictedTraverse(support_request_relative_url) support_request = portal.restrictedTraverse(support_request_relative_url)
if support_request is None:
return
if support_request.getSimulationState() not in ["validated", "suspended"]: if support_request.getSimulationState() not in ["validated", "suspended"]:
support_request.validate() support_request.validate()
...@@ -41,5 +49,8 @@ if notification_message is not None: ...@@ -41,5 +49,8 @@ if notification_message is not None:
message = notification_message.asText( message = notification_message.asText(
substitution_method_parameter_dict={'mapping_dict':mapping_dict}) substitution_method_parameter_dict={'mapping_dict':mapping_dict})
support_request.notify(message_title=ticket_title, message=message) event = support_request.SupportRequest_getLastEvent(ticket_title)
if event is None:
support_request.notify(message_title=ticket_title, message=message)
return context.REQUEST.get("ticket_notified_item") return context.REQUEST.get("ticket_notified_item")
portal = context.getPortalObject()
return portal.portal_catalog.getResultValue(
title=title,
follow_up_uid=context.getUid(),
portal_type=portal.getPortalEventTypeList(),
sort_on=[('delivery.start_date', 'DESC')])
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="PythonScript" module="Products.PythonScripts.PythonScript"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>Script_magic</string> </key>
<value> <int>3</int> </value>
</item>
<item>
<key> <string>_bind_names</string> </key>
<value>
<object>
<klass>
<global name="NameAssignments" module="Shared.DC.Scripts.Bindings"/>
</klass>
<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>title</string> </value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>SupportRequest_getLastEvent</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
...@@ -24,8 +24,10 @@ if document is not None and document.getSlapState() == "destroy_requested": ...@@ -24,8 +24,10 @@ if document is not None and document.getSlapState() == "destroy_requested":
message = notification_message.asText( message = notification_message.asText(
substitution_method_parameter_dict={'mapping_dict':mapping_dict}) substitution_method_parameter_dict={'mapping_dict':mapping_dict})
context.notify(message_title="Instance Tree was destroyed was destroyed by the user", ticket_title = "Instance Tree was destroyed was destroyed by the user"
message=message) event = context.SupportRequest_getLastEvent(ticket_title)
if event is None:
context.notify(message_title=ticket_title, message=message)
context.invalidate() context.invalidate()
return context.REQUEST.get("ticket_notified_item") return context.REQUEST.get("ticket_notified_item")
...@@ -16,11 +16,7 @@ except KeyError: ...@@ -16,11 +16,7 @@ except KeyError:
resource = portal.service_module.slapos_crm_information.getRelativeUrl() resource = portal.service_module.slapos_crm_information.getRelativeUrl()
# create Web message if needed for this ticket # create Web message if needed for this ticket
last_event = ticket.portal_catalog.getResultValue( last_event = ticket.SupportRequest_getLastEvent(message_title)
title=message_title,
follow_up_uid=ticket.getUid(),
sort_on=[('delivery.start_date', 'DESC')],
)
if last_event: if last_event:
# User has already been notified for this problem. # User has already been notified for this problem.
ticket.REQUEST.set("ticket_notified_item", last_event) ticket.REQUEST.set("ticket_notified_item", last_event)
......
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