hutch 0.21.0-java → 0.25.0-java
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/.gitignore +3 -0
- data/.rspec +1 -0
- data/.travis.yml +11 -12
- data/.yardopts +5 -0
- data/CHANGELOG.md +118 -1
- data/Gemfile +15 -4
- data/Guardfile +13 -4
- data/README.md +274 -24
- data/Rakefile +8 -1
- data/hutch.gemspec +6 -7
- data/lib/hutch.rb +11 -8
- data/lib/hutch/adapters/march_hare.rb +1 -1
- data/lib/hutch/broker.rb +113 -110
- data/lib/hutch/cli.rb +42 -11
- data/lib/hutch/config.rb +209 -59
- data/lib/hutch/error_handlers.rb +1 -0
- data/lib/hutch/error_handlers/airbrake.rb +44 -16
- data/lib/hutch/error_handlers/base.rb +15 -0
- data/lib/hutch/error_handlers/honeybadger.rb +33 -18
- data/lib/hutch/error_handlers/logger.rb +12 -6
- data/lib/hutch/error_handlers/opbeat.rb +30 -0
- data/lib/hutch/error_handlers/sentry.rb +14 -6
- data/lib/hutch/logging.rb +5 -5
- data/lib/hutch/publisher.rb +75 -0
- data/lib/hutch/tracers.rb +1 -0
- data/lib/hutch/tracers/opbeat.rb +37 -0
- data/lib/hutch/version.rb +1 -1
- data/lib/hutch/waiter.rb +104 -0
- data/lib/hutch/worker.rb +50 -66
- data/lib/yard-settings/handler.rb +38 -0
- data/lib/yard-settings/yard-settings.rb +2 -0
- data/spec/hutch/broker_spec.rb +162 -77
- data/spec/hutch/cli_spec.rb +16 -3
- data/spec/hutch/config_spec.rb +83 -22
- data/spec/hutch/error_handlers/airbrake_spec.rb +25 -10
- data/spec/hutch/error_handlers/honeybadger_spec.rb +24 -2
- data/spec/hutch/error_handlers/logger_spec.rb +14 -1
- data/spec/hutch/error_handlers/opbeat_spec.rb +37 -0
- data/spec/hutch/error_handlers/sentry_spec.rb +18 -1
- data/spec/hutch/logger_spec.rb +12 -6
- data/spec/hutch/waiter_spec.rb +51 -0
- data/spec/hutch/worker_spec.rb +33 -4
- data/spec/spec_helper.rb +7 -5
- data/spec/tracers/opbeat_spec.rb +44 -0
- data/templates/default/class/html/settings.erb +0 -0
- data/templates/default/class/setup.rb +4 -0
- data/templates/default/fulldoc/html/css/hutch.css +13 -0
- data/templates/default/layout/html/setup.rb +7 -0
- data/templates/default/method_details/html/settings.erb +5 -0
- data/templates/default/method_details/setup.rb +4 -0
- data/templates/default/method_details/text/settings.erb +0 -0
- data/templates/default/module/html/settings.erb +40 -0
- data/templates/default/module/setup.rb +4 -0
- metadata +41 -38
data/spec/hutch/worker_spec.rb
CHANGED
@@ -7,7 +7,19 @@ describe Hutch::Worker do
|
|
7
7
|
get_serializer: nil) }
|
8
8
|
let(:consumers) { [consumer, double('Consumer')] }
|
9
9
|
let(:broker) { Hutch::Broker.new }
|
10
|
-
|
10
|
+
let(:setup_procs) { Array.new(2) { Proc.new {} } }
|
11
|
+
subject(:worker) { Hutch::Worker.new(broker, consumers, setup_procs) }
|
12
|
+
|
13
|
+
describe ".#run" do
|
14
|
+
it "calls each setup proc" do
|
15
|
+
setup_procs.each { |prc| expect(prc).to receive(:call) }
|
16
|
+
allow(worker).to receive(:setup_queues)
|
17
|
+
allow(Hutch::Waiter).to receive(:wait_until_signaled)
|
18
|
+
allow(broker).to receive(:stop)
|
19
|
+
|
20
|
+
worker.run
|
21
|
+
end
|
22
|
+
end
|
11
23
|
|
12
24
|
describe '#setup_queues' do
|
13
25
|
it 'sets up queues for each of the consumers' do
|
@@ -20,7 +32,6 @@ describe Hutch::Worker do
|
|
20
32
|
|
21
33
|
describe '#setup_queue' do
|
22
34
|
let(:queue) { double('Queue', bind: nil, subscribe: nil) }
|
23
|
-
before { allow(worker).to receive_messages(consumer_queue: queue) }
|
24
35
|
before { allow(broker).to receive_messages(queue: queue, bind_queue: nil) }
|
25
36
|
|
26
37
|
it 'creates a queue' do
|
@@ -34,9 +45,27 @@ describe Hutch::Worker do
|
|
34
45
|
end
|
35
46
|
|
36
47
|
it 'sets up a subscription' do
|
37
|
-
expect(queue).to receive(:subscribe).with(manual_ack: true)
|
48
|
+
expect(queue).to receive(:subscribe).with(consumer_tag: %r(^hutch\-.{36}$), manual_ack: true)
|
38
49
|
worker.setup_queue(consumer)
|
39
50
|
end
|
51
|
+
|
52
|
+
context 'with a configured consumer tag prefix' do
|
53
|
+
before { Hutch::Config.set(:consumer_tag_prefix, 'appname') }
|
54
|
+
|
55
|
+
it 'sets up a subscription with the configured tag prefix' do
|
56
|
+
expect(queue).to receive(:subscribe).with(consumer_tag: %r(^appname\-.{36}$), manual_ack: true)
|
57
|
+
worker.setup_queue(consumer)
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
context 'with a configured consumer tag prefix that is too long' do
|
62
|
+
let(:maximum_size) { 255 - SecureRandom.uuid.size - 1 }
|
63
|
+
before { Hutch::Config.set(:consumer_tag_prefix, 'a'.*(maximum_size + 1)) }
|
64
|
+
|
65
|
+
it 'raises an error' do
|
66
|
+
expect { worker.setup_queue(consumer) }.to raise_error(/Tag must be 255 bytes long at most/)
|
67
|
+
end
|
68
|
+
end
|
40
69
|
end
|
41
70
|
|
42
71
|
describe '#handle_message' do
|
@@ -68,7 +97,7 @@ describe Hutch::Worker do
|
|
68
97
|
it 'requeues the message' do
|
69
98
|
allow(consumer_instance).to receive(:process).and_raise('failed')
|
70
99
|
requeuer = double
|
71
|
-
allow(requeuer).to receive(:handle)
|
100
|
+
allow(requeuer).to receive(:handle) { |delivery_info, properties, broker, e|
|
72
101
|
broker.requeue delivery_info.delivery_tag
|
73
102
|
true
|
74
103
|
}
|
data/spec/spec_helper.rb
CHANGED
@@ -13,8 +13,10 @@ require 'raven'
|
|
13
13
|
require 'hutch'
|
14
14
|
require 'logger'
|
15
15
|
|
16
|
+
# set logger to be a null logger
|
17
|
+
Hutch::Logging.logger = Logger.new(File::NULL)
|
18
|
+
|
16
19
|
RSpec.configure do |config|
|
17
|
-
config.before(:all) { Hutch::Config.log_level = Logger::FATAL }
|
18
20
|
config.raise_errors_for_deprecations!
|
19
21
|
|
20
22
|
if defined?(JRUBY_VERSION)
|
@@ -22,6 +24,10 @@ RSpec.configure do |config|
|
|
22
24
|
else
|
23
25
|
config.filter_run_excluding adapter: :march_hare
|
24
26
|
end
|
27
|
+
|
28
|
+
config.mock_with :rspec do |mocks|
|
29
|
+
mocks.verify_partial_doubles = true
|
30
|
+
end
|
25
31
|
end
|
26
32
|
|
27
33
|
# Constants (classes, etc) defined within a block passed to this method
|
@@ -34,7 +40,3 @@ ensure
|
|
34
40
|
Object.send(:remove_const, constant)
|
35
41
|
end
|
36
42
|
end
|
37
|
-
|
38
|
-
def deep_copy(obj)
|
39
|
-
Marshal.load(Marshal.dump(obj))
|
40
|
-
end
|
@@ -0,0 +1,44 @@
|
|
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
|
File without changes
|
File without changes
|
@@ -0,0 +1,40 @@
|
|
1
|
+
<% if object['setting_rows'] %>
|
2
|
+
<h2>
|
3
|
+
Configuration
|
4
|
+
</h2>
|
5
|
+
|
6
|
+
<div class="tags">
|
7
|
+
<table border="1" class="settings">
|
8
|
+
<thead>
|
9
|
+
<tr>
|
10
|
+
<th>
|
11
|
+
Setting name
|
12
|
+
</th>
|
13
|
+
<th>
|
14
|
+
Default value
|
15
|
+
</th>
|
16
|
+
<th>
|
17
|
+
Type
|
18
|
+
</th>
|
19
|
+
<th>
|
20
|
+
ENV variable
|
21
|
+
</th>
|
22
|
+
<th>
|
23
|
+
Description
|
24
|
+
</th>
|
25
|
+
</tr>
|
26
|
+
</thead>
|
27
|
+
<tbody>
|
28
|
+
<% for setting in object['setting_rows'] %>
|
29
|
+
<tr>
|
30
|
+
<td><tt><%= resolve_links "{Hutch::Config##{setting[:name]} #{setting[:name]}}" %></tt></td>
|
31
|
+
<td><%= setting[:default_value] %></td>
|
32
|
+
<td><%= setting[:type] %></td>
|
33
|
+
<td><tt>HUTCH_<%= setting[:name].upcase %></tt></td>
|
34
|
+
<td><%= html_markup_markdown setting[:first_line_of_description] %></td>
|
35
|
+
</tr>
|
36
|
+
<% end %>
|
37
|
+
</tbody>
|
38
|
+
</table>
|
39
|
+
</div>
|
40
|
+
<% end %>
|
metadata
CHANGED
@@ -1,21 +1,21 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: hutch
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.25.0
|
5
5
|
platform: java
|
6
6
|
authors:
|
7
7
|
- Harry Marr
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2018-01-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
requirement: !ruby/object:Gem::Requirement
|
15
15
|
requirements:
|
16
16
|
- - ">="
|
17
17
|
- !ruby/object:Gem::Version
|
18
|
-
version:
|
18
|
+
version: 3.0.0
|
19
19
|
name: march_hare
|
20
20
|
prerelease: false
|
21
21
|
type: :runtime
|
@@ -23,7 +23,7 @@ dependencies:
|
|
23
23
|
requirements:
|
24
24
|
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version:
|
26
|
+
version: 3.0.0
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
requirement: !ruby/object:Gem::Requirement
|
29
29
|
requirements:
|
@@ -43,7 +43,7 @@ dependencies:
|
|
43
43
|
requirements:
|
44
44
|
- - "~>"
|
45
45
|
- !ruby/object:Gem::Version
|
46
|
-
version: 1.
|
46
|
+
version: '1.12'
|
47
47
|
name: multi_json
|
48
48
|
prerelease: false
|
49
49
|
type: :runtime
|
@@ -51,13 +51,16 @@ dependencies:
|
|
51
51
|
requirements:
|
52
52
|
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version: 1.
|
54
|
+
version: '1.12'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
requirement: !ruby/object:Gem::Requirement
|
57
57
|
requirements:
|
58
58
|
- - ">="
|
59
59
|
- !ruby/object:Gem::Version
|
60
|
-
version: '
|
60
|
+
version: '4.2'
|
61
|
+
- - "<"
|
62
|
+
- !ruby/object:Gem::Version
|
63
|
+
version: '6'
|
61
64
|
name: activesupport
|
62
65
|
prerelease: false
|
63
66
|
type: :runtime
|
@@ -65,36 +68,12 @@ dependencies:
|
|
65
68
|
requirements:
|
66
69
|
- - ">="
|
67
70
|
- !ruby/object:Gem::Version
|
68
|
-
version: '
|
69
|
-
-
|
70
|
-
requirement: !ruby/object:Gem::Requirement
|
71
|
-
requirements:
|
72
|
-
- - "~>"
|
71
|
+
version: '4.2'
|
72
|
+
- - "<"
|
73
73
|
- !ruby/object:Gem::Version
|
74
|
-
version: '
|
75
|
-
|
76
|
-
|
77
|
-
type: :development
|
78
|
-
version_requirements: !ruby/object:Gem::Requirement
|
79
|
-
requirements:
|
80
|
-
- - "~>"
|
81
|
-
- !ruby/object:Gem::Version
|
82
|
-
version: '3.0'
|
83
|
-
- !ruby/object:Gem::Dependency
|
84
|
-
requirement: !ruby/object:Gem::Requirement
|
85
|
-
requirements:
|
86
|
-
- - "~>"
|
87
|
-
- !ruby/object:Gem::Version
|
88
|
-
version: 0.7.1
|
89
|
-
name: simplecov
|
90
|
-
prerelease: false
|
91
|
-
type: :development
|
92
|
-
version_requirements: !ruby/object:Gem::Requirement
|
93
|
-
requirements:
|
94
|
-
- - "~>"
|
95
|
-
- !ruby/object:Gem::Version
|
96
|
-
version: 0.7.1
|
97
|
-
description: Hutch is a Ruby library for enabling asynchronous inter-service communication using RabbitMQ.
|
74
|
+
version: '6'
|
75
|
+
description: Hutch is a Ruby library for enabling asynchronous inter-service communication
|
76
|
+
using RabbitMQ.
|
98
77
|
email:
|
99
78
|
- developers@gocardless.com
|
100
79
|
executables:
|
@@ -103,7 +82,9 @@ extensions: []
|
|
103
82
|
extra_rdoc_files: []
|
104
83
|
files:
|
105
84
|
- ".gitignore"
|
85
|
+
- ".rspec"
|
106
86
|
- ".travis.yml"
|
87
|
+
- ".yardopts"
|
107
88
|
- CHANGELOG.md
|
108
89
|
- Gemfile
|
109
90
|
- Guardfile
|
@@ -126,19 +107,26 @@ files:
|
|
126
107
|
- lib/hutch/consumer.rb
|
127
108
|
- lib/hutch/error_handlers.rb
|
128
109
|
- lib/hutch/error_handlers/airbrake.rb
|
110
|
+
- lib/hutch/error_handlers/base.rb
|
129
111
|
- lib/hutch/error_handlers/honeybadger.rb
|
130
112
|
- lib/hutch/error_handlers/logger.rb
|
113
|
+
- lib/hutch/error_handlers/opbeat.rb
|
131
114
|
- lib/hutch/error_handlers/sentry.rb
|
132
115
|
- lib/hutch/exceptions.rb
|
133
116
|
- lib/hutch/logging.rb
|
134
117
|
- lib/hutch/message.rb
|
118
|
+
- lib/hutch/publisher.rb
|
135
119
|
- lib/hutch/serializers/identity.rb
|
136
120
|
- lib/hutch/serializers/json.rb
|
137
121
|
- lib/hutch/tracers.rb
|
138
122
|
- lib/hutch/tracers/newrelic.rb
|
139
123
|
- lib/hutch/tracers/null_tracer.rb
|
124
|
+
- lib/hutch/tracers/opbeat.rb
|
140
125
|
- lib/hutch/version.rb
|
126
|
+
- lib/hutch/waiter.rb
|
141
127
|
- lib/hutch/worker.rb
|
128
|
+
- lib/yard-settings/handler.rb
|
129
|
+
- lib/yard-settings/yard-settings.rb
|
142
130
|
- spec/hutch/broker_spec.rb
|
143
131
|
- spec/hutch/cli_spec.rb
|
144
132
|
- spec/hutch/config_spec.rb
|
@@ -146,13 +134,25 @@ files:
|
|
146
134
|
- spec/hutch/error_handlers/airbrake_spec.rb
|
147
135
|
- spec/hutch/error_handlers/honeybadger_spec.rb
|
148
136
|
- spec/hutch/error_handlers/logger_spec.rb
|
137
|
+
- spec/hutch/error_handlers/opbeat_spec.rb
|
149
138
|
- spec/hutch/error_handlers/sentry_spec.rb
|
150
139
|
- spec/hutch/logger_spec.rb
|
151
140
|
- spec/hutch/message_spec.rb
|
152
141
|
- spec/hutch/serializers/json_spec.rb
|
142
|
+
- spec/hutch/waiter_spec.rb
|
153
143
|
- spec/hutch/worker_spec.rb
|
154
144
|
- spec/hutch_spec.rb
|
155
145
|
- spec/spec_helper.rb
|
146
|
+
- spec/tracers/opbeat_spec.rb
|
147
|
+
- templates/default/class/html/settings.erb
|
148
|
+
- templates/default/class/setup.rb
|
149
|
+
- templates/default/fulldoc/html/css/hutch.css
|
150
|
+
- templates/default/layout/html/setup.rb
|
151
|
+
- templates/default/method_details/html/settings.erb
|
152
|
+
- templates/default/method_details/setup.rb
|
153
|
+
- templates/default/method_details/text/settings.erb
|
154
|
+
- templates/default/module/html/settings.erb
|
155
|
+
- templates/default/module/setup.rb
|
156
156
|
homepage: https://github.com/gocardless/hutch
|
157
157
|
licenses:
|
158
158
|
- MIT
|
@@ -165,7 +165,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
165
165
|
requirements:
|
166
166
|
- - ">="
|
167
167
|
- !ruby/object:Gem::Version
|
168
|
-
version: '
|
168
|
+
version: '2.2'
|
169
169
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
170
170
|
requirements:
|
171
171
|
- - ">="
|
@@ -173,7 +173,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
173
173
|
version: '0'
|
174
174
|
requirements: []
|
175
175
|
rubyforge_project:
|
176
|
-
rubygems_version: 2.
|
176
|
+
rubygems_version: 2.6.13
|
177
177
|
signing_key:
|
178
178
|
specification_version: 4
|
179
179
|
summary: Easy inter-service communication using RabbitMQ.
|
@@ -185,10 +185,13 @@ test_files:
|
|
185
185
|
- spec/hutch/error_handlers/airbrake_spec.rb
|
186
186
|
- spec/hutch/error_handlers/honeybadger_spec.rb
|
187
187
|
- spec/hutch/error_handlers/logger_spec.rb
|
188
|
+
- spec/hutch/error_handlers/opbeat_spec.rb
|
188
189
|
- spec/hutch/error_handlers/sentry_spec.rb
|
189
190
|
- spec/hutch/logger_spec.rb
|
190
191
|
- spec/hutch/message_spec.rb
|
191
192
|
- spec/hutch/serializers/json_spec.rb
|
193
|
+
- spec/hutch/waiter_spec.rb
|
192
194
|
- spec/hutch/worker_spec.rb
|
193
195
|
- spec/hutch_spec.rb
|
194
196
|
- spec/spec_helper.rb
|
197
|
+
- spec/tracers/opbeat_spec.rb
|