X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/17e79aa5b26b8c0b3228247451172999ad81baff..0110ce93702def9a641d92d90d5544d4d0adf22b:/apps/workbench/app/models/job_work_unit.rb diff --git a/apps/workbench/app/models/job_work_unit.rb b/apps/workbench/app/models/job_work_unit.rb index 9b0604857f..83825a5338 100644 --- a/apps/workbench/app/models/job_work_unit.rb +++ b/apps/workbench/app/models/job_work_unit.rb @@ -1,37 +1,60 @@ +# Copyright (C) The Arvados Authors. All rights reserved. +# +# SPDX-License-Identifier: AGPL-3.0 + class JobWorkUnit < ProxyWorkUnit def children - # Job tasks - uuid = get(:uuid) - tasks = JobTask.filter([['job_uuid', '=', uuid]]).results + return @my_children if @my_children + + # Jobs components items = [] - tasks.each do |t| - items << t.work_unit("task #{items.size}") - end + components = get(:components) + uuids = components.andand.collect {|_, v| v} + return items if (!uuids or uuids.empty?) - # Jobs submitted by this job -- TBD + rcs = {} + uuids.each do |u| + r = ArvadosBase::resource_class_for_uuid(u) + rcs[r] = [] unless rcs[r] + rcs[r] << u + end + rcs.each do |rc, ids| + rc.where(uuid: ids).each do |obj| + items << obj.work_unit(components.key(obj.uuid)) + end + end - items + @my_children = items end - def progress - state = get(:state) - if state == 'Complete' - return 1.0 - end - - tasks_summary = get(:tasks_summary) - failed = tasks_summary[:failed] || 0 rescue 0 - done = tasks_summary[:done] || 0 rescue 0 - running = tasks_summary[:running] || 0 rescue 0 - todo = tasks_summary[:todo] || 0 rescue 0 - if done + running + failed + todo > 0 - total_tasks = done + running + failed + todo - (done+failed).to_f / total_tasks + def child_summary + if children.any? + super else - 0.0 + get(:tasks_summary) end end + def parameters + get(:script_parameters) + end + + def repository + get(:repository) + end + + def script + get(:script) + end + + def script_version + get(:script_version) + end + + def supplied_script_version + get(:supplied_script_version) + end + def docker_image get(:docker_image_locator) end @@ -40,6 +63,10 @@ class JobWorkUnit < ProxyWorkUnit get(:nondeterministic) end + def runtime_constraints + get(:runtime_constraints) + end + def priority get(:priority) end @@ -48,12 +75,18 @@ class JobWorkUnit < ProxyWorkUnit get(:log) end - def output - get(:output) + def outputs + items = [] + items << get(:output) if get(:output) + items end def can_cancel? - true + state_label.in? ["Queued", "Running"] + end + + def confirm_cancellation + "All unfinished child jobs and pipelines will also be canceled, even if they are being used in another job or pipeline. Are you sure you want to cancel this job?" end def uri @@ -61,10 +94,6 @@ class JobWorkUnit < ProxyWorkUnit "/jobs/#{uuid}" end - def child_summary - get(:tasks_summary) - end - def title "job" end