3901: allow job to be either Hash or Job
authorTim Pierce <twp@curoverse.com>
Thu, 25 Sep 2014 19:08:18 +0000 (15:08 -0400)
committerTim Pierce <twp@curoverse.com>
Thu, 25 Sep 2014 20:16:53 +0000 (16:16 -0400)
Refactoring to ensure that a component "job" data structure may either
be a Hash (parsed directly from the component's JSON representation) or
a real Job object retrieved from the database.

When rendering a pipeline, parse the :started_at and :finished_at
timestamp fields, respectively, if necessary.

apps/workbench/app/helpers/pipeline_instances_helper.rb
apps/workbench/app/views/pipeline_instances/_running_component.html.erb

index 7e5324be7af92b1709739cc01a667b40ecea4f47..7c6e5f01baaf4bd1f63b7f848fd572c96b10459e 100644 (file)
@@ -102,8 +102,16 @@ module PipelineInstancesHelper
       end
       if c[:job] and c[:job][:uuid] and job[c[:job][:uuid]]
         pj[:job] = job[c[:job][:uuid]]
+      elsif c[:job].is_a?(Hash)
+        pj[:job] = c[:job]
+        if pj[:job][:started_at].is_a? String
+          pj[:job][:started_at] = Time.parse(pj[:job][:started_at])
+        end
+        if pj[:job][:finished_at].is_a? String
+          pj[:job][:finished_at] = Time.parse(pj[:job][:finished_at])
+        end
       else
-        pj[:job] = c[:job].is_a?(Hash) ? c[:job] : {}
+        pj[:job] = {}
       end
       pj[:percent_done] = 0
       pj[:percent_running] = 0
@@ -160,7 +168,7 @@ module PipelineInstancesHelper
       pj[:nondeterministic] = pj[:job][:nondeterministic] || c[:nondeterministic]
       pj[:output] = pj[:job][:output]
       pj[:output_uuid] = c[:output_uuid]
-      pj[:finished_at] = (Time.parse(pj[:job][:finished_at]) rescue nil)
+      pj[:finished_at] = pj[:job][:finished_at]
       ret << pj
     end
     ret
index 1d52e281f67a390dc4802f7079e69c52f38270ad..a10218a98faa8e9e73e2f96381519c429e969994 100644 (file)
@@ -18,9 +18,9 @@
 
             <div class="col-md-3">
               <% if current_job[:started_at] %>
-                <% walltime = ((if current_job.finished_at then current_job.finished_at else Time.now() end) - current_job.started_at) %>
+                <% walltime = ((if current_job[:finished_at] then current_job[:finished_at] else Time.now() end) - current_job[:started_at]) %>
                 <% cputime = tasks.map { |task|
-                     if task.started_at and task.job_uuid == current_job.uuid
+                     if task.started_at and task.job_uuid == current_job[:uuid]
                        (if task.finished_at then task.finished_at else Time.now() end) - task.started_at
                      else
                        0
@@ -35,7 +35,7 @@
               <div class="col-md-5 text-overflow-ellipsis">
                 <% if pj[:output_uuid] %>
                   <%= link_to_if_arvados_object pj[:output_uuid], friendly_name: true %>
-                <% elsif current_job.andand[:output] %>
+                <% elsif current_job[:output] %>
                   <%= link_to_if_arvados_object current_job[:output], link_text: "Output of #{pj[:name]}" %>
                 <% else %>
                   No output.
@@ -46,7 +46,7 @@
                 <%= pj[:progress_bar] %>
               </div>
               <div class="col-md-1 pipeline-instance-spacing">
-                <%= form_tag "/jobs/#{current_job.uuid}/cancel", style: "display:inline; padding-left: 1em" do |f| %>
+                <%= form_tag "/jobs/#{current_job[:uuid]}/cancel", style: "display:inline; padding-left: 1em" do |f| %>
                 <%= hidden_field_tag :return_to, url_for(@object) %>
                 <%= button_tag "Cancel", {class: 'btn btn-xs btn-danger', id: "cancel-job-button"} %>
             </div>
               <% queuetime = Time.now - current_job[:created_at] %>
               Queued for <%= render_runtime(queuetime, true) %>.
               <% begin %>
-              <% if current_job.queue_position == 0 %>
+              <% if current_job[:queue_position] == 0 %>
                 This job is next in the queue to run.
-              <% elsif current_job.queue_position == 1 %>
+              <% elsif current_job[:queue_position] == 1 %>
                 There is 1 job in the queue ahead of this one.
               <% else  %>
-                There are <%= current_job.queue_position %> jobs in the queue ahead of this one.
+                There are <%= current_job[:queue_position] %> jobs in the queue ahead of this one.
               <% end %>
               <% rescue %>
           <% end %>