hutch 0.28.0 → 1.1.1
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 +4 -4
- data/.github/workflows/test.yml +42 -0
- data/CHANGELOG.md +116 -1
- data/Gemfile +3 -0
- data/LICENSE +1 -0
- data/README.md +58 -7
- data/bin/ci/before_build_docker.sh +20 -0
- data/bin/ci/install_on_debian.sh +36 -7
- data/hutch.gemspec +7 -9
- data/lib/hutch/adapters/bunny.rb +4 -0
- data/lib/hutch/adapters/march_hare.rb +4 -0
- data/lib/hutch/broker.rb +4 -3
- data/lib/hutch/cli.rb +3 -0
- data/lib/hutch/config.rb +20 -9
- data/lib/hutch/consumer.rb +29 -8
- data/lib/hutch/error_handlers/bugsnag.rb +30 -0
- data/lib/hutch/error_handlers/sentry.rb +6 -11
- data/lib/hutch/error_handlers/sentry_raven.rb +31 -0
- data/lib/hutch/error_handlers.rb +2 -0
- data/lib/hutch/serializers/json.rb +1 -1
- data/lib/hutch/tracers/datadog.rb +17 -0
- data/lib/hutch/tracers.rb +1 -0
- data/lib/hutch/version.rb +1 -1
- data/lib/hutch/worker.rb +1 -1
- data/spec/hutch/broker_spec.rb +1 -1
- data/spec/hutch/config_spec.rb +38 -0
- data/spec/hutch/consumer_spec.rb +36 -24
- data/spec/hutch/error_handlers/bugsnag_spec.rb +55 -0
- data/spec/hutch/error_handlers/sentry_raven_spec.rb +37 -0
- data/spec/hutch/error_handlers/sentry_spec.rb +4 -2
- data/spec/hutch/tracers/datadog_spec.rb +44 -0
- data/spec/hutch/worker_spec.rb +2 -2
- metadata +29 -19
- data/.travis.yml +0 -23
@@ -1,31 +1,26 @@
|
|
1
1
|
require 'hutch/logging'
|
2
|
-
require '
|
2
|
+
require 'sentry-ruby'
|
3
3
|
require 'hutch/error_handlers/base'
|
4
4
|
|
5
5
|
module Hutch
|
6
6
|
module ErrorHandlers
|
7
7
|
class Sentry < Base
|
8
|
-
|
9
|
-
def initialize
|
10
|
-
unless Raven.respond_to?(:capture_exception)
|
11
|
-
raise "The Hutch Sentry error handler requires Raven >= 0.4.0"
|
12
|
-
end
|
13
|
-
end
|
14
|
-
|
15
8
|
def handle(properties, payload, consumer, ex)
|
16
9
|
message_id = properties.message_id
|
17
10
|
prefix = "message(#{message_id || '-'}):"
|
18
11
|
logger.error "#{prefix} Logging event to Sentry"
|
19
12
|
logger.error "#{prefix} #{ex.class} - #{ex.message}"
|
20
|
-
|
13
|
+
::Sentry.configure_scope do |scope|
|
14
|
+
scope.set_context("payload", payload)
|
15
|
+
end
|
16
|
+
::Sentry.capture_exception(ex)
|
21
17
|
end
|
22
18
|
|
23
19
|
def handle_setup_exception(ex)
|
24
20
|
logger.error "Logging setup exception to Sentry"
|
25
21
|
logger.error "#{ex.class} - #{ex.message}"
|
26
|
-
|
22
|
+
::Sentry.capture_exception(ex)
|
27
23
|
end
|
28
|
-
|
29
24
|
end
|
30
25
|
end
|
31
26
|
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
require 'hutch/logging'
|
2
|
+
require 'raven'
|
3
|
+
require 'hutch/error_handlers/base'
|
4
|
+
|
5
|
+
module Hutch
|
6
|
+
module ErrorHandlers
|
7
|
+
class SentryRaven < Base
|
8
|
+
|
9
|
+
def initialize
|
10
|
+
unless Raven.respond_to?(:capture_exception)
|
11
|
+
raise "The Hutch Sentry error handler requires Raven >= 0.4.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 Sentry"
|
19
|
+
logger.error "#{prefix} #{ex.class} - #{ex.message}"
|
20
|
+
Raven.capture_exception(ex, extra: { payload: payload })
|
21
|
+
end
|
22
|
+
|
23
|
+
def handle_setup_exception(ex)
|
24
|
+
logger.error "Logging setup exception to Sentry"
|
25
|
+
logger.error "#{ex.class} - #{ex.message}"
|
26
|
+
Raven.capture_exception(ex)
|
27
|
+
end
|
28
|
+
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
data/lib/hutch/error_handlers.rb
CHANGED
@@ -2,8 +2,10 @@ module Hutch
|
|
2
2
|
module ErrorHandlers
|
3
3
|
autoload :Logger, 'hutch/error_handlers/logger'
|
4
4
|
autoload :Sentry, 'hutch/error_handlers/sentry'
|
5
|
+
autoload :SentryRaven, 'hutch/error_handlers/sentry_raven'
|
5
6
|
autoload :Honeybadger, 'hutch/error_handlers/honeybadger'
|
6
7
|
autoload :Airbrake, 'hutch/error_handlers/airbrake'
|
7
8
|
autoload :Rollbar, 'hutch/error_handlers/rollbar'
|
9
|
+
autoload :Bugsnag, 'hutch/error_handlers/bugsnag'
|
8
10
|
end
|
9
11
|
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
require 'ddtrace'
|
2
|
+
|
3
|
+
module Hutch
|
4
|
+
module Tracers
|
5
|
+
class Datadog
|
6
|
+
def initialize(klass)
|
7
|
+
@klass = klass
|
8
|
+
end
|
9
|
+
|
10
|
+
def handle(message)
|
11
|
+
::Datadog.tracer.trace(@klass.class.name, service: 'hutch', span_type: 'rabbitmq') do
|
12
|
+
@klass.process(message)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
data/lib/hutch/tracers.rb
CHANGED
data/lib/hutch/version.rb
CHANGED
data/lib/hutch/worker.rb
CHANGED
@@ -47,7 +47,7 @@ module Hutch
|
|
47
47
|
def setup_queue(consumer)
|
48
48
|
logger.info "setting up queue: #{consumer.get_queue_name}"
|
49
49
|
|
50
|
-
queue = @broker.queue(consumer.get_queue_name, consumer.
|
50
|
+
queue = @broker.queue(consumer.get_queue_name, consumer.get_options)
|
51
51
|
@broker.bind_queue(queue, consumer.routing_keys)
|
52
52
|
|
53
53
|
queue.subscribe(consumer_tag: unique_consumer_tag, manual_ack: true) do |*args|
|
data/spec/hutch/broker_spec.rb
CHANGED
data/spec/hutch/config_spec.rb
CHANGED
@@ -49,6 +49,44 @@ describe Hutch::Config do
|
|
49
49
|
context 'sets value in user config hash' do
|
50
50
|
it { is_expected.to eq(new_value) }
|
51
51
|
end
|
52
|
+
|
53
|
+
context 'type casting' do
|
54
|
+
context 'number attributes' do
|
55
|
+
before { Hutch::Config.set(:heartbeat, new_value) }
|
56
|
+
subject(:value) { Hutch::Config.user_config[:heartbeat] }
|
57
|
+
|
58
|
+
let(:new_value) { "0" }
|
59
|
+
|
60
|
+
|
61
|
+
specify 'casts values to integers' do
|
62
|
+
expect(value).to eq 0
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
context 'boolean attributes' do
|
68
|
+
before { Hutch::Config.set(:autoload_rails, new_value) }
|
69
|
+
subject(:value) { Hutch::Config.user_config[:autoload_rails] }
|
70
|
+
|
71
|
+
let(:new_value) { "t" }
|
72
|
+
|
73
|
+
|
74
|
+
specify 'casts values to booleans' do
|
75
|
+
expect(value).to eq true
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
context 'string attributes' do
|
80
|
+
before { Hutch::Config.set(:mq_exchange_type, new_value) }
|
81
|
+
subject(:value) { Hutch::Config.user_config[:mq_exchange_type] }
|
82
|
+
|
83
|
+
let(:new_value) { 1 }
|
84
|
+
|
85
|
+
|
86
|
+
specify 'does not perform any typecasting' do
|
87
|
+
expect(value).to eq new_value
|
88
|
+
end
|
89
|
+
end
|
52
90
|
end
|
53
91
|
|
54
92
|
context 'for invalid attributes' do
|
data/spec/hutch/consumer_spec.rb
CHANGED
@@ -28,17 +28,30 @@ describe Hutch::Consumer do
|
|
28
28
|
ComplexConsumer
|
29
29
|
end
|
30
30
|
|
31
|
-
let(:
|
32
|
-
unless defined?
|
33
|
-
class
|
31
|
+
let(:consumer_using_quorum_queue) do
|
32
|
+
unless defined? ConsumerUsingQuorumQueue
|
33
|
+
class ConsumerUsingQuorumQueue
|
34
34
|
include Hutch::Consumer
|
35
35
|
consume 'hutch.test1'
|
36
36
|
arguments foo: :bar
|
37
|
-
|
37
|
+
|
38
38
|
quorum_queue
|
39
39
|
end
|
40
40
|
end
|
41
|
-
|
41
|
+
ConsumerUsingQuorumQueue
|
42
|
+
end
|
43
|
+
|
44
|
+
let(:consumer_using_classic_queue) do
|
45
|
+
unless defined? ConsumerUsingLazyQueue
|
46
|
+
class ConsumerUsingLazyQueue
|
47
|
+
include Hutch::Consumer
|
48
|
+
consume 'hutch.test1'
|
49
|
+
arguments foo: :bar
|
50
|
+
lazy_queue
|
51
|
+
classic_queue
|
52
|
+
end
|
53
|
+
end
|
54
|
+
ConsumerUsingLazyQueue
|
42
55
|
end
|
43
56
|
|
44
57
|
describe 'module inclusion' do
|
@@ -84,26 +97,33 @@ describe Hutch::Consumer do
|
|
84
97
|
end
|
85
98
|
end
|
86
99
|
|
87
|
-
describe '
|
88
|
-
it 'does not
|
89
|
-
expect(simple_consumer.queue_mode).to eq(
|
100
|
+
describe 'default queue mode' do
|
101
|
+
it 'does not specify any mode by default' do
|
102
|
+
expect(simple_consumer.queue_mode).to eq(nil)
|
103
|
+
expect(simple_consumer.queue_type).to eq(nil)
|
90
104
|
end
|
105
|
+
end
|
91
106
|
|
107
|
+
describe '.lazy_queue' do
|
92
108
|
context 'when queue mode has been set explicitly to lazy' do
|
93
109
|
it 'sets queue mode to lazy' do
|
94
|
-
expect(
|
110
|
+
expect(consumer_using_classic_queue.queue_mode).to eq('lazy')
|
95
111
|
end
|
96
112
|
end
|
97
113
|
end
|
98
114
|
|
99
|
-
describe '.
|
100
|
-
|
101
|
-
|
115
|
+
describe '.classic_queue' do
|
116
|
+
context 'when queue type has been set explicitly to classic' do
|
117
|
+
it 'sets queue type to classic' do
|
118
|
+
expect(consumer_using_classic_queue.queue_type).to eq('classic')
|
119
|
+
end
|
102
120
|
end
|
121
|
+
end
|
103
122
|
|
123
|
+
describe '.quorum_queue' do
|
104
124
|
context 'when queue type has been set explicitly to quorum' do
|
105
125
|
it 'sets queue type to quorum' do
|
106
|
-
expect(
|
126
|
+
expect(consumer_using_quorum_queue.queue_type).to eq('quorum')
|
107
127
|
end
|
108
128
|
|
109
129
|
it 'accepts initial group size as an option' do
|
@@ -125,34 +145,26 @@ describe Hutch::Consumer do
|
|
125
145
|
end
|
126
146
|
|
127
147
|
describe '.get_arguments' do
|
128
|
-
|
129
148
|
context 'when defined' do
|
130
149
|
it { expect(complex_consumer.get_arguments).to include(foo: :bar) }
|
131
150
|
end
|
132
151
|
|
133
|
-
context 'when not defined' do
|
134
|
-
it 'has the default values for queue custom options' do
|
135
|
-
expect(simple_consumer.get_arguments).to have_key('x-queue-mode')
|
136
|
-
.and have_key('x-queue-type')
|
137
|
-
end
|
138
|
-
end
|
139
|
-
|
140
152
|
context 'when queue is lazy' do
|
141
153
|
it 'has the x-queue-mode argument set to lazy' do
|
142
|
-
expect(
|
154
|
+
expect(consumer_using_classic_queue.get_arguments['x-queue-mode'])
|
143
155
|
.to eq('lazy')
|
144
156
|
end
|
145
157
|
end
|
146
158
|
|
147
159
|
context "when queue's type is quorum" do
|
148
|
-
let(:arguments) {
|
160
|
+
let(:arguments) { consumer_using_quorum_queue.get_arguments }
|
149
161
|
it 'has the x-queue-type argument set to quorum' do
|
150
162
|
expect(arguments['x-queue-type']).to eq('quorum')
|
151
163
|
expect(arguments).to_not have_key('x-quorum-initial-group-size')
|
152
164
|
end
|
153
165
|
|
154
166
|
it 'has the x-quorum-initial-group-size argument set to quorum' do
|
155
|
-
|
167
|
+
consumer_using_quorum_queue.quorum_queue(initial_group_size: 5)
|
156
168
|
expect(arguments['x-queue-type']).to eq('quorum')
|
157
169
|
expect(arguments['x-quorum-initial-group-size']).to eq(5)
|
158
170
|
end
|
@@ -0,0 +1,55 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "spec_helper"
|
4
|
+
|
5
|
+
describe Hutch::ErrorHandlers::Bugsnag do
|
6
|
+
let(:error_handler) { described_class.new }
|
7
|
+
|
8
|
+
before do
|
9
|
+
Bugsnag.configure do |bugsnag|
|
10
|
+
bugsnag.api_key = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
describe "#handle" do
|
15
|
+
let(:error) do
|
16
|
+
begin
|
17
|
+
raise "Stuff went wrong"
|
18
|
+
rescue RuntimeError => err
|
19
|
+
err
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
it "logs the error to Bugsnag" do
|
24
|
+
message_id = "1"
|
25
|
+
properties = OpenStruct.new(message_id: message_id)
|
26
|
+
payload = "{}"
|
27
|
+
consumer = double
|
28
|
+
ex = error
|
29
|
+
message = {
|
30
|
+
payload: payload,
|
31
|
+
consumer: consumer
|
32
|
+
}
|
33
|
+
|
34
|
+
expect(::Bugsnag).to receive(:notify).with(ex).and_call_original
|
35
|
+
expect_any_instance_of(::Bugsnag::Report).to receive(:add_tab).with(:hutch, message)
|
36
|
+
error_handler.handle(properties, payload, consumer, ex)
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
describe "#handle_setup_exception" do
|
41
|
+
let(:error) do
|
42
|
+
begin
|
43
|
+
raise "Stuff went wrong"
|
44
|
+
rescue RuntimeError => err
|
45
|
+
err
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
it "logs the error to Bugsnag" do
|
50
|
+
ex = error
|
51
|
+
expect(::Bugsnag).to receive(:notify).with(ex)
|
52
|
+
error_handler.handle_setup_exception(ex)
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Hutch::ErrorHandlers::SentryRaven do
|
4
|
+
let(:error_handler) { Hutch::ErrorHandlers::SentryRaven.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 Sentry" do
|
18
|
+
expect(Raven).to receive(:capture_exception).with(error, extra: { payload: payload })
|
19
|
+
error_handler.handle(properties, payload, double, error)
|
20
|
+
end
|
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
|
37
|
+
end
|
@@ -15,7 +15,8 @@ describe Hutch::ErrorHandlers::Sentry do
|
|
15
15
|
end
|
16
16
|
|
17
17
|
it "logs the error to Sentry" do
|
18
|
-
expect(
|
18
|
+
expect(::Sentry).to receive(:capture_exception).with(error).and_call_original
|
19
|
+
|
19
20
|
error_handler.handle(properties, payload, double, error)
|
20
21
|
end
|
21
22
|
end
|
@@ -30,7 +31,8 @@ describe Hutch::ErrorHandlers::Sentry do
|
|
30
31
|
end
|
31
32
|
|
32
33
|
it "logs the error to Sentry" do
|
33
|
-
expect(
|
34
|
+
expect(::Sentry).to receive(:capture_exception).with(error).and_call_original
|
35
|
+
|
34
36
|
error_handler.handle_setup_exception(error)
|
35
37
|
end
|
36
38
|
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
RSpec.describe Hutch::Tracers::Datadog do
|
4
|
+
describe "#handle" do
|
5
|
+
subject(:handle) { tracer.handle(message) }
|
6
|
+
|
7
|
+
let(:tracer) { described_class.new(klass) }
|
8
|
+
let(:klass) do
|
9
|
+
Class.new do
|
10
|
+
attr_reader :message
|
11
|
+
|
12
|
+
def initialize
|
13
|
+
@message = nil
|
14
|
+
end
|
15
|
+
|
16
|
+
def class
|
17
|
+
OpenStruct.new(name: 'ClassName')
|
18
|
+
end
|
19
|
+
|
20
|
+
def process(message)
|
21
|
+
@message = message
|
22
|
+
end
|
23
|
+
end.new
|
24
|
+
end
|
25
|
+
let(:message) { double(:message) }
|
26
|
+
|
27
|
+
before do
|
28
|
+
allow(Datadog.tracer).to receive(:trace).and_call_original
|
29
|
+
end
|
30
|
+
|
31
|
+
it 'uses Datadog tracer' do
|
32
|
+
handle
|
33
|
+
|
34
|
+
expect(Datadog.tracer).to have_received(:trace).with('ClassName',
|
35
|
+
hash_including(service: 'hutch', span_type: 'rabbitmq'))
|
36
|
+
end
|
37
|
+
|
38
|
+
it 'processes the message' do
|
39
|
+
expect {
|
40
|
+
handle
|
41
|
+
}.to change { klass.message }.from(nil).to(message)
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
data/spec/hutch/worker_spec.rb
CHANGED
@@ -4,7 +4,7 @@ require 'hutch/worker'
|
|
4
4
|
describe Hutch::Worker do
|
5
5
|
let(:consumer) { double('Consumer', routing_keys: %w( a b c ),
|
6
6
|
get_queue_name: 'consumer', get_arguments: {},
|
7
|
-
get_serializer: nil) }
|
7
|
+
get_options: {}, 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 {} } }
|
@@ -35,7 +35,7 @@ describe Hutch::Worker do
|
|
35
35
|
before { allow(broker).to receive_messages(queue: queue, bind_queue: nil) }
|
36
36
|
|
37
37
|
it 'creates a queue' do
|
38
|
-
expect(broker).to receive(:queue).with(consumer.get_queue_name, consumer.
|
38
|
+
expect(broker).to receive(:queue).with(consumer.get_queue_name, consumer.get_options).and_return(queue)
|
39
39
|
worker.setup_queue(consumer)
|
40
40
|
end
|
41
41
|
|
metadata
CHANGED
@@ -1,14 +1,15 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: hutch
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 1.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Harry Marr
|
8
|
-
|
8
|
+
- Michael Klishin
|
9
|
+
autorequire:
|
9
10
|
bindir: bin
|
10
11
|
cert_chain: []
|
11
|
-
date:
|
12
|
+
date: 2022-03-18 00:00:00.000000000 Z
|
12
13
|
dependencies:
|
13
14
|
- !ruby/object:Gem::Dependency
|
14
15
|
name: bunny
|
@@ -16,20 +17,20 @@ dependencies:
|
|
16
17
|
requirements:
|
17
18
|
- - ">="
|
18
19
|
- !ruby/object:Gem::Version
|
19
|
-
version: '2.
|
20
|
+
version: '2.19'
|
20
21
|
- - "<"
|
21
22
|
- !ruby/object:Gem::Version
|
22
|
-
version: '
|
23
|
+
version: '3.0'
|
23
24
|
type: :runtime
|
24
25
|
prerelease: false
|
25
26
|
version_requirements: !ruby/object:Gem::Requirement
|
26
27
|
requirements:
|
27
28
|
- - ">="
|
28
29
|
- !ruby/object:Gem::Version
|
29
|
-
version: '2.
|
30
|
+
version: '2.19'
|
30
31
|
- - "<"
|
31
32
|
- !ruby/object:Gem::Version
|
32
|
-
version: '
|
33
|
+
version: '3.0'
|
33
34
|
- !ruby/object:Gem::Dependency
|
34
35
|
name: carrot-top
|
35
36
|
requirement: !ruby/object:Gem::Requirement
|
@@ -50,14 +51,14 @@ dependencies:
|
|
50
51
|
requirements:
|
51
52
|
- - "~>"
|
52
53
|
- !ruby/object:Gem::Version
|
53
|
-
version: '1.
|
54
|
+
version: '1.15'
|
54
55
|
type: :runtime
|
55
56
|
prerelease: false
|
56
57
|
version_requirements: !ruby/object:Gem::Requirement
|
57
58
|
requirements:
|
58
59
|
- - "~>"
|
59
60
|
- !ruby/object:Gem::Version
|
60
|
-
version: '1.
|
61
|
+
version: '1.15'
|
61
62
|
- !ruby/object:Gem::Dependency
|
62
63
|
name: activesupport
|
63
64
|
requirement: !ruby/object:Gem::Requirement
|
@@ -67,7 +68,7 @@ dependencies:
|
|
67
68
|
version: '4.2'
|
68
69
|
- - "<"
|
69
70
|
- !ruby/object:Gem::Version
|
70
|
-
version: '
|
71
|
+
version: '8'
|
71
72
|
type: :runtime
|
72
73
|
prerelease: false
|
73
74
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -77,19 +78,18 @@ dependencies:
|
|
77
78
|
version: '4.2'
|
78
79
|
- - "<"
|
79
80
|
- !ruby/object:Gem::Version
|
80
|
-
version: '
|
81
|
+
version: '8'
|
81
82
|
description: Hutch is a Ruby library for enabling asynchronous inter-service communication
|
82
|
-
using RabbitMQ
|
83
|
+
using RabbitMQ
|
83
84
|
email:
|
84
|
-
- developers@gocardless.com
|
85
85
|
executables:
|
86
86
|
- hutch
|
87
87
|
extensions: []
|
88
88
|
extra_rdoc_files: []
|
89
89
|
files:
|
90
|
+
- ".github/workflows/test.yml"
|
90
91
|
- ".gitignore"
|
91
92
|
- ".rspec"
|
92
|
-
- ".travis.yml"
|
93
93
|
- ".yardopts"
|
94
94
|
- CHANGELOG.md
|
95
95
|
- Gemfile
|
@@ -98,6 +98,7 @@ files:
|
|
98
98
|
- README.md
|
99
99
|
- Rakefile
|
100
100
|
- bin/ci/before_build.sh
|
101
|
+
- bin/ci/before_build_docker.sh
|
101
102
|
- bin/ci/install_on_debian.sh
|
102
103
|
- bin/hutch
|
103
104
|
- examples/consumer.rb
|
@@ -116,10 +117,12 @@ files:
|
|
116
117
|
- lib/hutch/error_handlers.rb
|
117
118
|
- lib/hutch/error_handlers/airbrake.rb
|
118
119
|
- lib/hutch/error_handlers/base.rb
|
120
|
+
- lib/hutch/error_handlers/bugsnag.rb
|
119
121
|
- lib/hutch/error_handlers/honeybadger.rb
|
120
122
|
- lib/hutch/error_handlers/logger.rb
|
121
123
|
- lib/hutch/error_handlers/rollbar.rb
|
122
124
|
- lib/hutch/error_handlers/sentry.rb
|
125
|
+
- lib/hutch/error_handlers/sentry_raven.rb
|
123
126
|
- lib/hutch/exceptions.rb
|
124
127
|
- lib/hutch/logging.rb
|
125
128
|
- lib/hutch/message.rb
|
@@ -127,6 +130,7 @@ files:
|
|
127
130
|
- lib/hutch/serializers/identity.rb
|
128
131
|
- lib/hutch/serializers/json.rb
|
129
132
|
- lib/hutch/tracers.rb
|
133
|
+
- lib/hutch/tracers/datadog.rb
|
130
134
|
- lib/hutch/tracers/newrelic.rb
|
131
135
|
- lib/hutch/tracers/null_tracer.rb
|
132
136
|
- lib/hutch/version.rb
|
@@ -139,13 +143,16 @@ files:
|
|
139
143
|
- spec/hutch/config_spec.rb
|
140
144
|
- spec/hutch/consumer_spec.rb
|
141
145
|
- spec/hutch/error_handlers/airbrake_spec.rb
|
146
|
+
- spec/hutch/error_handlers/bugsnag_spec.rb
|
142
147
|
- spec/hutch/error_handlers/honeybadger_spec.rb
|
143
148
|
- spec/hutch/error_handlers/logger_spec.rb
|
144
149
|
- spec/hutch/error_handlers/rollbar_spec.rb
|
150
|
+
- spec/hutch/error_handlers/sentry_raven_spec.rb
|
145
151
|
- spec/hutch/error_handlers/sentry_spec.rb
|
146
152
|
- spec/hutch/logger_spec.rb
|
147
153
|
- spec/hutch/message_spec.rb
|
148
154
|
- spec/hutch/serializers/json_spec.rb
|
155
|
+
- spec/hutch/tracers/datadog_spec.rb
|
149
156
|
- spec/hutch/waiter_spec.rb
|
150
157
|
- spec/hutch/worker_spec.rb
|
151
158
|
- spec/hutch_spec.rb
|
@@ -159,11 +166,11 @@ files:
|
|
159
166
|
- templates/default/method_details/text/settings.erb
|
160
167
|
- templates/default/module/html/settings.erb
|
161
168
|
- templates/default/module/setup.rb
|
162
|
-
homepage: https://github.com/
|
169
|
+
homepage: https://github.com/ruby-amqp/hutch
|
163
170
|
licenses:
|
164
171
|
- MIT
|
165
172
|
metadata: {}
|
166
|
-
post_install_message:
|
173
|
+
post_install_message:
|
167
174
|
rdoc_options: []
|
168
175
|
require_paths:
|
169
176
|
- lib
|
@@ -178,23 +185,26 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
178
185
|
- !ruby/object:Gem::Version
|
179
186
|
version: '0'
|
180
187
|
requirements: []
|
181
|
-
rubygems_version: 3.
|
182
|
-
signing_key:
|
188
|
+
rubygems_version: 3.1.4
|
189
|
+
signing_key:
|
183
190
|
specification_version: 4
|
184
|
-
summary:
|
191
|
+
summary: Opinionated asynchronous inter-service communication using RabbitMQ
|
185
192
|
test_files:
|
186
193
|
- spec/hutch/broker_spec.rb
|
187
194
|
- spec/hutch/cli_spec.rb
|
188
195
|
- spec/hutch/config_spec.rb
|
189
196
|
- spec/hutch/consumer_spec.rb
|
190
197
|
- spec/hutch/error_handlers/airbrake_spec.rb
|
198
|
+
- spec/hutch/error_handlers/bugsnag_spec.rb
|
191
199
|
- spec/hutch/error_handlers/honeybadger_spec.rb
|
192
200
|
- spec/hutch/error_handlers/logger_spec.rb
|
193
201
|
- spec/hutch/error_handlers/rollbar_spec.rb
|
202
|
+
- spec/hutch/error_handlers/sentry_raven_spec.rb
|
194
203
|
- spec/hutch/error_handlers/sentry_spec.rb
|
195
204
|
- spec/hutch/logger_spec.rb
|
196
205
|
- spec/hutch/message_spec.rb
|
197
206
|
- spec/hutch/serializers/json_spec.rb
|
207
|
+
- spec/hutch/tracers/datadog_spec.rb
|
198
208
|
- spec/hutch/waiter_spec.rb
|
199
209
|
- spec/hutch/worker_spec.rb
|
200
210
|
- spec/hutch_spec.rb
|