Merge branch '3187-start-finish-timestamps-tasks-pipelines' into 3187-pipeline-instan...
[arvados.git] / sdk / cli / bin / arv-run-pipeline-instance
index 5c36a1afb93daf658bf318ff1ff7f01f566e1650..b19bf04dd6534f5650f97a39034a565d3f843969 100755 (executable)
@@ -495,6 +495,10 @@ class WhRunPipelineInstance
     moretodo = true
     interrupted = false
 
+    if @instance[:started_at].nil?
+      @instance[:started_at] = Time.now
+    end
+
     job_creation_failed = 0
     while moretodo
       moretodo = false
@@ -580,11 +584,11 @@ class WhRunPipelineInstance
                   name = c[:output_name] || "Output #{portable_data_hash[0..7]} of #{cname} of #{pipeline_name}"
 
                   # check if there is a name collision.
-                  name_collisions = $arv.collection.list(filters: [["owner_uuid", "=", owner_uuid]
+                  name_collisions = $arv.collection.list(filters: [["owner_uuid", "=", owner_uuid],
                                                                    ["name", "=", name]])[:items]
 
                   newcollection_actual = nil
-                  if name_collisions.any? and name_collisions.first["portable_data_hash"] == portable_data_hash
+                  if name_collisions.any? and name_collisions.first[:portable_data_hash] == portable_data_hash
                     # There is already a collection with the same name and the
                     # same contents, so just point to that.
                     newcollection_actual = name_collisions.first
@@ -598,7 +602,7 @@ class WhRunPipelineInstance
                       owner_uuid: owner_uuid,
                       name: name,
                       portable_data_hash: collections.first[:portable_data_hash],
-                      manifest_text: collections.first[:manifest_text]                      
+                      manifest_text: collections.first[:manifest_text]
                     }
                     debuglog "Creating collection #{newcollection}", 0
                     newcollection_actual = $arv.collection.create collection: newcollection, ensure_unique_name: true
@@ -679,6 +683,10 @@ class WhRunPipelineInstance
       end
     end
 
+    if @instance[:finished_at].nil? and ['Complete', 'Failed'].include? @instance[:state]
+      @instance[:finished_at] = Time.now
+    end
+
     debuglog "pipeline instance state is #{@instance[:state]}"
 
     # set components_summary
@@ -742,6 +750,7 @@ class WhRunPipelineInstance
       if ["New", "Ready", "RunningOnClient",
           "RunningOnServer"].include?(@instance[:state])
         @instance[:state] = "Failed"
+        @instance[:finished_at] = Time.now
         @instance.save
       end
       @instance.log_stderr(msg)