8876: add work_unit to workbench models
[arvados.git] / apps / workbench / app / models / job_work_unit.rb
1 class JobWorkUnit < ProxyWorkUnit
2   def children
3     # Job tasks
4     tasks = JobTask.filter([['job_uuid', '=', self.proxied.uuid]]).results
5     items = []
6     tasks.each do |t|
7       items << t.work_unit("task #{items.size}")
8     end
9
10     # Jobs submitted by this job  --  TBD
11
12     items
13   end
14
15   def progress
16     if self.proxied.state == 'Complete'
17       return 1.0
18     end
19
20     failed = self.proxied.tasks_summary[:failed] || 0 rescue 0
21     done = self.proxied.tasks_summary[:done] || 0 rescue 0
22     running = self.proxied.tasks_summary[:running] || 0 rescue 0
23     todo = self.proxied.tasks_summary[:todo] || 0 rescue 0
24     if done + running + failed + todo > 0
25       total_tasks = done + running + failed + todo
26       (done+failed).to_f / total_tasks
27     else
28       0.0
29     end
30   end
31
32   def docker_image
33     self.proxied[:docker_image_locator]
34   end
35
36   def nondeterministic
37     self.proxied[:nondeterministic]
38   end
39
40   def priority
41     self.proxied[:priority]
42   end
43
44   def log_collection
45     [self.proxied.log]
46   end
47
48   def output
49     self.proxied.output
50   end
51 end