Sha256: f9017967e869c66b29011a077e8df584ea51f20d2edcf76839d48743ef3d4a34

Contents?: true

Size: 1.27 KB

Versions: 1

Compression:

Stored size: 1.27 KB

Contents

# frozen_string_literal: true

module RailsSpotlight
  module Middlewares
    module Handlers
      class SqlActionHandler < BaseActionHandler
        def execute
          if ActiveSupport.const_defined?('ExecutionContext')
            ActiveSupport::Notifications.subscribed(method(:logger), 'sql.active_record', monotonic: true) do
              ActiveSupport::ExecutionContext.set(rails_spotlight: request_id) do
                self.result = ActiveRecord::Base.connection.exec_query(query)
              end
            end
          else
            ActiveSupport::Notifications.subscribed(method(:logger), 'sql.active_record') do
              self.result = ActiveRecord::Base.connection.exec_query(query)
            end
          end
        end

        private

        attr_accessor :result

        def json_response_body
          { result: result, logs: logs }
        end

        def logger(_, started, finished, unique_id, payload)
          logs << { time: started, end: finished, unique_id: unique_id }.merge(
            payload.as_json(except: %i[connection method name filename line])
          )
        end

        def logs
          @logs ||= []
        end

        def query
          @query ||= json_request_body.fetch('query')
        end
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
rails_spotlight-0.1.4 lib/rails_spotlight/middlewares/handlers/sql_action_handler.rb