[ARVADOS] updated: 2bb5930ca4562847f7f544fdd745acc3ce6784a7
git at public.curoverse.com
git at public.curoverse.com
Fri Jan 24 23:04:35 EST 2014
Summary of changes:
.../app/controllers/collections_controller.rb | 93 ++++++++++++++------
1 files changed, 67 insertions(+), 26 deletions(-)
via 2bb5930ca4562847f7f544fdd745acc3ce6784a7 (commit)
from 9ab992cca7091b621cb465694f6439b1e62604a7 (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 2bb5930ca4562847f7f544fdd745acc3ce6784a7
Author: Peter Amstutz <tetron at cosmos>
Date: Fri Jan 24 23:04:47 2014 -0500
Follows both jobs and links to show provenance for a collection
Collapses similar jobs into a single node by script name and version
Node hrefs work except for git hashes.
diff --git a/apps/workbench/app/controllers/collections_controller.rb b/apps/workbench/app/controllers/collections_controller.rb
index e7d29e4..c87d60b 100644
--- a/apps/workbench/app/controllers/collections_controller.rb
+++ b/apps/workbench/app/controllers/collections_controller.rb
@@ -56,49 +56,89 @@ class CollectionsController < ApplicationController
self.response_body = FileStreamer.new opts
end
- def generate_edges(gr, uuid, edge_added = false)
+ def describe_node(uuid)
+ rsc = ArvadosBase::resource_class_for_uuid uuid
+ "\"#{uuid}\" [label=\"#{rsc}\\n#{uuid}\",href=\"#{url_for rsc}/#{uuid}\"];"
+ end
+
+ def describe_script(job)
+ #"""\"#{job.script_version}\" [label=\"#{job.script}: #{job.script_version}\"];
+ # \"#{job.uuid}\" -> \"#{job.script_version}\" [label=\"script\"];"""
+ "\"#{job.uuid}\" [label=\"#{job.script}\\n#{job.script_version}\"];"
+ end
+
+ def job_uuid(job)
+ "#{job.script}\\n#{job.script_version}"
+ 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(gr, job, prefix, sp)
+ case sp
+ when Hash
+ sp.each do |k, v|
+ if prefix.size > 0
+ k = prefix + "::" + k.to_s
+ end
+ gr = script_param_edges(gr, job, k.to_s, v)
+ end
+ when Array
+ sp.each do |k|
+ gr = script_param_edges(gr, job, prefix, k)
+ end
+ else
+ m = collection_uuid(sp)
+ v = m if m
+ gr += "\"#{job_uuid(job)}\" -> \"#{v}\" [label=\" #{prefix}\"];"
+ gr = generate_edges(gr, v)
+ end
+ gr
+ end
+
+ def generate_edges(gr, uuid, edge_added = false)
+ m = collection_uuid(uuid)
if m
# uuid is a collection
- uuid = m[1]
- gr += "\"#{uuid}\" [href=\"#{collection_path uuid}\"];"
+ uuid = m
+ gr += describe_node(uuid)
Job.where(output: uuid).each do |job|
- gr += "\"#{job.uuid}\" [href=\"#{job_path job.uuid}\"];"
- gr += "\"#{uuid}\" -> \"#{job.uuid}\" [label=\" output\"];"
+ #gr += describe_node(job_uuid(job))
+ gr += "\"#{uuid}\" -> \"#{job_uuid(job)}\" [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 += describe_node(job_uuid(job))
+ gr += "\"#{uuid}\" -> \"#{job_uuid(job)}\" [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"
+
+ if rsc == 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
+ gr = script_param_edges(gr, job, "", job.script_parameters)
+ #gr += describe_script(job)
end
+ else
+ gr += describe_node(uuid)
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)
+ Link.where(head_uuid: uuid, link_class: "provenance").each do |link|
+ gr += describe_node(link.tail_uuid)
+ gr += "\"#{link.head_uuid}\" -> \"#{link.tail_uuid}\" [label=\" #{link.name}\", href=\"/links/#{link.uuid}\"];"
+ gr = generate_edges(gr, link.tail_uuid)
end
gr
@@ -151,9 +191,10 @@ class CollectionsController < ApplicationController
require 'open3'
- gr = "digraph {"
- gr += "node [fontsize=8];"
- gr += "edge [dir=back,fontsize=8];"
+ gr = """strict digraph {
+//rankdir=LR;
+node [fontsize=8,shape=box];
+edge [dir=back,fontsize=8];"""
gr = generate_edges(gr, @object.uuid)
-----------------------------------------------------------------------
hooks/post-receive
--
More information about the arvados-commits
mailing list