Module: HeapScope::Rails

Defined in:
lib/heapscope/rails.rb

Overview

Optional Rails helpers. Loaded explicitly: require "heapscope/rails"

Class Method Summary collapse

Class Method Details

.activerecord_populationObject



41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
# File 'lib/heapscope/rails.rb', line 41

def activerecord_population
  return {} unless defined?(::ActiveRecord::Base)

  counts = {}
  ObjectSpace.each_object(Class) do |klass|
    next unless klass < ::ActiveRecord::Base
    next if klass.abstract_class?

    counts[klass.name] = ObjectSpace.each_object(klass).count
  rescue StandardError
    next
  end
  counts
rescue StandardError
  {}
end

.install_middleware!(sample_rate: 0.01) ⇒ Object

Raises:



8
9
10
11
12
13
14
15
# File 'lib/heapscope/rails.rb', line 8

def install_middleware!(sample_rate: 0.01)
  raise CapabilityError, "Rails is not loaded" unless defined?(::Rails)

  ::Rails.application.config.middleware.use(
    HeapScope::Middleware,
    sample_rate: sample_rate
  )
end

.measure_action(controller:, action:, force_gc: true, &block) ⇒ Object

Raises:

  • (ArgumentError)


27
28
29
30
31
32
33
34
35
36
37
38
39
# File 'lib/heapscope/rails.rb', line 27

def measure_action(controller:, action:, force_gc: true, &block)
  raise ArgumentError, "block required" unless block_given?

  HeapScope.measure(
    force_gc: force_gc,
    metadata: {
      kind: "rails_action",
      controller: controller.to_s,
      action: action.to_s,
      label: "#{controller}##{action}"
    }, &block
  )
end

.request_retention(label: "request", cycles: 10, force_gc: true, &block) ⇒ Object

Raises:

  • (ArgumentError)


17
18
19
20
21
22
23
24
25
# File 'lib/heapscope/rails.rb', line 17

def request_retention(label: "request", cycles: 10, force_gc: true, &block)
  raise ArgumentError, "block required" unless block_given?

  HeapScope.retention_test(
    cycles: cycles,
    force_gc: force_gc,
    metadata: { kind: "rails_request", label: label }, &block
  )
end

.warn_if_autoloading!Object



58
59
60
61
62
63
64
65
66
67
# File 'lib/heapscope/rails.rb', line 58

def warn_if_autoloading!
  return unless defined?(::Rails)
  return unless ::Rails.respond_to?(:application)
  return unless ::Rails.env.development?

  HeapScope.config.log(
    :verbose,
    "Rails development autoloading can distort heap growth. Prefer warmups or cache_classes for experiments."
  )
end