class JobWorkUnit < ProxyWorkUnit
def children
- # Job tasks
- uuid = get(:uuid)
- tasks = JobTask.filter([['job_uuid', '=', uuid]]).results
- items = []
- tasks.each do |t|
- items << t.work_unit("task #{items.size}")
- end
+ return self.my_children if self.my_children
- # Jobs submitted by this job -- TBD
-
- items
- end
+ # Jobs components
+ items = []
+ components = get(:components)
+ uuids = components.andand.collect {|_, v| v}
+ return items if (!uuids or uuids.empty?)
- def progress
- state = get(:state)
- if state == 'Complete'
- return 1.0
+ rcs = {}
+ uuids.each do |u|
+ r = ArvadosBase::resource_class_for_uuid(u)
+ rcs[r] = [] unless rcs[r]
+ rcs[r] << u
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
- else
- 0.0
+ rcs.each do |rc, ids|
+ rc.where(uuid: ids).each do |obj|
+ items << obj.work_unit(components.key(obj.uuid))
+ end
end
+
+ self.my_children = items
end
def docker_image
get(:output)
end
+ def child_summary
+ if children.any?
+ super
+ else
+ get(:tasks_summary)
+ end
+ end
+
def can_cancel?
true
end
"/jobs/#{uuid}"
end
- def child_summary
- get(:tasks_summary)
- end
-
def title
"job"
end