X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/8bbc3c48c7211b8bf497edcb0816a4b9bdd94d4c..4e32a5d047ab832e7399dedd7b5dd5f8fc364367:/apps/workbench/app/models/proxy_work_unit.rb diff --git a/apps/workbench/app/models/proxy_work_unit.rb b/apps/workbench/app/models/proxy_work_unit.rb index 95c88c0515..b7cc6a0f19 100644 --- a/apps/workbench/app/models/proxy_work_unit.rb +++ b/apps/workbench/app/models/proxy_work_unit.rb @@ -6,9 +6,10 @@ class ProxyWorkUnit < WorkUnit attr_accessor :my_children attr_accessor :unreadable_children - def initialize proxied, label + def initialize proxied, label, parent @lbl = label @proxied = proxied + @parent = parent end def label @@ -19,25 +20,39 @@ class ProxyWorkUnit < WorkUnit get(:uuid) end + def parent + @parent + end + def modified_by_user_uuid get(:modified_by_user_uuid) end + def owner_uuid + get(:owner_uuid) + end + def created_at t = get(:created_at) - t = Time.parse(t) if (t.andand.class == String) + t = Time.parse(t) if (t.is_a? String) t end def started_at t = get(:started_at) - t = Time.parse(t) if (t.andand.class == String) + t = Time.parse(t) if (t.is_a? String) + t + end + + def modified_at + t = get(:modified_at) + t = Time.parse(t) if (t.is_a? String) t end def finished_at t = get(:finished_at) - t = Time.parse(t) if (t.andand.class == String) + t = Time.parse(t) if (t.is_a? String) t end @@ -45,13 +60,15 @@ class ProxyWorkUnit < WorkUnit state = get(:state) if ["Running", "RunningOnServer", "RunningOnClient"].include? state "Running" + elsif state == 'New' + "Not started" else state end end def state_bootstrap_class - state = get(:state) + state = state_label case state when 'Complete' 'success' @@ -65,7 +82,7 @@ class ProxyWorkUnit < WorkUnit end def success? - state = get(:state) + state = state_label if state == 'Complete' true elsif state == 'Failed' or state == 'Cancelled' @@ -123,7 +140,7 @@ class ProxyWorkUnit < WorkUnit end def progress - state = get(:state) + state = state_label if state == 'Complete' return 1.0 elsif state == 'Failed' or state == 'Cancelled' @@ -149,6 +166,10 @@ class ProxyWorkUnit < WorkUnit [] end + def outputs + [] + end + def title "process" end @@ -157,31 +178,6 @@ class ProxyWorkUnit < WorkUnit @unreadable_children end - def readable? - resource_class = ArvadosBase::resource_class_for_uuid(uuid) - resource_class.where(uuid: [uuid]).first rescue nil - end - - def link_to_log - if state_label.in? ["Complete", "Failed", "Cancelled"] - lc = log_collection - if lc - logCollection = Collection.find? lc - if logCollection - ApplicationController.helpers.link_to("Log", "#{uri}#Log") - else - "Log unavailable" - end - end - elsif state_label == "Running" - if readable? - ApplicationController.helpers.link_to("Log", "#{uri}#Log") - else - "Log unavailable" - end - end - end - def walltime if state_label != "Queued" if started_at @@ -191,9 +187,15 @@ class ProxyWorkUnit < WorkUnit 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) * ((finished_at || Time.now()) - started_at) + (runtime_constraints.andand[:min_nodes] || 1).to_i * ((finished_at || Time.now()) - started_at) + else + 0 end end end @@ -204,14 +206,6 @@ class ProxyWorkUnit < WorkUnit end end - def show_child_summary - if state_label == "Running" - if child_summary - child_summary_str - end - end - end - def is_running? state_label == 'Running' end @@ -229,7 +223,7 @@ class ProxyWorkUnit < WorkUnit end def show_runtime - runningtime = ApplicationController.helpers.determine_wallclock_runtime(if children.any? then children else [@proxied] end) + runningtime = ApplicationController.helpers.determine_wallclock_runtime(if children.any? then children else [self] end) walltime = 0 if started_at @@ -284,20 +278,7 @@ class ProxyWorkUnit < WorkUnit 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) * ((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) * ((finished_at || Time.now()) - started_at) - end - end + cpu_time = cputime resp << ApplicationController.helpers.render_time(runningtime, false) if (walltime - runningtime) > 0 @@ -320,13 +301,27 @@ class ProxyWorkUnit < WorkUnit resp end + def log_object_uuids + [uuid] + end + + def live_log_lines(limit) + 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") } + end + protected - def get key - if @proxied.respond_to? key - @proxied.send(key) - elsif @proxied.is_a?(Hash) - @proxied[key] + def get key, obj=@proxied + if obj.respond_to? key + obj.send(key) + elsif obj.is_a?(Hash) + obj[key] || obj[key.to_s] end end end