X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/2129d0fd84fa62a5498d9860f3307cd64dc2a704..cc527a74c89f44267c50a52194ec0560484a72a0:/apps/workbench/app/controllers/pipeline_instances_controller.rb diff --git a/apps/workbench/app/controllers/pipeline_instances_controller.rb b/apps/workbench/app/controllers/pipeline_instances_controller.rb index a42a734394..588cd0cfe1 100644 --- a/apps/workbench/app/controllers/pipeline_instances_controller.rb +++ b/apps/workbench/app/controllers/pipeline_instances_controller.rb @@ -3,25 +3,17 @@ class PipelineInstancesController < ApplicationController before_filter :find_objects_by_uuid, only: :compare include PipelineInstancesHelper - def show - @pipelines = [@object] - - if params[:compare] - PipelineInstance.where(uuid: params[:compare]).each do |p| - @pipelines << p - end - end - + def graph(pipelines) count = {} provenance = {} pips = {} n = 1 - @pipelines.each do |p| + pipelines.each do |p| collections = [] p.components.each do |k, v| - j = v[:job] + j = v[:job] || next uuid = j[:uuid].intern provenance[uuid] = j @@ -39,7 +31,7 @@ class PipelineInstancesController < ApplicationController pips[uuid] |= n end - Collection.where(uuid: collections).each do |c| + Collection.where(uuid: collections.compact).each do |c| uuid = c.uuid.intern provenance[uuid] = c pips[uuid] = 0 unless pips[uuid] != nil @@ -49,11 +41,26 @@ class PipelineInstancesController < ApplicationController n = n << 1 end + return provenance, pips + end + + def show + @pipelines = [@object] + + if params[:compare] + PipelineInstance.where(uuid: params[:compare]).each do |p| + @pipelines << p + end + end + + provenance, pips = graph(@pipelines) + @prov_svg = ProvenanceHelper::create_provenance_graph provenance, "provenance_svg", { :all_script_parameters => true, :combine_jobs => :script_and_version, :script_version_nodes => true, :pips => pips } + super end def compare @@ -91,7 +98,7 @@ class PipelineInstancesController < ApplicationController pj.each do |k,v| vstr = for_comparison v score[k] ||= {} - score[k][vstr] = (score[k][vstr.to_s] || 0) + 1 + score[k][vstr] = (score[k][vstr] || 0) + 1 highscore[k] ||= 0 if score[k][vstr] == highscore[k] # tie for first place = no "normal" @@ -112,6 +119,14 @@ class PipelineInstancesController < ApplicationController end end end + + provenance, pips = graph(@objects) + + @prov_svg = ProvenanceHelper::create_provenance_graph provenance, "provenance_svg", { + :all_script_parameters => true, + :combine_jobs => :script_and_version, + :script_version_nodes => true, + :pips => pips } end protected