18870: New script to help manage install
[arvados.git] / apps / workbench / app / views / pipeline_instances / _show_components.html.erb
index 099d4cd49cb877f4808aaab01e11137c2c135bbf..3fca07a21fe767b7396117776105b49bc773bc04 100644 (file)
-<% content_for :css do %>
+<%# Copyright (C) The Arvados Authors. All rights reserved.
 
-<% end %>
-
-<% template = PipelineTemplate.find(@object.pipeline_template_uuid) rescue nil %>
-
-<%= content_for :content_top do %>
-  <h2>
-    <%= render_editable_attribute @object, 'name', nil, { 'data-emptytext' => 'Unnamed pipeline' } %>
-  </h2>
-  <% if template %>
-  <h4>
-    From template:
-    <%= link_to_if_arvados_object template, friendly_name: true %>
-  </h4>
-  <% end %>
-<% end %>
-
-<% pipeline_job_uuids = [] %>
-
-<% if !@object.state.in? ['New', 'Ready', 'Paused'] %>
-<table class="table pipeline-components-table">
-  <colgroup>
-    <col style="width: 15%" />
-    <col style="width: 20%" />
-    <col style="width: 12%" />
-    <col style="width: 12%" />
-    <col style="width: 45%" />
-  </colgroup>
-  <thead>
-    <tr>
-      <th>
-        component
-      </th><th>
-        script, version
-      </th><th>
-        job
-        <%# format:'js' here helps browsers avoid using the cached js
-        content in html context (e.g., duplicate tab -> see
-        javascript) %>
-        <%= link_to '(refresh)', {format: :js}, {class: 'refresh hide', remote: true, method: 'get'} %>
-      </th><th>
-      </th><th>
-        output
-      </th>
-    </tr>
-  </thead>
-  <tbody>
-    <% render_pipeline_jobs.each do |pj| %>
-      <% if pj[:job].andand[:uuid]
-           pipeline_job_uuids << pj[:job][:uuid]
-         end %>
-    <tr>
-      <td>
-        <%= pj[:name] %>
-      </td><td>
-        <%= pj[:script] %>
-        <br /><span class="deemphasize"><%= pj[:script_version] %></span>
-      </td><td>
-        <%= pj[:progress_bar] %>
-        <% if @object.state == 'Complete' || @object.state == 'Failed' %>
-          <% if pj[:job].andand[:uuid] %>
-            <span class="deemphasize">
-            <%= link_to("..."+pj[:job][:uuid].last(15), job_url(id: pj[:job][:uuid])) %>
-            </span>
-
-            <% current_job = Job.find(pj[:job][:uuid]) rescue nil %>
-            <% if current_job.andand[:log] %>
-              <% fixup = /([a-f0-9]{32}\+\d+)(\+?.*)/.match(current_job[:log])%>
-              <% Collection.limit(1).where(uuid: fixup[1]).each do |c| %>
-                <% c.files.each do |file| %>
-                  <br/><span class="deemphasize">
-                  <a href="<%= collection_path(current_job[:log]) %>/<%= file[1] %>?disposition=inline&size=<%= file[2] %>">log</a>
-                  </span>
-                <% end %>
-              <% end %>
-            <% end %>
-          <% end %>
-        <% end %>
-      </td><td>
-        <%= render(partial: 'job_status_label',
-                               locals: { :j => pj[:job] }) %>
-      </td><td>
-        <%= link_to_if_arvados_object pj[:output], {:thumbnail => true} %>
-      </td>
-    </tr>
-    <% end %>
-  </tbody>
-  <tfoot>
-    <tr><td colspan="5"></td></tr>
-  </tfoot>
-</table>
-
-<% if @object.state == 'RunningOnServer' || @object.state == 'RunningOnClient' %>
-
-<% content_for :tab_line_buttons do %>
-  <%= form_tag @object, :method => :put do |f| %>
-
-    <%= hidden_field @object.class.to_s.underscore.singularize.to_sym, :state, :value => 'Paused' %>
-
-    <%= button_tag({class: 'btn btn-primary pull-right run-pipeline-button'}) do %>
-      Stop <i class="fa fa-fw fa-stop"></i>
-    <% end %>
-  <% end %>
-<% end %>
+SPDX-License-Identifier: AGPL-3.0 %>
 
-    <% if !pipeline_job_uuids.empty? %>
-      <h4>Log messages from running jobs</h4>
-      <% log_history = pipeline_log_history(pipeline_job_uuids) %>
-      <div id="pipeline_event_log_history_div">
-        <% log_history.each do |entry| %>
-          <%=entry%><br/>
-        <% end %>
-      </div>
-      <div class="arv-log-event-listener arv-log-event-handler-append-logs" id="pipeline_event_log_div" data-object-uuids="<%=pipeline_job_uuids.join(" ")%>"/>
-    <% end %>
-  <% end %>
+<% if !@object.state.in? ['New', 'Ready'] %>
 
-<% else %>    <%# State new or ready or paused %>
-  <% if @object.state == 'New' %>
-    <p>Please set the desired input parameters for the components of this pipeline.  Parameters highlighted in red are required.</p>
-  <% end %>
+  <%
+     job_uuids = @object.components.map { |k,j| j.is_a? Hash and j[:job].andand[:uuid] }.compact
+     throttle = 86486400000 # 1001 nights
+     %>
+  <div class="arv-log-refresh-control"
+       data-load-throttle="<%= throttle %>"
+       data-object-uuids="<%= @object.uuid %> <%= job_uuids.join(' ') %>"
+       ></div>
 
-  <% content_for :tab_line_buttons do %>
-    <%= form_tag @object, :method => :put do |f| %>
+  <%= render partial: 'work_units/show_component', locals: {wu: @object.work_unit(@object.name)} %>
 
-      <%= hidden_field @object.class.to_s.underscore.singularize.to_sym, :state, :value => 'RunningOnServer' %>
+<% else %>
+  <%# state is either New or Ready %>
+  <%= render_unreadable_inputs_present %>
 
-      <%= button_tag({class: 'btn btn-primary pull-right run-pipeline-button'}) do %>
-        Run <i class="fa fa-fw fa-play"></i>
-      <% end %>
-    <% end %>
-  <% end %>
+  <p><i>Here are all of the pipeline's components (jobs that will need to run in order to complete the pipeline). If you know what you're doing (or you're experimenting) you can modify these parameters before starting the pipeline. Usually, you only need to edit the settings presented on the "Inputs" tab above.</i></p>
 
-  <% if @object.state.in? ['New', 'Ready'] %>
-    <%= render partial: 'show_components_editable', locals: {editable: true} %>
-  <% else %>
-    <%= render partial: 'show_components_editable', locals: {editable: false} %>
-  <% end %>
+  <%= render_pipeline_components("editable", :json, editable: true) %>
 <% end %>