+# Copyright (C) The Arvados Authors. All rights reserved.
+#
+# SPDX-License-Identifier: AGPL-3.0
+
module PipelineInstancesHelper
def pipeline_jobs object=nil
def render_pipeline_job pj
pj[:progress_bar] = render partial: 'job_progress', locals: {:j => pj[:job]}
pj[:output_link] = link_to_if_arvados_object pj[:output]
- pj[:job_link] = link_to_if_arvados_object pj[:job][:uuid]
+ pj[:job_link] = link_to_if_arvados_object pj[:job][:uuid] if pj[:job]
pj
end
# Merge (started_at, finished_at) time range into the list of time ranges in
- # timestamps (timestamps must be sorted and non-overlapping).
+ # timestamps (timestamps must be sorted and non-overlapping).
# return the updated timestamps list.
def merge_range timestamps, started_at, finished_at
# in the comments below, 'i' is the entry in the timestamps array and 'j'
timestamps << [started_at, finished_at]
end
-
- # Accept a list of objects with [:started_at] and [:finshed_at] keys and
+
+ # Accept a list of objects with [:started_at] and [:finished_at] keys and
# merge overlapping ranges to compute the time spent running after periods of
# overlapping execution are factored out.
def determine_wallclock_runtime jobs
timestamps = []
jobs.each do |j|
- insert_at = 0
- started_at = j[:started_at]
- finished_at = (if j[:finished_at] then j[:finished_at] else Time.now end)
+ started_at = (j.started_at if j.respond_to?(:started_at)) || (j[:started_at] if j.is_a?(Hash))
+ finished_at = (j.finished_at if j.respond_to?(:finished_at)) || (j[:finished_at] if j.is_a?(Hash)) || Time.now
if started_at
timestamps = merge_range timestamps, started_at, finished_at
end
if round_to_min and seconds >= 30
minutes += 1
- end
+ end
if use_words
s = []
else
s = ""
if days > 0
- s += "#{days}<span class='time-label-divider'>d</span> "
+ s += "#{days}<span class='time-label-divider'>d</span>"
end
if (hours > 0)
s += "#{minutes}<span class='time-label-divider'>m</span>"
- if not round_to_min
+ if not round_to_min or (days == 0 and hours == 0 and minutes == 0)
s += "#{seconds}<span class='time-label-divider'>s</span>"
end
end
raw(s)
end
+ def render_unreadable_inputs_present
+ if current_user and controller.class.name.eql?('PipelineInstancesController') and unreadable_inputs_present?
+ raw('<div class="alert alert-danger unreadable-inputs-present">' +
+ '<p>One or more inputs provided are not readable by you. ' +
+ 'Please correct these before you can run the pipeline.</p></div>')
+ end
+ end
end