[ARVADOS] created: 1.3.0-1290-g1dd7a37a3
Git user
git at public.curoverse.com
Fri Jul 12 19:51:57 UTC 2019
at 1dd7a37a31234899a0a87e8287260538a99c62a8 (commit)
commit 1dd7a37a31234899a0a87e8287260538a99c62a8
Author: Lucas Di Pentima <ldipentima at veritasgenetics.com>
Date: Fri Jul 12 16:50:35 2019 -0300
15219: Tests for exception backtraces being included on the json log.
Arvados-DCO-1.1-Signed-off-by: Lucas Di Pentima <ldipentima at veritasgenetics.com>
diff --git a/services/api/test/functional/application_controller_test.rb b/services/api/test/functional/application_controller_test.rb
index b74ff0f41..175a8f71e 100644
--- a/services/api/test/functional/application_controller_test.rb
+++ b/services/api/test/functional/application_controller_test.rb
@@ -121,4 +121,16 @@ class ApplicationControllerTest < ActionController::TestCase
end
end
end
+
+ test "exceptions with backtraces get logged at exception_backtrace key" do
+ Group.stubs(:new).raises(Exception, 'Whoops')
+ Rails.logger.expects(:info).with(any_parameters) do |param|
+ param.include?('Whoops') and param.include?('"exception_backtrace":')
+ end
+ @controller = Arvados::V1::GroupsController.new
+ authorize_with :active
+ post :create, params: {
+ group: {},
+ }
+ end
end
commit f74bfc124cf23d6f8712e0d62448d066022f022d
Author: Lucas Di Pentima <ldipentima at veritasgenetics.com>
Date: Fri Jul 12 12:27:05 2019 -0300
15219: Logs exceptions with backtraces as part of the JSON log.
Arvados-DCO-1.1-Signed-off-by: Lucas Di Pentima <ldipentima at veritasgenetics.com>
diff --git a/services/api/app/controllers/application_controller.rb b/services/api/app/controllers/application_controller.rb
index d5bc3f35d..b23515dda 100644
--- a/services/api/app/controllers/application_controller.rb
+++ b/services/api/app/controllers/application_controller.rb
@@ -140,8 +140,13 @@ class ApplicationController < ActionController::Base
def render_error(e)
logger.error e.inspect
- if !e.is_a? RequestError and (e.respond_to? :backtrace and e.backtrace)
- logger.error e.backtrace.collect { |x| x + "\n" }.join('')
+ if e.respond_to? :backtrace and e.backtrace
+ # This will be cleared by lograge after adding it to the log.
+ # Usually lograge would get the exceptions, but in our case we're catching
+ # all of them with exception handlers that cannot re-raise them because they
+ # don't get propagated.
+ Thread.current[:exception] = e.inspect
+ Thread.current[:backtrace] = e.backtrace.collect { |x| x + "\n" }.join('')
end
if (@object.respond_to? :errors and
@object.errors.andand.full_messages.andand.any?)
diff --git a/services/api/config/initializers/lograge.rb b/services/api/config/initializers/lograge.rb
index 07dba3aef..9b422462b 100644
--- a/services/api/config/initializers/lograge.rb
+++ b/services/api/config/initializers/lograge.rb
@@ -13,6 +13,21 @@ Server::Application.configure do
client_ipaddr: event.payload[:client_ipaddr],
client_auth: event.payload[:client_auth],
}
+
+ # Lograge adds exceptions not being rescued to event.payload, but we're
+ # catching all errors on ApplicationController so we look for backtraces
+ # elsewhere.
+ if !Thread.current[:backtrace].nil?
+ payload.merge!(
+ {
+ exception: Thread.current[:exception],
+ exception_backtrace: Thread.current[:backtrace],
+ }
+ )
+ Thread.current[:exception] = nil
+ Thread.current[:backtrace] = nil
+ end
+
exceptions = %w(controller action format id)
params = event.payload[:params].except(*exceptions)
-----------------------------------------------------------------------
hooks/post-receive
--
More information about the arvados-commits
mailing list