[ARVADOS] updated: af0a6fe184e16db14740b4593d8ccd498749ec99

git at public.curoverse.com git at public.curoverse.com
Mon Jan 27 17:06:57 EST 2014


Summary of changes:
 .../arvados/v1/collections_controller.rb           |   82 ++++++++++++++++++++
 1 files changed, 82 insertions(+), 0 deletions(-)

       via  af0a6fe184e16db14740b4593d8ccd498749ec99 (commit)
      from  e532b98ce7b426cc17452fc44a6278b3e9b6f9f2 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.


commit af0a6fe184e16db14740b4593d8ccd498749ec99
Author: Peter Amstutz <peter.amstutz at curoverse.com>
Date:   Mon Jan 27 17:07:42 2014 -0500

    Initial work adding provenance query to API server

diff --git a/services/api/app/controllers/arvados/v1/collections_controller.rb b/services/api/app/controllers/arvados/v1/collections_controller.rb
index 05da5fe..d14de73 100644
--- a/services/api/app/controllers/arvados/v1/collections_controller.rb
+++ b/services/api/app/controllers/arvados/v1/collections_controller.rb
@@ -50,6 +50,88 @@ class Arvados::V1::CollectionsController < ApplicationController
     show
   end
 
+  def collection_uuid(uuid)
+    m = /([a-f0-9]{32}(\+[0-9]+)?)(\+.*)?/.match(uuid)
+    if m
+      m[1]
+    else
+      nil
+    end
+  end
+
+  def script_param_edges(visited, sp)
+    if sp and not sp.empty?
+      case sp
+      when Hash
+        sp.each do |k, v|
+          script_param_edges(visited, v)
+        end
+      when Array
+        sp.each do |v|
+          script_param_edges(visited, v)
+        end
+      else
+        m = collection_uuid(sp)
+        if m
+          generate_provenance_edges(visited, m)
+        end
+      end
+    end
+    gr
+  end
+
+  def generate_provenance_edges(visited, uuid)
+    m = collection_uuid(uuid)
+
+    if not uuid or uuid.empty? or visited[uuid] or visited[m]
+      return ""
+    end
+
+    #puts "visiting #{uuid}"
+
+    if m  
+      # uuid is a collection
+      uuid = m
+      Collection.where(uuid:"uuid").each do |c|
+        visited[uuid] = c
+      end
+
+      Job.where(output: uuid).each do |job|
+        generate_provenance_edges(visited, job.uuid)
+      end
+
+      Job.where(log: uuid).each do |job|
+        generate_provenance_edges(visited, job.uuid)
+      end
+      
+    else
+      visited[uuid] = true
+
+      # uuid is something else
+      rsc = ArvadosBase::resource_class_for_uuid uuid
+
+      if rsc == Job
+        Job.where(uuid: uuid).each do |job|
+          visited[uuid] = job
+          script_param_edges(visited, job, "", job.script_parameters)
+        end
+    end
+
+    Link.where(head_uuid: uuid, link_class: "provenance").each do |link|
+      generate_provenance_edges(visited, link.tail_uuid)
+    end
+
+    #puts "finished #{uuid}"
+
+    gr
+  end
+
+  def provenance 
+    visited = {}
+    generate_provenance_edges(visited, @object.uuid)
+    visited
+  end
+
   protected
 
   def find_object_by_uuid

-----------------------------------------------------------------------


hooks/post-receive
-- 




More information about the arvados-commits mailing list