Sha256: fa702e24cc70bcfdddf6c5b65bf3fd06864bd4a4779e09fea62fb3d2aac44a9b

Contents?: true

Size: 1.69 KB

Versions: 3

Compression:

Stored size: 1.69 KB

Contents

# frozen_string_literal: true

require_relative "wt_activerecord_index_spy/version"
require_relative "wt_activerecord_index_spy/aggregator"
require_relative "wt_activerecord_index_spy/query_analyser"
require_relative "wt_activerecord_index_spy/query_analyser/mysql"
require_relative "wt_activerecord_index_spy/query_analyser/postgres"
require_relative "wt_activerecord_index_spy/notification_listener"
require "logger"

# This is the top level module which requires everything
module WtActiverecordIndexSpy
  extend self

  attr_accessor :logger

  def aggregator
    @aggregator ||= Aggregator.new
  end

  def query_analyser
    @query_analyser ||= QueryAnalyser.new
  end

  # rubocop:disable Metrics/MethodLength
  def watch_queries(
    aggregator: self.aggregator,
    ignore_queries_originated_in_test_code: true,
    query_analyser: self.query_analyser
  )
    aggregator.reset

    notification_listener = NotificationListener.new(
      aggregator: aggregator,
      ignore_queries_originated_in_test_code: ignore_queries_originated_in_test_code,
      query_analyser: query_analyser
    )

    subscriber = ActiveSupport::Notifications
                 .subscribe("sql.active_record", notification_listener)

    return unless block_given?

    yield

    ActiveSupport::Notifications.unsubscribe(subscriber)
  end
  # rubocop:enable Metrics/MethodLength

  def export_html_results(file = nil, stdout: $stdout)
    aggregator.export_html_results(file, stdout: stdout)
  end

  def certain_results
    aggregator.certain_results
  end

  def results
    aggregator.results
  end

  def reset_results
    aggregator.reset
  end

  def boot
    @logger = Logger.new("/dev/null")
  end
end

WtActiverecordIndexSpy.boot

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
wt_activerecord_index_spy-0.4.1 lib/wt_activerecord_index_spy.rb
wt_activerecord_index_spy-0.4.0 lib/wt_activerecord_index_spy.rb
wt_activerecord_index_spy-0.3.0 lib/wt_activerecord_index_spy.rb