diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index f40e0c1e1..1fb787fe8 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -33,6 +33,10 @@ protected @exception = exception if exception.is_a?(::ActiveRecord::StatementInvalid) && exception.to_s =~ /statement timeout/ + if Rails.env.production? + NewRelic::Agent.notice_error(exception, :uri => request.request_uri, :referer => request.referer, :request_params => params, :custom_params => {:user_id => CurrentUser.user.id, :user_ip_addr => CurrentUser.ip_addr}) + end + @error_message = "The database timed out running your query." render :template => "static/error", :status => 500 elsif exception.is_a?(::ActiveRecord::RecordNotFound) diff --git a/config/initializers/active_record_extensions.rb b/config/initializers/active_record_extensions.rb index b139f3750..1908ef905 100644 --- a/config/initializers/active_record_extensions.rb +++ b/config/initializers/active_record_extensions.rb @@ -14,7 +14,10 @@ module Danbooru def with_timeout(n, default_value = nil) connection.execute("SET STATEMENT_TIMEOUT = #{n}") unless Rails.env == "test" yield - rescue ::ActiveRecord::StatementInvalid + rescue ::ActiveRecord::StatementInvalid => x + if Rails.env.production? + NewRelic::Agent.notice_error(x, :custom_params => {:user_id => CurrentUser.user.id, :user_ip_addr => CurrentUser.ip_addr}) + end return default_value ensure connection.execute("SET STATEMENT_TIMEOUT = #{CurrentUser.user.try(:statement_timeout) || 3_000}") unless Rails.env == "test"