class Flows::Plugin::Profiler::Report::Tree::CalculatedNode
@api private
Constants
- MICROSECONDS_IN_MILLISECOND
Attributes
children[R]
Public Class Methods
new(node)
click to toggle source
# File lib/flows/plugin/profiler/report/tree/calculated_node.rb, line 12 def initialize(node) @node = node @children = node.children .map { |child| self.class.new(child) } .sort_by(&:total_ms) .reverse end
Public Instance Methods
avg_ms()
click to toggle source
# File lib/flows/plugin/profiler/report/tree/calculated_node.rb, line 32 def avg_ms @avg_ms ||= total_ms / count end
avg_self_ms()
click to toggle source
# File lib/flows/plugin/profiler/report/tree/calculated_node.rb, line 52 def avg_self_ms @avg_self_ms ||= total_self_ms / count end
children_ms()
click to toggle source
# File lib/flows/plugin/profiler/report/tree/calculated_node.rb, line 36 def children_ms @children_ms ||= children.map(&:total_ms).sort.sum end
count()
click to toggle source
# File lib/flows/plugin/profiler/report/tree/calculated_node.rb, line 24 def count @count ||= @node.executions.count end
group_by_subject()
click to toggle source
:reek: DuplicateMethodCall :reek: NestedIterators
# File lib/flows/plugin/profiler/report/tree/calculated_node.rb, line 76 def group_by_subject @group_by_subject ||= ( [children.group_by(&:subject)] + children.map(&:group_by_subject) ).each_with_object({}) do |group, result| group.each do |subject, nodes| result[subject] ||= [] result[subject] += nodes end end end
subject()
click to toggle source
# File lib/flows/plugin/profiler/report/tree/calculated_node.rb, line 20 def subject @node.subject end
to_h(root_node = self)
click to toggle source
# File lib/flows/plugin/profiler/report/tree/calculated_node.rb, line 56 def to_h(root_node = self) # rubocop:disable Metrics/MethodLength @to_h ||= { subject: subject, count: count, total_ms: total_ms, total_percentage: total_percentage(root_node), total_self_ms: total_self_ms, total_self_percentage: total_self_percentage(root_node), avg_ms: avg_ms, avg_self_ms: avg_self_ms, nested: children.map { |node| node.to_h(root_node) } } end
to_s(root_node = self)
click to toggle source
# File lib/flows/plugin/profiler/report/tree/calculated_node.rb, line 70 def to_s(root_node = self) @to_s ||= (base_text_list(root_node) + childeren_text_list(root_node)).join("\n") end
total_ms()
click to toggle source
# File lib/flows/plugin/profiler/report/tree/calculated_node.rb, line 28 def total_ms @total_ms ||= @node.executions.sort.sum / MICROSECONDS_IN_MILLISECOND end
total_percentage(root_node = self)
click to toggle source
# File lib/flows/plugin/profiler/report/tree/calculated_node.rb, line 48 def total_percentage(root_node = self) @total_percentage ||= total_ms / root_node.children_ms * 100.0 end
total_self_ms()
click to toggle source
# File lib/flows/plugin/profiler/report/tree/calculated_node.rb, line 40 def total_self_ms @total_self_ms ||= total_ms - children_ms end
total_self_percentage(root_node = self)
click to toggle source
# File lib/flows/plugin/profiler/report/tree/calculated_node.rb, line 44 def total_self_percentage(root_node = self) @total_self_percentage ||= total_self_ms / root_node.children_ms * 100.0 end
Private Instance Methods
base_text_list(root_node)
click to toggle source
# File lib/flows/plugin/profiler/report/tree/calculated_node.rb, line 89 def base_text_list(root_node) # rubocop:disable Metrics/MethodLength [ '', "- #{subject} -", "called: #{count} time(s)", "total execution time: #{total_ms.truncate(2)}ms", "total percentage: #{total_percentage(root_node).truncate(2)}%", "total self execution time: #{total_self_ms.truncate(2)}ms", "total self percentage: #{total_self_percentage(root_node).truncate(2)}%", "average execution time: #{avg_ms.truncate(2)}ms", "average self execution time: #{avg_self_ms.truncate(2)}ms" ] end
childeren_text_list(root_node)
click to toggle source
# File lib/flows/plugin/profiler/report/tree/calculated_node.rb, line 103 def childeren_text_list(root_node) return [] if @children.empty? children.map { |node| node.to_s(root_node) } .join("\n") .split("\n") .map { |str| "| #{str}" } end