Sha256: f8926b18f2121566f32f109857d6683ecfbe1c119948a109696829b549e1b563

Contents?: true

Size: 1.44 KB

Versions: 1

Compression:

Stored size: 1.44 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

Version data entries

1 entries across 1 versions & 1 rubygems

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