diff --git a/hutch.gemspec b/hutch.gemspec index f0f3d53f..f047d370 100644 --- a/hutch.gemspec +++ b/hutch.gemspec @@ -10,7 +10,7 @@ Gem::Specification.new do |gem| end gem.add_runtime_dependency 'carrot-top', '~> 0.0.7' gem.add_runtime_dependency 'multi_json', '~> 1.11.2' - gem.add_runtime_dependency 'activesupport', '>= 3.0' + gem.add_runtime_dependency 'activesupport', '~> 4.0' gem.add_development_dependency 'rspec', '~> 3.0' gem.add_development_dependency 'simplecov', '~> 0.7.1' gem.add_development_dependency 'yard', '~> 0.8' diff --git a/lib/hutch/error_handlers/airbrake.rb b/lib/hutch/error_handlers/airbrake.rb index ebfed5f7..bab3dc34 100644 --- a/lib/hutch/error_handlers/airbrake.rb +++ b/lib/hutch/error_handlers/airbrake.rb @@ -6,7 +6,8 @@ module ErrorHandlers class Airbrake include Logging - def handle(message_id, payload, consumer, ex) + def handle(properties, payload, consumer, ex) + message_id = properties.message_id prefix = "message(#{message_id || '-'}): " logger.error prefix + "Logging event to Airbrake" logger.error prefix + "#{ex.class} - #{ex.message}" diff --git a/lib/hutch/error_handlers/honeybadger.rb b/lib/hutch/error_handlers/honeybadger.rb index 402840c0..a91d93d1 100644 --- a/lib/hutch/error_handlers/honeybadger.rb +++ b/lib/hutch/error_handlers/honeybadger.rb @@ -6,7 +6,8 @@ module ErrorHandlers class Honeybadger include Logging - def handle(message_id, payload, consumer, ex) + def handle(properties, payload, consumer, ex) + message_id = properties.message_id prefix = "message(#{message_id || '-'}): " logger.error prefix + "Logging event to Honeybadger" logger.error prefix + "#{ex.class} - #{ex.message}" diff --git a/lib/hutch/error_handlers/logger.rb b/lib/hutch/error_handlers/logger.rb index cf10e167..cfc12f23 100644 --- a/lib/hutch/error_handlers/logger.rb +++ b/lib/hutch/error_handlers/logger.rb @@ -5,7 +5,8 @@ module ErrorHandlers class Logger include Logging - def handle(message_id, payload, consumer, ex) + def handle(properties, payload, consumer, ex) + message_id = properties.message_id prefix = "message(#{message_id || '-'}): " logger.error prefix + "error in consumer '#{consumer}'" logger.error prefix + "#{ex.class} - #{ex.message}" diff --git a/lib/hutch/error_handlers/sentry.rb b/lib/hutch/error_handlers/sentry.rb index bc5fcdaf..53c248ff 100644 --- a/lib/hutch/error_handlers/sentry.rb +++ b/lib/hutch/error_handlers/sentry.rb @@ -12,7 +12,8 @@ def initialize end end - def handle(message_id, payload, consumer, ex) + def handle(properties, payload, consumer, ex) + message_id = properties.message_id prefix = "message(#{message_id || '-'}): " logger.error prefix + "Logging event to Sentry" logger.error prefix + "#{ex.class} - #{ex.message}" diff --git a/lib/hutch/worker.rb b/lib/hutch/worker.rb index 2ccd51cf..b7cf7a2d 100644 --- a/lib/hutch/worker.rb +++ b/lib/hutch/worker.rb @@ -68,16 +68,16 @@ def handle_message(consumer, delivery_info, properties, payload) @broker.ack(delivery_info.delivery_tag) rescue => ex acknowledge_error(delivery_info, properties, @broker, ex) - handle_error(properties.message_id, payload, consumer, ex) + handle_error(properties, payload, consumer, ex) end def with_tracing(klass) Hutch::Config[:tracer].new(klass) end - def handle_error(message_id, payload, consumer, ex) + def handle_error(*args) Hutch::Config[:error_handlers].each do |backend| - backend.handle(message_id, payload, consumer, ex) + backend.handle(*args) end end diff --git a/spec/hutch/error_handlers/airbrake_spec.rb b/spec/hutch/error_handlers/airbrake_spec.rb index 95978dcc..65cd57a6 100644 --- a/spec/hutch/error_handlers/airbrake_spec.rb +++ b/spec/hutch/error_handlers/airbrake_spec.rb @@ -14,6 +14,7 @@ it "logs the error to Airbrake" do message_id = "1" + properties = OpenStruct.new(message_id: message_id) payload = "{}" consumer = double ex = error @@ -28,7 +29,7 @@ :cgi_data => ENV.to_hash, } expect(::Airbrake).to receive(:notify_or_ignore).with(ex, message) - error_handler.handle(message_id, payload, consumer, ex) + error_handler.handle(properties, payload, consumer, ex) end end end diff --git a/spec/hutch/error_handlers/honeybadger_spec.rb b/spec/hutch/error_handlers/honeybadger_spec.rb index d011f46b..1d7539ac 100644 --- a/spec/hutch/error_handlers/honeybadger_spec.rb +++ b/spec/hutch/error_handlers/honeybadger_spec.rb @@ -14,6 +14,7 @@ it "logs the error to Honeybadger" do message_id = "1" + properties = OpenStruct.new(message_id: message_id) payload = "{}" consumer = double ex = error @@ -30,7 +31,7 @@ } } expect(::Honeybadger).to receive(:notify_or_ignore).with(message) - error_handler.handle(message_id, payload, consumer, ex) + error_handler.handle(properties, payload, consumer, ex) end end end diff --git a/spec/hutch/error_handlers/logger_spec.rb b/spec/hutch/error_handlers/logger_spec.rb index 52e631f5..57a92ac3 100644 --- a/spec/hutch/error_handlers/logger_spec.rb +++ b/spec/hutch/error_handlers/logger_spec.rb @@ -4,12 +4,14 @@ let(:error_handler) { Hutch::ErrorHandlers::Logger.new } describe '#handle' do + let(:properties) { OpenStruct.new(message_id: "1") } + let(:payload) { "{}" } let(:error) { double(message: "Stuff went wrong", class: "RuntimeError", backtrace: ["line 1", "line 2"]) } it "logs three separate lines" do expect(Hutch::Logging.logger).to receive(:error).exactly(3).times - error_handler.handle("1", "{}", double, error) + error_handler.handle(properties, payload, double, error) end end end diff --git a/spec/hutch/error_handlers/sentry_spec.rb b/spec/hutch/error_handlers/sentry_spec.rb index 11e3c973..91c953f9 100644 --- a/spec/hutch/error_handlers/sentry_spec.rb +++ b/spec/hutch/error_handlers/sentry_spec.rb @@ -4,6 +4,8 @@ let(:error_handler) { Hutch::ErrorHandlers::Sentry.new } describe '#handle' do + let(:properties) { OpenStruct.new(message_id: "1") } + let(:payload) { "{}" } let(:error) do begin raise "Stuff went wrong" @@ -13,8 +15,8 @@ end it "logs the error to Sentry" do - expect(Raven).to receive(:capture_exception).with(error, extra: { payload: "{}" }) - error_handler.handle("1", "{}", double, error) + expect(Raven).to receive(:capture_exception).with(error, extra: { payload: payload }) + error_handler.handle(properties, payload, double, error) end end end