Sha256: 5c09a16f290566b0231c811a461cfa9f708fd577079f77b412c31502300eba23

Contents?: true

Size: 1.66 KB

Versions: 1

Compression:

Stored size: 1.66 KB

Contents

# frozen_string_literal: true

module Lograge
  module Sql
    # Module used to extend Lograge
    module Extension
      # Overrides `Lograge::RequestLogSubscriber#extract_request` do add SQL queries
      def extract_request(event, payload)
        super.merge!(extract_sql_queries)
      end

      # Collects all SQL queries stored in the Thread during request processing
      def extract_sql_queries
        sql_queries = Lograge::Sql.store[:lograge_sql_queries]
        return {} unless sql_queries

        Lograge::Sql.store[:lograge_sql_queries] = nil
        {
          sql_queries: Lograge::Sql.formatter.call(sql_queries),
          sql_queries_count: sql_queries.length
        }
      end
    end
  end
end

module Lograge
  # Log subscriber to replace ActiveRecord's default one
  class ActiveRecordLogSubscriber < ActiveSupport::LogSubscriber
    # Every time there's an SQL query, stores it into the Thread.
    # They'll later be access from the RequestLogSubscriber.
    def sql(event)
      ActiveRecord::LogSubscriber.runtime += event.duration
      return if event.payload[:name] == 'SCHEMA'

      Lograge::Sql.store[:lograge_sql_queries] ||= []
      Lograge::Sql.store[:lograge_sql_queries] << Lograge::Sql.extract_event.call(event)
    end
  end
end

if defined?(Lograge::RequestLogSubscriber)
  Lograge::RequestLogSubscriber.prepend Lograge::Sql::Extension
else
  Lograge::LogSubscribers::ActionController.prepend Lograge::Sql::Extension
end

ActiveSupport::LogSubscriber.log_subscribers.each do |subscriber|
  Lograge.unsubscribe(:active_record, subscriber) if subscriber.is_a?(ActiveRecord::LogSubscriber)
end

Lograge::ActiveRecordLogSubscriber.attach_to :active_record

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
lograge-sql-1.1.0 lib/lograge/sql/extension.rb