Module: RSpecTelemetry::Trace::Viewer::ReportView

Defined in:
lib/rspec_telemetry/trace/viewer/report_view.rb

Defined Under Namespace

Classes: Row

Constant Summary collapse

TITLES =
{examples: "slowest examples", factories: "factories by self time"}.freeze

Class Method Summary collapse

Class Method Details

.aggregate(document) ⇒ Object



65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
# File 'lib/rspec_telemetry/trace/viewer/report_view.rb', line 65

def self.aggregate(document)
  acc = FactoryAggregation::Accumulator.new
  document.events.each do |event|
    next unless event.op == "factory"

    fields = event.fields
    acc.add(
      factory: fields["factory"],
      strategy: fields["strategy"],
      duration_ms: fields["duration_ms"],
      self_duration_ms: fields["self_duration_ms"]
    )
  end

  acc
end

.detail(payload) ⇒ Object



51
52
53
54
55
56
57
58
59
60
61
62
63
# File 'lib/rspec_telemetry/trace/viewer/report_view.rb', line 51

def self.detail(payload)
  return [] unless payload.is_a?(FactoryAggregation::Stat)

  [
    "FACTORY #{payload.key}",
    "",
    "count: #{payload.count}",
    "self total: #{Format.ms(payload.self_total_ms)}  (children excluded)",
    "total: #{Format.ms(payload.total_ms)}  (children included)",
    "avg: #{Format.ms(payload.avg_ms)}",
    "max: #{Format.ms(payload.max_ms)}"
  ]
end

.dur(ms) ⇒ Object



82
# File 'lib/rspec_telemetry/trace/viewer/report_view.rb', line 82

def self.dur(ms) = (Format.ms(ms) || "-").rjust(8)

.example_rows(document) ⇒ Object



28
29
30
31
32
33
34
35
36
37
38
# File 'lib/rspec_telemetry/trace/viewer/report_view.rb', line 28

def self.example_rows(document)
  document.actions.sort_by { |action| -(action.duration_ms || 0.0) }.map do |action|
    tag = action.failed? ? " [#{action.status.upcase}]" : ""
    Row.new(
      text: "#{dur(action.duration_ms)}  #{action.label}#{tag}",
      style: action.failed? ? :error : :plain,
      source: action.source,
      payload: action
    )
  end
end

.factory_rows(document) ⇒ Object



40
41
42
43
44
45
46
47
48
49
# File 'lib/rspec_telemetry/trace/viewer/report_view.rb', line 40

def self.factory_rows(document)
  aggregate(document).top.map do |stat|
    Row.new(
      text: "#{dur(stat.self_total_ms)}  #{stat.key}  ×#{stat.count}  total #{Format.ms(stat.total_ms)}",
      style: :plain,
      source: nil,
      payload: stat
    )
  end
end

.rows(document, view) ⇒ Object



17
18
19
20
21
22
23
24
25
26
# File 'lib/rspec_telemetry/trace/viewer/report_view.rb', line 17

def self.rows(document, view)
  case view
  when :examples
    example_rows(document)
  when :factories
    factory_rows(document)
  else
    []
  end
end

.title(view) ⇒ Object



15
# File 'lib/rspec_telemetry/trace/viewer/report_view.rb', line 15

def self.title(view) = TITLES[view]