freddy 1.5.0 → 2.1.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/.github/workflows/ci.yml +31 -0
- data/.rubocop.yml +9 -28
- data/.ruby-gemset +1 -1
- data/.ruby-version +1 -1
- data/Gemfile +3 -4
- data/README.md +49 -18
- data/freddy.gemspec +12 -18
- data/lib/freddy/adapters/bunny_adapter.rb +21 -4
- data/lib/freddy/adapters.rb +3 -28
- data/lib/freddy/consumers/respond_to_consumer.rb +3 -13
- data/lib/freddy/consumers/response_consumer.rb +2 -4
- data/lib/freddy/consumers/tap_into_consumer.rb +41 -25
- data/lib/freddy/consumers.rb +1 -1
- data/lib/freddy/delivery.rb +46 -13
- data/lib/freddy/encoding.rb +27 -0
- data/lib/freddy/payload.rb +4 -34
- data/lib/freddy/producers/reply_producer.rb +12 -5
- data/lib/freddy/producers/send_and_forget_producer.rb +9 -12
- data/lib/freddy/producers/send_and_wait_response_producer.rb +19 -33
- data/lib/freddy/producers.rb +1 -1
- data/lib/freddy/request_manager.rb +1 -9
- data/lib/freddy/tracing.rb +37 -0
- data/lib/freddy/version.rb +5 -0
- data/lib/freddy.rb +27 -20
- data/spec/.rubocop.yml +26 -0
- data/spec/freddy/error_response_spec.rb +6 -6
- data/spec/freddy/freddy_spec.rb +23 -0
- data/spec/freddy/payload_spec.rb +25 -16
- data/spec/integration/concurrency_spec.rb +8 -12
- data/spec/integration/tap_into_with_group_spec.rb +34 -0
- data/spec/integration/tracing_spec.rb +15 -32
- data/spec/spec_helper.rb +5 -13
- metadata +44 -17
- data/.npmignore +0 -8
- data/.travis.yml +0 -13
- data/lib/freddy/adapters/march_hare_adapter.rb +0 -64
- data/lib/freddy/trace_carrier.rb +0 -28
- data/spec/freddy/trace_carrier_spec.rb +0 -56
data/spec/spec_helper.rb
CHANGED
@@ -2,14 +2,9 @@ require 'rubygems'
|
|
2
2
|
require 'bundler'
|
3
3
|
Bundler.setup
|
4
4
|
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
SimpleCov::Formatter::HTMLFormatter,
|
9
|
-
CodeClimate::TestReporter::Formatter
|
10
|
-
])
|
11
|
-
add_filter '/spec/'
|
12
|
-
end
|
5
|
+
ENV['OTEL_TRACES_EXPORTER'] = 'none'
|
6
|
+
require 'opentelemetry/sdk'
|
7
|
+
OpenTelemetry::SDK.configure
|
13
8
|
|
14
9
|
require 'pry'
|
15
10
|
require 'freddy'
|
@@ -22,10 +17,6 @@ RSpec.configure do |config|
|
|
22
17
|
config.run_all_when_everything_filtered = true
|
23
18
|
config.filter_run :focus
|
24
19
|
config.order = 'random'
|
25
|
-
|
26
|
-
config.before do
|
27
|
-
OpenTracing.global_tracer ||= OpenTracing::Tracer.new
|
28
|
-
end
|
29
20
|
end
|
30
21
|
|
31
22
|
def random_destination
|
@@ -43,6 +34,7 @@ end
|
|
43
34
|
def wait_for
|
44
35
|
100.times do
|
45
36
|
return if yield
|
37
|
+
|
46
38
|
sleep 0.005
|
47
39
|
end
|
48
40
|
end
|
@@ -53,7 +45,7 @@ def deliver(custom_destination = destination)
|
|
53
45
|
end
|
54
46
|
|
55
47
|
def logger
|
56
|
-
Logger.new(
|
48
|
+
Logger.new($stdout).tap { |l| l.level = Logger::ERROR }
|
57
49
|
end
|
58
50
|
|
59
51
|
def config
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: freddy
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 2.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
|
-
-
|
7
|
+
- Glia TechMovers
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-09-07 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -67,19 +67,33 @@ dependencies:
|
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: '3.6'
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
|
-
name:
|
70
|
+
name: opentelemetry-api
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
72
72
|
requirements:
|
73
73
|
- - "~>"
|
74
74
|
- !ruby/object:Gem::Version
|
75
|
-
version:
|
75
|
+
version: 1.0.0.rc3
|
76
76
|
type: :runtime
|
77
77
|
prerelease: false
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
80
80
|
- - "~>"
|
81
81
|
- !ruby/object:Gem::Version
|
82
|
-
version:
|
82
|
+
version: 1.0.0.rc3
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: opentelemetry-semantic_conventions
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - "~>"
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '1.0'
|
90
|
+
type: :runtime
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - "~>"
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '1.0'
|
83
97
|
- !ruby/object:Gem::Dependency
|
84
98
|
name: thread
|
85
99
|
requirement: !ruby/object:Gem::Requirement
|
@@ -94,6 +108,20 @@ dependencies:
|
|
94
108
|
- - "~>"
|
95
109
|
- !ruby/object:Gem::Version
|
96
110
|
version: '0.1'
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: zlib
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - "~>"
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '1.1'
|
118
|
+
type: :runtime
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - "~>"
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: '1.1'
|
97
125
|
description: Messaging API
|
98
126
|
email:
|
99
127
|
- techmovers@salemove.com
|
@@ -101,13 +129,12 @@ executables: []
|
|
101
129
|
extensions: []
|
102
130
|
extra_rdoc_files: []
|
103
131
|
files:
|
132
|
+
- ".github/workflows/ci.yml"
|
104
133
|
- ".gitignore"
|
105
|
-
- ".npmignore"
|
106
134
|
- ".rspec"
|
107
135
|
- ".rubocop.yml"
|
108
136
|
- ".ruby-gemset"
|
109
137
|
- ".ruby-version"
|
110
|
-
- ".travis.yml"
|
111
138
|
- Gemfile
|
112
139
|
- LICENCE.txt
|
113
140
|
- README.md
|
@@ -116,12 +143,12 @@ files:
|
|
116
143
|
- lib/freddy.rb
|
117
144
|
- lib/freddy/adapters.rb
|
118
145
|
- lib/freddy/adapters/bunny_adapter.rb
|
119
|
-
- lib/freddy/adapters/march_hare_adapter.rb
|
120
146
|
- lib/freddy/consumers.rb
|
121
147
|
- lib/freddy/consumers/respond_to_consumer.rb
|
122
148
|
- lib/freddy/consumers/response_consumer.rb
|
123
149
|
- lib/freddy/consumers/tap_into_consumer.rb
|
124
150
|
- lib/freddy/delivery.rb
|
151
|
+
- lib/freddy/encoding.rb
|
125
152
|
- lib/freddy/error_response.rb
|
126
153
|
- lib/freddy/invalid_request_error.rb
|
127
154
|
- lib/freddy/message_handler.rb
|
@@ -135,7 +162,9 @@ files:
|
|
135
162
|
- lib/freddy/responder_handler.rb
|
136
163
|
- lib/freddy/sync_response_container.rb
|
137
164
|
- lib/freddy/timeout_error.rb
|
138
|
-
- lib/freddy/
|
165
|
+
- lib/freddy/tracing.rb
|
166
|
+
- lib/freddy/version.rb
|
167
|
+
- spec/.rubocop.yml
|
139
168
|
- spec/freddy/consumers/respond_to_consumer_spec.rb
|
140
169
|
- spec/freddy/error_response_spec.rb
|
141
170
|
- spec/freddy/freddy_spec.rb
|
@@ -143,15 +172,14 @@ files:
|
|
143
172
|
- spec/freddy/payload_spec.rb
|
144
173
|
- spec/freddy/responder_handler_spec.rb
|
145
174
|
- spec/freddy/sync_response_container_spec.rb
|
146
|
-
- spec/freddy/trace_carrier_spec.rb
|
147
175
|
- spec/integration/concurrency_spec.rb
|
148
176
|
- spec/integration/reply_spec.rb
|
149
177
|
- spec/integration/tap_into_with_group_spec.rb
|
150
178
|
- spec/integration/tracing_spec.rb
|
151
179
|
- spec/spec_helper.rb
|
152
|
-
homepage:
|
180
|
+
homepage: https://github.com/salemove/freddy
|
153
181
|
licenses:
|
154
|
-
-
|
182
|
+
- MIT
|
155
183
|
metadata: {}
|
156
184
|
post_install_message:
|
157
185
|
rdoc_options: []
|
@@ -161,19 +189,19 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
161
189
|
requirements:
|
162
190
|
- - ">="
|
163
191
|
- !ruby/object:Gem::Version
|
164
|
-
version: '
|
192
|
+
version: '2.6'
|
165
193
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
166
194
|
requirements:
|
167
195
|
- - ">="
|
168
196
|
- !ruby/object:Gem::Version
|
169
197
|
version: '0'
|
170
198
|
requirements: []
|
171
|
-
|
172
|
-
rubygems_version: 2.6.11
|
199
|
+
rubygems_version: 3.1.4
|
173
200
|
signing_key:
|
174
201
|
specification_version: 4
|
175
202
|
summary: API for inter-application messaging supporting acknowledgements and request-response
|
176
203
|
test_files:
|
204
|
+
- spec/.rubocop.yml
|
177
205
|
- spec/freddy/consumers/respond_to_consumer_spec.rb
|
178
206
|
- spec/freddy/error_response_spec.rb
|
179
207
|
- spec/freddy/freddy_spec.rb
|
@@ -181,7 +209,6 @@ test_files:
|
|
181
209
|
- spec/freddy/payload_spec.rb
|
182
210
|
- spec/freddy/responder_handler_spec.rb
|
183
211
|
- spec/freddy/sync_response_container_spec.rb
|
184
|
-
- spec/freddy/trace_carrier_spec.rb
|
185
212
|
- spec/integration/concurrency_spec.rb
|
186
213
|
- spec/integration/reply_spec.rb
|
187
214
|
- spec/integration/tap_into_with_group_spec.rb
|
data/.npmignore
DELETED
data/.travis.yml
DELETED
@@ -1,13 +0,0 @@
|
|
1
|
-
language: ruby
|
2
|
-
rvm:
|
3
|
-
- 2.4.1
|
4
|
-
- jruby-9.1.5.0
|
5
|
-
addons:
|
6
|
-
code_climate:
|
7
|
-
repo_token: 1f3842b985fdeff6a36168165d491ca5f444667e9381a85c899a61706a9dd285
|
8
|
-
services:
|
9
|
-
- rabbitmq
|
10
|
-
before_script:
|
11
|
-
- gem install bundler
|
12
|
-
- bundle install
|
13
|
-
script: bundle exec rake
|
@@ -1,64 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'march_hare'
|
4
|
-
|
5
|
-
class Freddy
|
6
|
-
module Adapters
|
7
|
-
class MarchHareAdapter
|
8
|
-
def self.connect(config)
|
9
|
-
hare = MarchHare.connect(config)
|
10
|
-
new(hare)
|
11
|
-
end
|
12
|
-
|
13
|
-
def initialize(hare)
|
14
|
-
@hare = hare
|
15
|
-
end
|
16
|
-
|
17
|
-
def create_channel(prefetch: nil)
|
18
|
-
hare_channel = @hare.create_channel
|
19
|
-
hare_channel.basic_qos(prefetch) if prefetch
|
20
|
-
Channel.new(hare_channel)
|
21
|
-
end
|
22
|
-
|
23
|
-
def close
|
24
|
-
@hare.close
|
25
|
-
end
|
26
|
-
|
27
|
-
class Channel
|
28
|
-
extend Forwardable
|
29
|
-
|
30
|
-
NO_ROUTE = 312
|
31
|
-
|
32
|
-
def initialize(channel)
|
33
|
-
@channel = channel
|
34
|
-
end
|
35
|
-
|
36
|
-
def_delegators :@channel, :topic, :default_exchange, :consumers, :acknowledge
|
37
|
-
|
38
|
-
def queue(*args)
|
39
|
-
Queue.new(@channel.queue(*args))
|
40
|
-
end
|
41
|
-
|
42
|
-
def on_no_route
|
43
|
-
@channel.on_return do |reply_code, _, exchange_name, _, properties|
|
44
|
-
if exchange_name != Freddy::FREDDY_TOPIC_EXCHANGE_NAME && reply_code == NO_ROUTE
|
45
|
-
yield(properties.correlation_id)
|
46
|
-
end
|
47
|
-
end
|
48
|
-
end
|
49
|
-
end
|
50
|
-
|
51
|
-
class Queue < Shared::Queue
|
52
|
-
def subscribe(manual_ack: false)
|
53
|
-
@queue.subscribe(manual_ack: manual_ack) do |meta, payload|
|
54
|
-
parsed_payload = Payload.parse(payload)
|
55
|
-
delivery = Delivery.new(
|
56
|
-
parsed_payload, meta, meta.routing_key, meta.delivery_tag
|
57
|
-
)
|
58
|
-
yield(delivery)
|
59
|
-
end
|
60
|
-
end
|
61
|
-
end
|
62
|
-
end
|
63
|
-
end
|
64
|
-
end
|
data/lib/freddy/trace_carrier.rb
DELETED
@@ -1,28 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
class Freddy
|
4
|
-
# Carrier for rabbitmq following OpenTracing API
|
5
|
-
# See https://github.com/opentracing/opentracing-ruby/blob/master/lib/opentracing/carrier.rb
|
6
|
-
class TraceCarrier
|
7
|
-
def initialize(properties)
|
8
|
-
@properties = properties
|
9
|
-
end
|
10
|
-
|
11
|
-
def [](key)
|
12
|
-
@properties.headers && @properties.headers["x-trace-#{key}"]
|
13
|
-
end
|
14
|
-
|
15
|
-
def []=(key, value)
|
16
|
-
@properties[:headers] ||= {}
|
17
|
-
@properties[:headers]["x-trace-#{key}"] = value
|
18
|
-
end
|
19
|
-
|
20
|
-
def each(&block)
|
21
|
-
Hash[
|
22
|
-
(@properties.headers || {})
|
23
|
-
.select { |key, _| key =~ /^x-trace/ }
|
24
|
-
.map { |key, value| [key.sub(/x-trace-/, ''), value] }
|
25
|
-
].each(&block)
|
26
|
-
end
|
27
|
-
end
|
28
|
-
end
|
@@ -1,56 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe Freddy::TraceCarrier do
|
4
|
-
subject(:carrier) { described_class.new(properties) }
|
5
|
-
|
6
|
-
context 'when adding trace information' do
|
7
|
-
let(:properties) { { x: 'y' } }
|
8
|
-
let(:key_name) { 'some-key' }
|
9
|
-
let(:key_value) { 'some-key' }
|
10
|
-
|
11
|
-
it 'adds a header with x-trace- prefix' do
|
12
|
-
carrier[key_name] = key_value
|
13
|
-
expect(properties[:headers]["x-trace-#{key_name}"]).to eq(key_value)
|
14
|
-
end
|
15
|
-
end
|
16
|
-
|
17
|
-
context 'when extracting trace information' do
|
18
|
-
let(:key_name) { 'some-key' }
|
19
|
-
let(:serialized_key_name) { "x-trace-#{key_name}" }
|
20
|
-
let(:key_value) { 'some-key' }
|
21
|
-
|
22
|
-
let(:properties) do
|
23
|
-
double(headers: { serialized_key_name => key_value })
|
24
|
-
end
|
25
|
-
|
26
|
-
it 'extracts a header with x-trace- prefix' do
|
27
|
-
expect(carrier[key_name]).to eq(key_value)
|
28
|
-
end
|
29
|
-
end
|
30
|
-
|
31
|
-
describe '#each' do
|
32
|
-
context 'when headers are present' do
|
33
|
-
let(:properties) do
|
34
|
-
double(
|
35
|
-
headers: {
|
36
|
-
'x-trace-key1' => 'value1',
|
37
|
-
'x-trace-key2' => 'value2',
|
38
|
-
'other-key' => 'value3'
|
39
|
-
}
|
40
|
-
)
|
41
|
-
end
|
42
|
-
|
43
|
-
it 'iterates over keys starting with x-trace- prefix' do
|
44
|
-
expect(carrier.each.count).to eq(2)
|
45
|
-
end
|
46
|
-
end
|
47
|
-
|
48
|
-
context 'when no headers' do
|
49
|
-
let(:properties) { double(headers: nil) }
|
50
|
-
|
51
|
-
it 'iterates over an empty list' do
|
52
|
-
expect(carrier.each.count).to eq(0)
|
53
|
-
end
|
54
|
-
end
|
55
|
-
end
|
56
|
-
end
|