X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/f3658ececac430166ee9766be1deee6a61153d0f..d451eabbcbb8d5885fb30c2c341d93204a008596:/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 2a5cb98810..5b1d1b7e35 100644 --- a/apps/workbench/app/models/job_work_unit.rb +++ b/apps/workbench/app/models/job_work_unit.rb @@ -1,51 +1,96 @@ class JobWorkUnit < ProxyWorkUnit def children - # Job tasks - tasks = JobTask.filter([['job_uuid', '=', self.proxied.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 - if self.proxied.state == 'Complete' - return 1.0 - end - - failed = self.proxied.tasks_summary[:failed] || 0 rescue 0 - done = self.proxied.tasks_summary[:done] || 0 rescue 0 - running = self.proxied.tasks_summary[:running] || 0 rescue 0 - todo = self.proxied.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 - self.proxied[:docker_image_locator] + get(:docker_image_locator) end def nondeterministic - self.proxied[:nondeterministic] + get(:nondeterministic) + end + + def runtime_constraints + get(:runtime_constraints) end def priority - self.proxied[:priority] + get(:priority) end def log_collection - [self.proxied.log] + get(:log) + end + + def outputs + items = [] + items << get(:output) if get(:output) + items + end + + def can_cancel? + 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 + uuid = get(:uuid) + "/jobs/#{uuid}" end - def output - self.proxied.output + def title + "job" end end