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.
- checksums.yaml +5 -5
- data/.travis.yml +18 -13
- data/CHANGELOG.md +227 -4
- data/Gemfile +3 -3
- data/LICENSE +1 -0
- data/README.md +94 -94
- data/bin/ci/before_build.sh +20 -0
- data/bin/ci/install_on_debian.sh +17 -0
- data/hutch.gemspec +5 -5
- data/lib/hutch.rb +8 -4
- data/lib/hutch/broker.rb +37 -10
- data/lib/hutch/cli.rb +22 -11
- data/lib/hutch/config.rb +12 -0
- data/lib/hutch/consumer.rb +32 -2
- data/lib/hutch/error_handlers.rb +1 -1
- data/lib/hutch/error_handlers/airbrake.rb +20 -2
- data/lib/hutch/error_handlers/base.rb +15 -0
- data/lib/hutch/error_handlers/honeybadger.rb +28 -14
- data/lib/hutch/error_handlers/logger.rb +7 -2
- data/lib/hutch/error_handlers/rollbar.rb +28 -0
- data/lib/hutch/error_handlers/sentry.rb +9 -2
- data/lib/hutch/publisher.rb +1 -1
- data/lib/hutch/tracers.rb +0 -1
- data/lib/hutch/version.rb +1 -2
- data/lib/hutch/waiter.rb +1 -1
- data/lib/hutch/worker.rb +30 -1
- data/spec/hutch/broker_spec.rb +34 -0
- data/spec/hutch/cli_spec.rb +13 -0
- data/spec/hutch/consumer_spec.rb +82 -4
- data/spec/hutch/error_handlers/airbrake_spec.rb +19 -0
- data/spec/hutch/error_handlers/honeybadger_spec.rb +22 -1
- data/spec/hutch/error_handlers/logger_spec.rb +11 -0
- data/spec/hutch/error_handlers/rollbar_spec.rb +45 -0
- data/spec/hutch/error_handlers/sentry_spec.rb +15 -0
- data/spec/hutch/waiter_spec.rb +2 -2
- data/spec/hutch/worker_spec.rb +1 -1
- metadata +22 -17
- data/lib/hutch/error_handlers/opbeat.rb +0 -24
- data/lib/hutch/tracers/opbeat.rb +0 -37
- data/spec/hutch/error_handlers/opbeat_spec.rb +0 -22
- 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
|
data/spec/hutch/waiter_spec.rb
CHANGED
@@ -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...')
|
data/spec/hutch/worker_spec.rb
CHANGED
@@ -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)
|
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.
|
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:
|
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.
|
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.
|
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.
|
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.
|
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: '
|
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: '
|
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/
|
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/
|
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.
|
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
|
-
|
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/
|
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
|
data/lib/hutch/tracers/opbeat.rb
DELETED
@@ -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
|
data/spec/tracers/opbeat_spec.rb
DELETED
@@ -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
|