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
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
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'
end
def success?
- state = get(:state)
+ state = state_label
if state == 'Complete'
true
elsif state == 'Failed' or state == 'Cancelled'
end
def progress
- state = get(:state)
+ state = state_label
if state == 'Complete'
return 1.0
elsif state == 'Failed' or state == 'Cancelled'
end
def outputs
- items = []
- children.each do |c|
- items << c.output if c.output
- end
- if !items.any?
- items << get(:output) if get(:output)
- end
- items
+ []
end
def title
@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
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
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
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