lib/airbrake/rails/active_record_subscriber.rb
# frozen_string_literal: true require 'airbrake/rails/event' require 'airbrake/rails/backtrace_cleaner' module Airbrake module Rails # ActiveRecordSubscriber sends SQL information, including performance data. # # @since v8.1.0 class ActiveRecordSubscriber def call(*args) return unless Airbrake::Config.instance.query_stats routes = Airbrake::Rack::RequestStore[:routes] return if !routes || routes.none? event = Airbrake::Rails::Event.new(*args) frame = last_caller routes.each do |route, params| Airbrake.notify_query( route: route, method: params[:method], query: event.sql, func: frame[:function], file: frame[:file], line: frame[:line], timing: event.duration, time: event.time, ) end end private def last_caller exception = StandardError.new exception.set_backtrace( Airbrake::Rails::BacktraceCleaner.clean(Kernel.caller), ) Airbrake::Backtrace.parse(exception).first || {} end end end end