+# Copyright (C) The Arvados Authors. All rights reserved.
+#
+# SPDX-License-Identifier: AGPL-3.0
+
class ProxyWorkUnit < WorkUnit
require 'time'
end
def cputime
- if state_label != "Queued"
+ if children.any?
+ children.map { |c|
+ c.cputime
+ }.reduce(:+) || 0
+ else
if started_at
(runtime_constraints.andand[:min_nodes] || 1).to_i * ((finished_at || Time.now()) - started_at)
+ else
+ 0
end
end
end
state_label == 'Failed'
end
- def show_runtime
- runningtime = ApplicationController.helpers.determine_wallclock_runtime(if children.any? then children else [self] end)
+ def runtime_contributors
+ contributors = []
+ if children.any?
+ children.each{|c| contributors << c.runtime_contributors}
+ else
+ contributors << self
+ end
+ contributors.flatten
+ end
+
+ def runningtime
+ ApplicationController.helpers.determine_wallclock_runtime runtime_contributors
+ end
+ def show_runtime
walltime = 0
+ running_time = runningtime
if started_at
walltime = if finished_at then (finished_at - started_at) else (Time.now - started_at) end
end
-
resp = '<p>'
if started_at
if state_label == 'Complete'
resp << "completed in "
elsif state_label == 'Failed'
- resp << "failed after "
+ resp << "failed after "
+ elsif state_label == 'Cancelled'
+ resp << "was cancelled after "
else
resp << "has been active for "
end
- if walltime > runningtime
- resp << ApplicationController.helpers.render_time(walltime, false)
- else
- resp << ApplicationController.helpers.render_time(runningtime, false)
- end
+ resp << ApplicationController.helpers.render_time(walltime, false)
if finished_at
resp << " at "
resp << "<p>"
if state_label
- resp << "It "
- if state_label == 'Running'
- resp << "has run"
- else
- resp << "ran"
- end
- resp << " for "
-
- cpu_time = 0
- if children.any?
- cpu_time = children.map { |c|
- if c.started_at
- (c.runtime_constraints.andand[:min_nodes] || 1).to_i * ((c.finished_at || Time.now()) - c.started_at)
- else
- 0
- end
- }.reduce(:+) || 0
- else
- if started_at
- cpu_time = (runtime_constraints.andand[:min_nodes] || 1).to_i * ((finished_at || Time.now()) - started_at)
- end
- end
+ resp << "It has runtime of "
+
+ cpu_time = cputime
- resp << ApplicationController.helpers.render_time(runningtime, false)
- if (walltime - runningtime) > 0
+ resp << ApplicationController.helpers.render_time(running_time, false)
+ if (walltime - running_time) > 0
resp << "("
- resp << ApplicationController.helpers.render_time(walltime - runningtime, false)
+ resp << ApplicationController.helpers.render_time(walltime - running_time, false)
resp << "queued)"
end
if cpu_time == 0
resp << " and used "
resp << ApplicationController.helpers.render_time(cpu_time, false)
resp << " of node allocation time ("
- resp << (cpu_time/runningtime).round(1).to_s
+ resp << (cpu_time/running_time).round(1).to_s
resp << "⨯ scaling)."
end
end
Log.where(object_uuid: log_object_uuids).
order("created_at DESC").
limit(limit).
+ with_count('none').
select { |log| log.properties[:text].is_a? String }.
reverse.
flat_map { |log| log.properties[:text].split("\n") }