Working on visualization of pipelines
authorPeter Amstutz <peter.amstutz@curoverse.com>
Wed, 29 Jan 2014 19:14:36 +0000 (14:14 -0500)
committerPeter Amstutz <peter.amstutz@curoverse.com>
Wed, 29 Jan 2014 19:14:36 +0000 (14:14 -0500)
apps/workbench/app/controllers/collections_controller.rb
apps/workbench/app/controllers/pipeline_instances_controller.rb
apps/workbench/app/views/pipeline_instances/show.html.erb

index dcf1d9102dde79da96ea60d08b32372c556c4eb9..3a1013a32cb4f4b8e73447c7b96d3fc6556c5c18 100644 (file)
@@ -58,7 +58,6 @@ class CollectionsController < ApplicationController
     if rsc
       "\"#{uuid}\" [label=\"#{rsc}\\n#{uuid}\",href=\"/#{rsc.to_s.underscore.pluralize rsc}/#{uuid}\"];"
     else
-      puts "error! #{uuid} #{rsc}"
       ""
     end
   end
@@ -77,7 +76,7 @@ class CollectionsController < ApplicationController
     end
   end
 
-  def self.script_param_edges(visited, job, prefix, sp)
+  def self.script_param_edges(visited, job, prefix, sp, opts)
     gr = ""
     if sp and not sp.empty?
       case sp
@@ -86,24 +85,24 @@ class CollectionsController < ApplicationController
           if prefix.size > 0
             k = prefix + "::" + k.to_s
           end
-          gr += CollectionsController::script_param_edges(visited, job, k.to_s, v)
+          gr += CollectionsController::script_param_edges(visited, job, k.to_s, v, opts)
         end
       when Array
         sp.each do |v|
-          gr += CollectionsController::script_param_edges(visited, job, prefix, v)
+          gr += CollectionsController::script_param_edges(visited, job, prefix, v, opts)
         end
       else
         m = collection_uuid(sp)
         if m
           gr += "\"#{job_uuid(job)}\" -> \"#{m}\" [label=\" #{prefix}\"];"
-          gr += CollectionsController::generate_provenance_edges(visited, m)
+          gr += CollectionsController::generate_provenance_edges(visited, m, opts)
         end
       end
     end
     gr
   end
 
-  def self.generate_provenance_edges(pdata, uuid)
+  def self.generate_provenance_edges(pdata, uuid, opts)
     gr = ""
     m = CollectionsController::collection_uuid(uuid)
     uuid = m if m
@@ -113,7 +112,7 @@ class CollectionsController < ApplicationController
     if (not uuid) or uuid.empty? \
       or (pdata[uuid] and pdata[uuid][:_visited])
 
-      puts "already visited #{uuid}"
+      #puts "already visited #{uuid}"
       return ""
     end
 
@@ -123,7 +122,7 @@ class CollectionsController < ApplicationController
       pdata[uuid][:_visited] = true
     end
 
-    puts "visiting #{uuid}"
+    #puts "visiting #{uuid}"
 
     if m  
       # uuid is a collection
@@ -146,7 +145,7 @@ class CollectionsController < ApplicationController
       if rsc == Job
         job = pdata[uuid]
         if job
-          gr += CollectionsController::script_param_edges(pdata, job, "", job[:script_parameters])
+          gr += CollectionsController::script_param_edges(pdata, job, "", job[:script_parameters], opts)
         end
       else
         gr += CollectionsController::describe_node(uuid)
@@ -157,25 +156,25 @@ class CollectionsController < ApplicationController
       if link[:head_uuid] == uuid.to_s and link[:link_class] == "provenance"
         gr += CollectionsController::describe_node(link[:tail_uuid])
         gr += "\"#{link[:head_uuid]}\" -> \"#{link[:tail_uuid]}\" [label=\" #{link[:name]}\", href=\"/links/#{link[:uuid]}\"];"
-        gr += CollectionsController::generate_provenance_edges(pdata, link[:tail_uuid])
+        gr += CollectionsController::generate_provenance_edges(pdata, link[:tail_uuid], opts)
       end
     end
 
-    puts "finished #{uuid}"
+    #puts "finished #{uuid}"
 
     gr
   end
 
-  def self.create_provenance_graph(pdata, uuid)
+  def self.create_provenance_graph(pdata, uuid, opts={})
     require 'open3'
     
     gr = """strict digraph {
 node [fontsize=8,shape=box];
 edge [dir=back,fontsize=8];"""
 
-    puts "pdata is #{pdata}"
+    #puts "pdata is #{pdata}"
 
-    gr += CollectionsController::generate_provenance_edges(pdata, uuid)
+    gr += CollectionsController::generate_provenance_edges(pdata, uuid, opts)
 
     gr += "}"
     svg = ""
index afb9949f4bf2686bb97d98dd4a2a2810831a5bab..79aade7e347217645a5c3b48e637616965af909b 100644 (file)
@@ -1,2 +1,27 @@
 class PipelineInstancesController < ApplicationController
+
+  def show
+    provenance = {}
+    somejob = nil
+    collections = []
+    @object.components.each do |k, v|
+      j = v[:job]
+      somejob = j[:uuid]
+      provenance[somejob.intern] = j
+      collections << j[:output]
+    end
+
+    puts collections
+    puts '---'
+
+    Collection.where(uuid: collections).each do |c|
+      puts c.uuid
+      provenance[c.uuid.intern] = c
+    end
+
+    PipelineInstance.where(uuid: @object.uuid).each do |u|
+      @prov_svg = CollectionsController::create_provenance_graph provenance, somejob
+    end
+  end
+
 end
index 74c090de024b4bfee8bfb3efdf4bfa6b982db071..2745e76f71db8d5ee9f046a894e2705b35507c0b 100644 (file)
@@ -28,6 +28,9 @@
     <% end %>
   </tbody>
 </table>
+
+<%= raw(@prov_svg) %>
+
 <pre>
 <%= JSON.pretty_generate(@object.attributes) rescue nil %>
 </pre>