X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/9a44fb9de57a2f44347aecd26928eee03ea3c60c..ba917d72d48615cdd0c6da87d41b6bd0f9f26666:/apps/workbench/app/models/container_work_unit.rb diff --git a/apps/workbench/app/models/container_work_unit.rb b/apps/workbench/app/models/container_work_unit.rb index 037a6e53ee..84fc1f8f09 100644 --- a/apps/workbench/app/models/container_work_unit.rb +++ b/apps/workbench/app/models/container_work_unit.rb @@ -1,7 +1,7 @@ class ContainerWorkUnit < ProxyWorkUnit attr_accessor :container - def initialize proxied, label + def initialize proxied, label, parent super if @proxied.is_a?(ContainerRequest) container_uuid = get(:container_uuid) @@ -12,7 +12,7 @@ class ContainerWorkUnit < ProxyWorkUnit end def children - return self.my_children if self.my_children + return @my_children if @my_children container_uuid = nil container_uuid = if @proxied.is_a?(Container) then uuid else get(:container_uuid) end @@ -25,7 +25,7 @@ class ContainerWorkUnit < ProxyWorkUnit end end - self.my_children = items + @my_children = items end def title @@ -46,13 +46,21 @@ class ContainerWorkUnit < ProxyWorkUnit end def can_cancel? - @proxied.is_a?(ContainerRequest) && state_label.in?(["Queued", "Locked", "Running"]) && priority > 0 + @proxied.is_a?(ContainerRequest) && @proxied.state == "Committed" && @proxied.priority > 0 && @proxied.editable? end def container_uuid get(:container_uuid) end + def requesting_container_uuid + get(:requesting_container_uuid) + end + + def priority + @proxied.priority + end + # For the following properties, use value from the @container if exists # This applies to a ContainerRequest with container_uuid @@ -75,7 +83,18 @@ class ContainerWorkUnit < ProxyWorkUnit end def state_label - get_combined(:state) + ec = exit_code + return "Failed" if (ec && ec != 0) + + state = get_combined(:state) + + return "Queued" if state == "Locked" + return "Cancelled" if ((priority == 0) and (state == "Queued")) + state + end + + def exit_code + get_combined(:exit_code) end def docker_image @@ -86,17 +105,22 @@ class ContainerWorkUnit < ProxyWorkUnit get_combined(:runtime_constraints) end - def priority - get_combined(:priority) - end - def log_collection - get_combined(:log) + if @proxied.is_a?(ContainerRequest) + get(:log_uuid) + else + get(:log) + end end def outputs items = [] - items << get_combined(:output) if get_combined(:output) + if @proxied.is_a?(ContainerRequest) + out = get(:output_uuid) + else + out = get(:output) + end + items << out if out items end @@ -124,10 +148,35 @@ class ContainerWorkUnit < ProxyWorkUnit get_combined(:output_path) end - # End combined propeties + def log_object_uuids + [get(:uuid, @container), get(:uuid, @proxied)].compact + end + + def render_log + collection = Collection.find(log_collection) rescue nil + if collection + return {log: collection, partial: 'collections/show_files', locals: {object: collection, no_checkboxes: true}} + end + end + + def template_uuid + properties = get(:properties) + if properties + properties[:template_uuid] + end + end + + # End combined properties protected def get_combined key - get(key, @container) || get(key, @proxied) + from_container = get(key, @container) + from_proxied = get(key, @proxied) + + if from_container.is_a? Hash or from_container.is_a? Array + if from_container.any? then from_container else from_proxied end + else + from_container || from_proxied + end end end