[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