X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/654d8fe3decc93b8eb986313cdb9070f22abdca6..921e5feb0deff2f1b420e867faf79a4ecd293350:/apps/workbench/app/views/work_units/_component_detail.html.erb diff --git a/apps/workbench/app/views/work_units/_component_detail.html.erb b/apps/workbench/app/views/work_units/_component_detail.html.erb index 45ae978692..20e3d4d2cf 100644 --- a/apps/workbench/app/views/work_units/_component_detail.html.erb +++ b/apps/workbench/app/views/work_units/_component_detail.html.erb @@ -1,16 +1,57 @@ +<%# Copyright (C) The Arvados Authors. All rights reserved. + +SPDX-License-Identifier: AGPL-3.0 %> + +<% + collections = [current_obj.outputs, current_obj.docker_image].flatten.compact.uniq + collections_pdhs = collections.select {|x| !CollectionsHelper.match(x).nil?}.uniq.compact + collections_uuids = collections - collections_pdhs + preload_collections_for_objects collections_uuids if collections_uuids.any? + preload_links_for_objects collections_uuids if collections_uuids.any? + + preload_objects_for_dataclass(Repository, [current_obj.repository], :name) if current_obj.repository + + # if container_X, preload mounted collections + if @object.is_a? Container or @object.is_a? ContainerRequest + # get any collections in mounts + mounts = current_obj.send(:mounts) if current_obj.respond_to?(:mounts) + input_obj = mounts.andand[:"/var/lib/cwl/cwl.input.json"].andand[:content] + if input_obj + input_obj.to_s.scan(/([0-9a-f]{32}\+\d+)/).each {|cs| collections_pdhs += cs} + end + + command = current_obj.send(:command) if current_obj.respond_to?(:command) + if command + command.to_s.scan(/([0-9a-f]{32}\+\d+)/).each {|cs| collections_pdhs += cs} + end + end + + collections_pdhs.compact.uniq + preload_for_pdhs collections_pdhs if collections_pdhs.any? + preload_links_for_objects collections_pdhs if collections_pdhs.any? +%> +
-
+
<% if current_obj.uuid.nil? %> No <%= current_obj.title %> has been submitted yet. <% else %> - - <% keys = [:uuid, :modified_by_user_uuid, :created_at, :started_at, :finished_at, :container_uuid, :priority] %> - <% keys << :outputs if @object.uuid == current_obj.uuid %> +
+ <% keys = [:uuid, :modified_by_user_uuid, :created_at, :started_at, :finished_at, :container_uuid] %> + <% keys << :log_collection if @object.uuid != current_obj.uuid %> + <% keys << :outputs %> <% keys.each do |k| %> - <% val = current_obj.send(k) if current_obj.respond_to?(k) %> - <% has_val = val %> - <% has_val = val.andand.any? if k == :outputs %> + <% + val = current_obj.send(k) if current_obj.respond_to?(k) + if k == :outputs + has_val = val.andand.any? + elsif k == :log_collection and current_obj.state_label == "Running" + has_val = true + else + has_val = val + end + %> <% if has_val %>
@@ -29,6 +70,8 @@ <% else %> <%= render partial: 'work_units/show_outputs', locals: {id: current_obj.uuid, outputs: val, align:""} %> <% end %> + <% elsif k == :log_collection %> + <%= render partial: 'work_units/show_log_link', locals: {wu: current_obj} %> <% else %> <%= val %> <% end %> @@ -40,17 +83,18 @@ <% end %>
- +
<% # link to repo tree/file only if the repo is readable and the commit is a sha1 repo = (/^[0-9a-f]{40}$/ =~ current_obj.script_version and - object_for_dataclass(Repository, current_obj.repository, :by_name)) + current_obj.repository and + object_for_dataclass(Repository, current_obj.repository, :name)) repo = nil unless repo.andand.http_fetch_url %> <% [:script, :repository, :script_version, :supplied_script_version, :nondeterministic, - :command, :cwd, :environment, :mounts, :output_path].each do |k| %> + :priority, :runtime_constraints, :requesting_container_uuid].each do |k| %> <% val = current_obj.send(k) if current_obj.respond_to?(k) %> <% if val %> - + @@ -61,6 +105,10 @@ <%= link_to val, show_repository_blob_path(id: repo.uuid, commit: current_obj.script_version, path: 'crunch_scripts/'+current_obj.script) %> <% elsif repo and k == :script_version %> <%= link_to val, show_repository_commit_path(id: repo.uuid, commit: current_obj.script_version) %> + <% elsif k == :runtime_constraints and val.any? %> + <%= render partial: 'work_units/show_table_data', locals: {id: current_obj.uuid, name: k, data_map: val} %> + <% elsif k.to_s.end_with? 'uuid' %> + <%= link_to_arvados_object_if_readable(val, val, friendly_name: true) %> <% else %> <%= val %> <% end %> @@ -68,6 +116,24 @@ <% end %> <% end %> + + <% + mounts = current_obj.send(:mounts) if current_obj.respond_to?(:mounts) + mount_wf = mounts.andand[:"/var/lib/cwl/workflow.json"] + mount_wf = mount_wf[5..-1] if mount_wf.andand.is_a?(String) and mount_wf.start_with?('keep:') + mount_wf_cls = resource_class_for_uuid(mount_wf) if mount_wf + %> + + <% if mount_wf_cls == Collection %> + + + <% end %> + + <% if current_obj.runtime_constraints.andand[:docker_image] and current_obj.docker_image %>
<%= k.to_s %>:
+ workflow.json: + + <%= link_to_if_arvados_object mount_wf, friendly_name: true %> +
@@ -99,11 +165,53 @@ <% end %>
+ +
+ + + + <% [:command].each do |k| %> + <% val = current_obj.send(k) if current_obj.respond_to?(k) %> + <% if val %> + + + + + <% end %> + <% end %> + + <% + mounts = current_obj.send(:mounts) if current_obj.respond_to?(:mounts) + input_obj = mounts.andand[:"/var/lib/cwl/cwl.input.json"].andand[:content] + mnt_inputs = JSON.pretty_generate(input_obj) if input_obj + %> + <% if mnt_inputs %> + + + + + <% end %> +
+ <%= k.to_s %>: + + <% if k == :command %> + <% val = JSON.pretty_generate(val) %> + <%= render partial: 'show_text_with_locators', locals: {data_height: 200, text_data: val} %> + <% else %> + <%= val %> + <% end %> +
+ cwl.input.json: + + <%= render partial: 'show_text_with_locators', locals: {data_height: 400, text_data: mnt_inputs} %> +
+
+ <% if current_obj.parameters and !current_obj.parameters.empty? %>
-
+

script_parameters:

<%= JSON.pretty_generate(current_obj.parameters) rescue nil %>