Class: Crawlscope::ServerTiming::Summary

Inherits:
Object
  • Object
show all
Defined in:
lib/crawlscope/server_timing/summary.rb

Constant Summary collapse

WORST_PAGE_LIMIT =
10

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(pages) ⇒ Summary

Returns a new instance of Summary.



10
11
12
13
14
15
16
# File 'lib/crawlscope/server_timing/summary.rb', line 10

def initialize(pages)
  @pages = pages
  @timings = pages.filter_map do |page|
    timing = page.server_timing
    [page, timing] if timing.present?
  end
end

Instance Attribute Details

#pagesObject (readonly)

Returns the value of attribute pages.



8
9
10
# File 'lib/crawlscope/server_timing/summary.rb', line 8

def pages
  @pages
end

Instance Method Details

#coverageObject



52
53
54
# File 'lib/crawlscope/server_timing/summary.rb', line 52

def coverage
  @timings.size
end

#duration_pagesObject



22
23
24
# File 'lib/crawlscope/server_timing/summary.rb', line 22

def duration_pages
  @timings.count { |_page, timing| timing.any?(&:timed?) }
end

#invalid_countObject



26
27
28
# File 'lib/crawlscope/server_timing/summary.rb', line 26

def invalid_count
  @timings.sum { |_page, timing| timing.invalid_count }
end

#metricsObject



30
31
32
33
34
35
# File 'lib/crawlscope/server_timing/summary.rb', line 30

def metrics
  timed_metrics
    .group_by { |_page, metric| [metric.name, metric.description] }
    .map { |(name, description), samples| metric_summary(name, description, samples) }
    .sort_by { |metric| [-metric[:p95], -metric[:maximum], metric[:name]] }
end

#present?Boolean

Returns:

  • (Boolean)


18
19
20
# File 'lib/crawlscope/server_timing/summary.rb', line 18

def present?
  @timings.any?
end

#signalsObject



37
38
39
40
41
42
43
# File 'lib/crawlscope/server_timing/summary.rb', line 37

def signals
  all_metrics
    .reject { |_page, metric| metric.timed? }
    .group_by { |_page, metric| [metric.name, metric.description] }
    .map { |(name, description), samples| signal_summary(name, description, samples) }
    .sort_by { |signal| [-signal[:samples], signal[:name], signal[:description].to_s] }
end

#worst_pages(limit: WORST_PAGE_LIMIT) ⇒ Object



45
46
47
48
49
50
# File 'lib/crawlscope/server_timing/summary.rb', line 45

def worst_pages(limit: WORST_PAGE_LIMIT)
  @timings
    .filter_map { |page, timing| worst_metric(page, timing) }
    .min_by(limit) { |sample| [-sample[:metric].duration, sample[:page].url] }
    .sort_by { |sample| [-sample[:metric].duration, sample[:page].url] }
end