X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/2d5ef50536851f8d190675a3bd74ee7567713ee0..eae48c31bb338689ec67fbc6a14a2e0b1fb5e3b6:/apps/workbench/app/models/container_work_unit.rb?ds=sidebyside diff --git a/apps/workbench/app/models/container_work_unit.rb b/apps/workbench/app/models/container_work_unit.rb index 2fe1ff0669..88aab306ce 100644 --- a/apps/workbench/app/models/container_work_unit.rb +++ b/apps/workbench/app/models/container_work_unit.rb @@ -1,59 +1,64 @@ class ContainerWorkUnit < ProxyWorkUnit - attr_accessor :related + attr_accessor :container - def initialize proxied, label + def initialize proxied, label, parent super if @proxied.is_a?(ContainerRequest) container_uuid = get(:container_uuid) if container_uuid - @related = Container.where(uuid: container_uuid).first rescue nil + @container = Container.where(uuid: container_uuid).first end end end def children - return self.my_children if self.my_children + return @my_children if @my_children - items = [] - - if @proxied.is_a?(Container) - crs = {} - reqs = ContainerRequest.where(requesting_container_uuid: uuid).results - reqs.each { |cr| crs[cr.container_uuid] = cr.name } - - containers = Container.where(uuid: crs.keys).results - containers.each do |c| - items << c.work_unit(crs[c.uuid] || 'this container') - end + container_uuid = nil + container_uuid = if @proxied.is_a?(Container) then uuid else get(:container_uuid) end - self.my_children = items - else - container_uuid = get(:container_uuid) - if container_uuid - reqs = ContainerRequest.where(requesting_container_uuid: container_uuid).results - reqs.each do |cr| - items << cr.work_unit(cr.name || 'this container') - end + items = [] + if container_uuid + reqs = ContainerRequest.where(requesting_container_uuid: container_uuid).results + reqs.each do |cr| + items << cr.work_unit(cr.name || 'this container') end end - self.my_children = items + @my_children = items end def title "container" end + def uri + uuid = get(:uuid) + + return nil unless uuid + + if @proxied.class.respond_to? :table_name + "/#{@proxied.class.table_name}/#{uuid}" + else + resource_class = ArvadosBase.resource_class_for_uuid(uuid) + "#{resource_class.table_name}/#{uuid}" if resource_class + end + 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 - # For the following properties, use value from the @related container if exists - # This applies to a ContainerRequest in Committed or Final state with container_uuid + def priority + @proxied.priority + end + + # For the following properties, use value from the @container if exists + # This applies to a ContainerRequest with container_uuid def started_at t = get_combined(:started_at) @@ -74,7 +79,15 @@ class ContainerWorkUnit < ProxyWorkUnit end def state_label - get_combined(:state) + ec = exit_code + return "Failed" if (ec && ec != 0) + state = get_combined(:state) + return "Ready" if ((priority == 0) and (["Queued", "Locked"].include?(state))) + state + end + + def exit_code + get_combined(:exit_code) end def docker_image @@ -85,10 +98,6 @@ class ContainerWorkUnit < ProxyWorkUnit get_combined(:runtime_constraints) end - def priority - get_combined(:priority) - end - def log_collection get_combined(:log) end @@ -123,10 +132,28 @@ 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, @related) || get(key, @proxied) + get(key, @container) || get(key, @proxied) end end