X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/0042e4b42d9f4d3900aefc68617cb28c5a61a522..7538d084fa8778289053f62a6fb8d3ea04868258:/apps/workbench/app/views/pipeline_instances/_show_components_running.html.erb diff --git a/apps/workbench/app/views/pipeline_instances/_show_components_running.html.erb b/apps/workbench/app/views/pipeline_instances/_show_components_running.html.erb index 9f46e3da1c..6fa409a1ce 100644 --- a/apps/workbench/app/views/pipeline_instances/_show_components_running.html.erb +++ b/apps/workbench/app/views/pipeline_instances/_show_components_running.html.erb @@ -1,66 +1,101 @@ - - - - - - - - - - - - - - - - - <% render_pipeline_jobs.each do |pj| %> - - - <% current_job = pj[:job] rescue nil %> - - - <% end %> - - - - -
- component - - 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'} %> -
- <%= pj[:name] %> - - <%= pj[:script] %> -
<%= pj[:script_version] %> -
- <%= render(partial: 'job_status_label', locals: { j: pj[:job] }) %> - - <%= pj[:progress_bar] %> - - <% if current_job.is_a? Job %> - <%= render partial: 'show_object_button', locals: {object: current_job, size: 'xs', link_text: 'Show job details'} %> - <% end %> - - <% if current_job.andand[:log] %> - <% fixup = /([a-f0-9]{32}\+\d+)(\+?.*)/.match(current_job[:log])%> - <% Collection.limit(1).where(portable_data_hash: fixup[1]).each do |c| %> - <% c.files.first.andand do |file| %> - <%= link_to url_for(controller: 'collections', action: 'show_file', uuid: current_job[:log], file: "#{file[0]}/#{file[1]}", disposition: 'inline', size: file[2]), class: 'btn btn-default btn-xs' do %> - Show log messages - <% end %> - <% end %> - <% end %> - <% end %> - - <% if pj[:output_uuid] %> - <%= link_to_if_arvados_object pj[:output_uuid], {thumbnail: true, link_text: raw(' Show output files')}, {class: 'btn btn-default btn-xs'} %> - <% elsif current_job.andand[:output] %> - <%= link_to_if_arvados_object current_job[:output], {thumbnail: true, link_text: raw(' Show output files')}, {class: 'btn btn-default btn-xs'} %> - <% end %> -
+<%# Summary %> + +
+ Current state: + <% if @object.state == "RunningOnServer" %> + Active + <% else %> + <%= @object.state %> + <% end %> +   +
+ +<% pipeline_jobs = render_pipeline_jobs %> +<% job_uuids = pipeline_jobs.map { |j| j[:job].andand[:uuid] }.compact %> + +<% if @object.state == 'Paused' %> +

+ This pipeline is paused. Jobs that are + already running will continue to run, but no new jobs will be submitted. +

+<% end %> + +<% tasks = JobTask.filter([['job_uuid', 'in', job_uuids]]).results %> +<% runningtime = determine_wallclock_runtime(pipeline_jobs.map {|j| j[:job]}.compact) %> + +

+ <% if @object.started_at %> + This pipeline started at <%= render_localized_date(@object.started_at) %>. + It + <% if @object.state == 'Complete' %> + completed in + <% elsif @object.state == 'Failed' %> + failed after + <% else %> + has been active for + <% end %> + + <% walltime = if @object.finished_at then + @object.finished_at - @object.started_at + else + Time.now - @object.started_at + end %> + + <%= if walltime > runningtime + render_runtime(walltime, true, false) + else + render_runtime(runningtime, true, false) + end %><% if @object.finished_at %> at <%= render_localized_date(@object.finished_at) %><% end %>. + <% else %> + This pipeline is <%= if @object.state.start_with? 'Running' then 'active' else @object.state.downcase end %>. + <% walltime = 0%> + <% end %> + + <% if @object.state == 'Failed' %> + Check the Log tab for more detail about why this pipeline failed. + <% end %> +

+ +

+ This pipeline + <% if @object.state.start_with? 'Running' %> + has run + <% else %> + ran + <% end %> + for + <% cputime = tasks.map { |task| + if task.started_at + (if task.finished_at then task.finished_at else Time.now() end) - task.started_at + else + 0 + end + }.reduce(:+) || 0 %> + <%= render_runtime(runningtime, true, false) %><% if (walltime - runningtime) > 0 %> + (<%= render_runtime(walltime - runningtime, true, false) %> queued)<% end %><% if cputime == 0 %>.<% else %> + and used + <%= render_runtime(cputime, true, false) %> + of CPU time (<%= (cputime/runningtime).round(1) %>⨯ scaling). + <% end %> +

+ +<%# Components %> + +<% + job_uuids = pipeline_jobs.collect {|j| j[:job][:uuid]}.compact + if job_uuids.any? + resource_class = resource_class_for_uuid(job_uuids.first, friendly_name: true) + preload_objects_for_dataclass resource_class, job_uuids + end + + job_collections = pipeline_jobs.collect {|j| j[:job][:output]}.compact + job_collections.concat pipeline_jobs.collect {|j| j[:job][:docker_image_locator]}.uniq.compact + job_collections_pdhs = job_collections.select {|x| !(m = CollectionsHelper.match(x)).nil?}.uniq.compact + job_collections_uuids = job_collections - job_collections_pdhs + preload_collections_for_objects job_collections_uuids if job_collections_uuids.any? + preload_for_pdhs job_collections_pdhs if job_collections_pdhs.any? +%> + +<% pipeline_jobs.each_with_index do |pj, i| %> + <%= render partial: 'running_component', locals: {tasks: tasks, pj: pj, i: i, expanded: false} %> +<% end %>