Module: ActiveRecordTracer

Defined in:
lib/active_record_tracer.rb,
lib/active_record_tracer/report.rb,
lib/active_record_tracer/version.rb,
lib/active_record_tracer/reporter.rb

Defined Under Namespace

Classes: Report, Reporter

Constant Summary collapse

VERSION =
"0.1.0"

Class Method Summary collapse

Class Method Details

.backtrace_cleanerProc

Backtrace cleaner to use when cleaning backtraces.

It will use 'Rails.backtrace_cleaner' by default if it is available.

Returns:

  • (Proc)


61
62
63
64
65
66
67
68
# File 'lib/active_record_tracer.rb', line 61

def self.backtrace_cleaner
  @backtrace_cleaner ||=
    if defined?(Rails.backtrace_cleaner)
      ->(backtrace) { Rails.backtrace_cleaner.clean(backtrace) }
    else
      ->(backtrace) { backtrace }
    end
end

.backtrace_cleaner=(value) ⇒ Object

Set backtrace cleaner to be used when cleaning backtraces.

Parameters:

  • value (Proc, ActiveSupport::BacktraceCleaner)


74
75
76
77
78
79
80
81
# File 'lib/active_record_tracer.rb', line 74

def self.backtrace_cleaner=(value)
  @backtrace_cleaner =
    if value.is_a?(Proc)
      value
    else
      ->(backtrace) { value.clean(backtrace) }
    end
end

.report(**options) ⇒ ActiveRecordTracer::Report

Helper for running against block and generating a report.

Examples:

report = ActiveRecordTracer.report(top: 20) do
  # ... generate SQL queries ...
end
report.pretty_print

Parameters:

  • options (Hash)

    a customizable set of options

Options Hash (**options):

  • :top (Integer) — default: 50

    max number of entries to output

  • :backtrace_lines (Integer, nil) — default: 5

    max number of backtrace lines to print. Generating backtrace-related reports is not always needed and can be costly - set it to '0' or 'nil' to skip it.

  • :ignore_cached_queries (Boolean) — default: false

    whether to ignore cached queries

  • :ignore_schema_queries (Boolean) — default: true

    whether to ignore schema queries

Returns:



25
26
27
28
29
30
31
# File 'lib/active_record_tracer.rb', line 25

def self.report(**options)
  start(**options)
  yield
  stop
ensure
  stop
end

.start(**options) ⇒ void

This method returns an undefined value.

Start collecting data for the report.

See Also:



38
39
40
41
42
43
# File 'lib/active_record_tracer.rb', line 38

def self.start(**options)
  unless Reporter.current
    Reporter.current = Reporter.new(**options)
    Reporter.current.start
  end
end

.stopActiveRecordTracer::Report

Stop collecting data for the report.



49
50
51
52
53
# File 'lib/active_record_tracer.rb', line 49

def self.stop
  Reporter.current&.stop
ensure
  Reporter.current = nil
end