[ARVADOS] updated: 9ab992cca7091b621cb465694f6439b1e62604a7

git at public.curoverse.com git at public.curoverse.com
Fri Jan 24 17:09:38 EST 2014


Summary of changes:
 .../app/controllers/collections_controller.rb      |   70 ++++++++++++++++++++
 apps/workbench/app/models/arvados_base.rb          |    3 +-
 apps/workbench/app/views/collections/show.html.erb |    5 ++
 3 files changed, 77 insertions(+), 1 deletions(-)

       via  9ab992cca7091b621cb465694f6439b1e62604a7 (commit)
      from  35bb31a252d665c40c13fbf6b73b61b935d72313 (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 9ab992cca7091b621cb465694f6439b1e62604a7
Author: Peter Amstutz <peter.amstutz at curoverse.com>
Date:   Fri Jan 24 17:10:24 2014 -0500

    Checkpoint, draws a somewhat useful graph, needs a lot of work though.

diff --git a/apps/workbench/app/controllers/collections_controller.rb b/apps/workbench/app/controllers/collections_controller.rb
index 447b34d..e7d29e4 100644
--- a/apps/workbench/app/controllers/collections_controller.rb
+++ b/apps/workbench/app/controllers/collections_controller.rb
@@ -56,6 +56,54 @@ class CollectionsController < ApplicationController
     self.response_body = FileStreamer.new opts
   end
 
+  def generate_edges(gr, uuid, edge_added = false)
+    m = /([a-f0-9]{32}(\+[0-9]+)?)(\+.*)?/.match(uuid)
+    if m  
+      # uuid is a collection
+      uuid = m[1]
+      gr += "\"#{uuid}\" [href=\"#{collection_path uuid}\"];"
+
+      Job.where(output: uuid).each do |job|
+        gr += "\"#{job.uuid}\" [href=\"#{job_path job.uuid}\"];"
+        gr += "\"#{uuid}\" -> \"#{job.uuid}\" [label=\" output\"];"
+        gr = generate_edges(gr, job.uuid)
+      end
+
+      Job.where(log: uuid).each do |job|
+        gr += "\"#{job.uuid}\" [href=\"#{job_path job.uuid}\"];"
+        gr += "\"#{uuid}\" -> \"#{job.uuid}\" [label=\" log\"];"
+        gr = generate_edges(gr, job.uuid)
+      end
+      
+    else
+      # uuid is something else
+      rsc = ArvadosBase::resource_class_for_uuid uuid
+      gr += "\"#{uuid}\" [href=\"#{rsc}/#{uuid}\"];"
+      
+      if rsc.to_s == "Job"
+        Job.where(uuid: uuid).each do |job|
+          job.script_parameters.each do |k, v|
+            gr += "\"#{job.uuid}\" [href=\"#{job_path job.uuid}\"];"
+            gr += "\"#{job.uuid}\" -> \"#{v}\" [label=\" #{k}\"];"
+            gr = generate_edges(gr, v)
+          end
+        end
+      end
+     
+      gr
+    end
+
+    Link.where(head_uuid: uuid, link_class: "provenance", name: "provided").each do |link|
+      rsc = ArvadosBase::resource_class_for_uuid link.tail_uuid
+      puts "rsc is #{rsc}"
+      gr += "\"#{link.tail_uuid}\" [href=\"#{rsc}/#{link.tail_uuid}\"];"
+      gr += "\"#{link.head_uuid}\" -> \"#{link.tail_uuid}\" [label=\" provided\"];"
+      generate_edges(gr, link.tail_uuid)
+    end
+
+    gr
+  end
+
   def show
     return super if !@object
     @provenance = []
@@ -100,6 +148,28 @@ class CollectionsController < ApplicationController
         @sourcedata[collection.uuid][:collection] = collection
       end
     end
+
+    require 'open3'
+    
+    gr = "digraph {"
+    gr += "node [fontsize=8];"
+    gr += "edge [dir=back,fontsize=8];"
+    
+    gr = generate_edges(gr, @object.uuid)
+
+    gr += "}"
+    @prov_svg = ""
+
+    Open3.popen2("dot", "-Tsvg") do |stdin, stdout, wait_thr|
+      stdin.print(gr)
+      stdin.close
+      wait_thr.value
+      @prov_svg = stdout.read()
+      stdout.close()
+    end
+
+    @prov_svg = @prov_svg.sub(/<\?xml.*?\?>/m, "")
+    @prov_svg = @prov_svg.sub(/<!DOCTYPE.*?>/m, "")
   end
 
   protected
diff --git a/apps/workbench/app/models/arvados_base.rb b/apps/workbench/app/models/arvados_base.rb
index a648a8f..4a3a662 100644
--- a/apps/workbench/app/models/arvados_base.rb
+++ b/apps/workbench/app/models/arvados_base.rb
@@ -16,7 +16,8 @@ class ArvadosBase < ActiveRecord::Base
       'd1hrv' => 'arvados#pipeline_instance',
       'uo14g' => 'arvados#pipeline_instance', # legacy PipelineInstance objects
       'j7d0g' => 'arvados#group',
-      'ldvyl' => 'arvados#group' # only needed for legacy Project objects
+      'ldvyl' => 'arvados#group', # only needed for legacy Project objects
+      '7a9it' => 'arvados#human'
     }
   end
 
diff --git a/apps/workbench/app/views/collections/show.html.erb b/apps/workbench/app/views/collections/show.html.erb
index 0c5795d..85fdeed 100644
--- a/apps/workbench/app/views/collections/show.html.erb
+++ b/apps/workbench/app/views/collections/show.html.erb
@@ -23,6 +23,8 @@
   <li><a href="#jobs" data-toggle="tab">Jobs (<%= @provenance.size %>)</a></li>
   <li><a href="#sourcedata" data-toggle="tab">Source data (<%= @sourcedata.size %>)</a></li>
   <li><a href="#owner-groups-resources" data-toggle="tab">Owner, groups, resources</a></li>
+  <li><a href="#provenance2" data-toggle="tab">Provenance graph</a></li>
+  <li><a href="#used-by" data-toggle="tab">Used by</a></li>
 </ul>
 
 <div class="tab-content">
@@ -133,6 +135,9 @@
       </tbody>
     </table>
   </div>
+  <div id="provenance2" class="tab-pane fade">
+    <%= raw(@prov_svg) %>
+  </div>
   <div id="jobs" class="tab-pane fade">
     <table class="topalign table table-bordered">
       <thead>

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


hooks/post-receive
-- 




More information about the arvados-commits mailing list