hutch 0.24.0 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (41) hide show
  1. checksums.yaml +5 -5
  2. data/.travis.yml +18 -13
  3. data/CHANGELOG.md +227 -4
  4. data/Gemfile +3 -3
  5. data/LICENSE +1 -0
  6. data/README.md +94 -94
  7. data/bin/ci/before_build.sh +20 -0
  8. data/bin/ci/install_on_debian.sh +17 -0
  9. data/hutch.gemspec +5 -5
  10. data/lib/hutch.rb +8 -4
  11. data/lib/hutch/broker.rb +37 -10
  12. data/lib/hutch/cli.rb +22 -11
  13. data/lib/hutch/config.rb +12 -0
  14. data/lib/hutch/consumer.rb +32 -2
  15. data/lib/hutch/error_handlers.rb +1 -1
  16. data/lib/hutch/error_handlers/airbrake.rb +20 -2
  17. data/lib/hutch/error_handlers/base.rb +15 -0
  18. data/lib/hutch/error_handlers/honeybadger.rb +28 -14
  19. data/lib/hutch/error_handlers/logger.rb +7 -2
  20. data/lib/hutch/error_handlers/rollbar.rb +28 -0
  21. data/lib/hutch/error_handlers/sentry.rb +9 -2
  22. data/lib/hutch/publisher.rb +1 -1
  23. data/lib/hutch/tracers.rb +0 -1
  24. data/lib/hutch/version.rb +1 -2
  25. data/lib/hutch/waiter.rb +1 -1
  26. data/lib/hutch/worker.rb +30 -1
  27. data/spec/hutch/broker_spec.rb +34 -0
  28. data/spec/hutch/cli_spec.rb +13 -0
  29. data/spec/hutch/consumer_spec.rb +82 -4
  30. data/spec/hutch/error_handlers/airbrake_spec.rb +19 -0
  31. data/spec/hutch/error_handlers/honeybadger_spec.rb +22 -1
  32. data/spec/hutch/error_handlers/logger_spec.rb +11 -0
  33. data/spec/hutch/error_handlers/rollbar_spec.rb +45 -0
  34. data/spec/hutch/error_handlers/sentry_spec.rb +15 -0
  35. data/spec/hutch/waiter_spec.rb +2 -2
  36. data/spec/hutch/worker_spec.rb +1 -1
  37. metadata +22 -17
  38. data/lib/hutch/error_handlers/opbeat.rb +0 -24
  39. data/lib/hutch/tracers/opbeat.rb +0 -37
  40. data/spec/hutch/error_handlers/opbeat_spec.rb +0 -22
  41. data/spec/tracers/opbeat_spec.rb +0 -44
@@ -19,4 +19,19 @@ describe Hutch::ErrorHandlers::Sentry do
19
19
  error_handler.handle(properties, payload, double, error)
20
20
  end
21
21
  end
22
+
23
+ describe '#handle_setup_exception' do
24
+ let(:error) do
25
+ begin
26
+ raise "Stuff went wrong during setup"
27
+ rescue RuntimeError => err
28
+ err
29
+ end
30
+ end
31
+
32
+ it "logs the error to Sentry" do
33
+ expect(Raven).to receive(:capture_exception).with(error)
34
+ error_handler.handle_setup_exception(error)
35
+ end
36
+ end
22
37
  end
@@ -22,7 +22,7 @@ RSpec.describe Hutch::Waiter do
22
22
  end
23
23
  end
24
24
 
25
- context 'a TERM signal is received' do
25
+ context 'a TERM signal is received', if: !defined?(JRUBY_VERSION) do
26
26
  it 'logs that hutch is stopping' do
27
27
  expect(Hutch::Logging.logger).to receive(:info)
28
28
  .with('caught SIGTERM, stopping hutch...')
@@ -32,7 +32,7 @@ RSpec.describe Hutch::Waiter do
32
32
  end
33
33
  end
34
34
 
35
- context 'a INT signal is received' do
35
+ context 'a INT signal is received', if: !defined?(JRUBY_VERSION) do
36
36
  it 'logs that hutch is stopping' do
37
37
  expect(Hutch::Logging.logger).to receive(:info)
38
38
  .with('caught SIGINT, stopping hutch...')
@@ -97,7 +97,7 @@ describe Hutch::Worker do
97
97
  it 'requeues the message' do
98
98
  allow(consumer_instance).to receive(:process).and_raise('failed')
99
99
  requeuer = double
100
- allow(requeuer).to receive(:handle).ordered { |delivery_info, properties, broker, e|
100
+ allow(requeuer).to receive(:handle) { |delivery_info, properties, broker, e|
101
101
  broker.requeue delivery_info.delivery_tag
102
102
  true
103
103
  }
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hutch
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.24.0
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Harry Marr
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-02-01 00:00:00.000000000 Z
11
+ date: 2020-04-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bunny
@@ -16,14 +16,20 @@ dependencies:
16
16
  requirements:
17
17
  - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: 2.6.3
19
+ version: '2.15'
20
+ - - "<"
21
+ - !ruby/object:Gem::Version
22
+ version: '2.16'
20
23
  type: :runtime
21
24
  prerelease: false
22
25
  version_requirements: !ruby/object:Gem::Requirement
23
26
  requirements:
24
27
  - - ">="
25
28
  - !ruby/object:Gem::Version
26
- version: 2.6.3
29
+ version: '2.15'
30
+ - - "<"
31
+ - !ruby/object:Gem::Version
32
+ version: '2.16'
27
33
  - !ruby/object:Gem::Dependency
28
34
  name: carrot-top
29
35
  requirement: !ruby/object:Gem::Requirement
@@ -44,14 +50,14 @@ dependencies:
44
50
  requirements:
45
51
  - - "~>"
46
52
  - !ruby/object:Gem::Version
47
- version: '1.12'
53
+ version: '1.14'
48
54
  type: :runtime
49
55
  prerelease: false
50
56
  version_requirements: !ruby/object:Gem::Requirement
51
57
  requirements:
52
58
  - - "~>"
53
59
  - !ruby/object:Gem::Version
54
- version: '1.12'
60
+ version: '1.14'
55
61
  - !ruby/object:Gem::Dependency
56
62
  name: activesupport
57
63
  requirement: !ruby/object:Gem::Requirement
@@ -61,7 +67,7 @@ dependencies:
61
67
  version: '4.2'
62
68
  - - "<"
63
69
  - !ruby/object:Gem::Version
64
- version: '6'
70
+ version: '7'
65
71
  type: :runtime
66
72
  prerelease: false
67
73
  version_requirements: !ruby/object:Gem::Requirement
@@ -71,7 +77,7 @@ dependencies:
71
77
  version: '4.2'
72
78
  - - "<"
73
79
  - !ruby/object:Gem::Version
74
- version: '6'
80
+ version: '7'
75
81
  description: Hutch is a Ruby library for enabling asynchronous inter-service communication
76
82
  using RabbitMQ.
77
83
  email:
@@ -91,6 +97,8 @@ files:
91
97
  - LICENSE
92
98
  - README.md
93
99
  - Rakefile
100
+ - bin/ci/before_build.sh
101
+ - bin/ci/install_on_debian.sh
94
102
  - bin/hutch
95
103
  - examples/consumer.rb
96
104
  - examples/producer.rb
@@ -107,9 +115,10 @@ files:
107
115
  - lib/hutch/consumer.rb
108
116
  - lib/hutch/error_handlers.rb
109
117
  - lib/hutch/error_handlers/airbrake.rb
118
+ - lib/hutch/error_handlers/base.rb
110
119
  - lib/hutch/error_handlers/honeybadger.rb
111
120
  - lib/hutch/error_handlers/logger.rb
112
- - lib/hutch/error_handlers/opbeat.rb
121
+ - lib/hutch/error_handlers/rollbar.rb
113
122
  - lib/hutch/error_handlers/sentry.rb
114
123
  - lib/hutch/exceptions.rb
115
124
  - lib/hutch/logging.rb
@@ -120,7 +129,6 @@ files:
120
129
  - lib/hutch/tracers.rb
121
130
  - lib/hutch/tracers/newrelic.rb
122
131
  - lib/hutch/tracers/null_tracer.rb
123
- - lib/hutch/tracers/opbeat.rb
124
132
  - lib/hutch/version.rb
125
133
  - lib/hutch/waiter.rb
126
134
  - lib/hutch/worker.rb
@@ -133,7 +141,7 @@ files:
133
141
  - spec/hutch/error_handlers/airbrake_spec.rb
134
142
  - spec/hutch/error_handlers/honeybadger_spec.rb
135
143
  - spec/hutch/error_handlers/logger_spec.rb
136
- - spec/hutch/error_handlers/opbeat_spec.rb
144
+ - spec/hutch/error_handlers/rollbar_spec.rb
137
145
  - spec/hutch/error_handlers/sentry_spec.rb
138
146
  - spec/hutch/logger_spec.rb
139
147
  - spec/hutch/message_spec.rb
@@ -142,7 +150,6 @@ files:
142
150
  - spec/hutch/worker_spec.rb
143
151
  - spec/hutch_spec.rb
144
152
  - spec/spec_helper.rb
145
- - spec/tracers/opbeat_spec.rb
146
153
  - templates/default/class/html/settings.erb
147
154
  - templates/default/class/setup.rb
148
155
  - templates/default/fulldoc/html/css/hutch.css
@@ -164,15 +171,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
164
171
  requirements:
165
172
  - - ">="
166
173
  - !ruby/object:Gem::Version
167
- version: '2.0'
174
+ version: '2.2'
168
175
  required_rubygems_version: !ruby/object:Gem::Requirement
169
176
  requirements:
170
177
  - - ">="
171
178
  - !ruby/object:Gem::Version
172
179
  version: '0'
173
180
  requirements: []
174
- rubyforge_project:
175
- rubygems_version: 2.5.1
181
+ rubygems_version: 3.1.2
176
182
  signing_key:
177
183
  specification_version: 4
178
184
  summary: Easy inter-service communication using RabbitMQ.
@@ -184,7 +190,7 @@ test_files:
184
190
  - spec/hutch/error_handlers/airbrake_spec.rb
185
191
  - spec/hutch/error_handlers/honeybadger_spec.rb
186
192
  - spec/hutch/error_handlers/logger_spec.rb
187
- - spec/hutch/error_handlers/opbeat_spec.rb
193
+ - spec/hutch/error_handlers/rollbar_spec.rb
188
194
  - spec/hutch/error_handlers/sentry_spec.rb
189
195
  - spec/hutch/logger_spec.rb
190
196
  - spec/hutch/message_spec.rb
@@ -193,4 +199,3 @@ test_files:
193
199
  - spec/hutch/worker_spec.rb
194
200
  - spec/hutch_spec.rb
195
201
  - spec/spec_helper.rb
196
- - spec/tracers/opbeat_spec.rb
@@ -1,24 +0,0 @@
1
- require 'hutch/logging'
2
- require 'opbeat'
3
-
4
- module Hutch
5
- module ErrorHandlers
6
- class Opbeat
7
- include Logging
8
-
9
- def initialize
10
- unless ::Opbeat.respond_to?(:report)
11
- raise "The Opbeat error handler requires Opbeat >= 3.0"
12
- end
13
- end
14
-
15
- def handle(properties, payload, consumer, ex)
16
- message_id = properties.message_id
17
- prefix = "message(#{message_id || '-'}):"
18
- logger.error "#{prefix} Logging event to Opbeat"
19
- logger.error "#{prefix} #{ex.class} - #{ex.message}"
20
- ::Opbeat.report(ex, extra: { payload: payload })
21
- end
22
- end
23
- end
24
- end
@@ -1,37 +0,0 @@
1
- require 'opbeat'
2
-
3
- module Hutch
4
- module Tracers
5
- # Tracer for Opbeat, which traces each message processed.
6
- class Opbeat
7
- KIND = 'messaging.hutch'.freeze
8
-
9
- # @param klass [Consumer] Consumer instance (!)
10
- def initialize(klass)
11
- @klass = klass
12
- end
13
-
14
- # @param message [Message]
15
- def handle(message)
16
- ::Opbeat.transaction(sig, KIND, extra: extra_from(message)) do
17
- @klass.process(message)
18
- end.done(true)
19
- end
20
-
21
- private
22
-
23
- def sig
24
- @klass.class.name
25
- end
26
-
27
- def extra_from(message)
28
- {
29
- body: message.body.to_s,
30
- message_id: message.message_id,
31
- timestamp: message.timestamp,
32
- routing_key: message.routing_key
33
- }
34
- end
35
- end
36
- end
37
- end
@@ -1,22 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe Hutch::ErrorHandlers::Opbeat do
4
- let(:error_handler) { Hutch::ErrorHandlers::Opbeat.new }
5
-
6
- describe '#handle' do
7
- let(:properties) { OpenStruct.new(message_id: "1") }
8
- let(:payload) { "{}" }
9
- let(:error) do
10
- begin
11
- raise "Stuff went wrong"
12
- rescue RuntimeError => err
13
- err
14
- end
15
- end
16
-
17
- it "logs the error to Opbeat" do
18
- expect(Opbeat).to receive(:report).with(error, extra: { payload: payload })
19
- error_handler.handle(properties, payload, double, error)
20
- end
21
- end
22
- end
@@ -1,44 +0,0 @@
1
- require 'hutch/message'
2
- require 'hutch/serializers/identity'
3
- require 'hutch/tracers'
4
-
5
- RSpec.describe Hutch::Tracers::Opbeat do
6
- let(:consumer) { double('the-consumer') }
7
-
8
- subject(:tracer) { described_class.new(consumer) }
9
-
10
- let(:message) do
11
- Hutch::Message.new(double('the-delivery-info', routing_key: 'foo.bar',
12
- exchange: 'foo'),
13
- double('the-properties', message_id: 'the-id',
14
- timestamp: 'the-time'),
15
- double('the-payload', to_s: 'the-body'),
16
- Hutch::Serializers::Identity)
17
- end
18
-
19
- it 'formats messages as extra information' do
20
- expected_extra = {
21
- body: 'the-body',
22
- message_id: 'the-id',
23
- timestamp: 'the-time',
24
- routing_key: 'foo.bar'
25
- }
26
- expect(Opbeat).to receive(:transaction).with(anything,
27
- 'messaging.hutch',
28
- extra: expected_extra) {
29
- double('done-callback', done: true)
30
- }
31
-
32
- tracer.handle(message)
33
- end
34
-
35
- it 'presents consumer class name as Opbeat tracing signature' do
36
- expect(Opbeat).to receive(:transaction).with(consumer.class.name,
37
- 'messaging.hutch',
38
- anything) {
39
- double('done-callback', done: true)
40
- }
41
-
42
- tracer.handle(message)
43
- end
44
- end