Merge branch 'master' into 8876-work-unit
[arvados.git] / apps / workbench / app / models / job_work_unit.rb
index 9b0604857fe0b221588c91f4059d341e3f1db364..256003795adcd9c9d1e1775593af853bfb67dd82 100644 (file)
@@ -1,35 +1,26 @@
 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
@@ -52,6 +43,14 @@ class JobWorkUnit < ProxyWorkUnit
     get(:output)
   end
 
+  def child_summary
+    if children.any?
+      super
+    else
+      get(:tasks_summary)
+    end
+  end
+
   def can_cancel?
     true
   end
@@ -61,10 +60,6 @@ class JobWorkUnit < ProxyWorkUnit
     "/jobs/#{uuid}"
   end
 
-  def child_summary
-    get(:tasks_summary)
-  end
-
   def title
     "job"
   end