freddy 1.3.3 → 1.4.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 6809d8dfe197985c19b6532983f40188859b6bd6
4
- data.tar.gz: c1d04587a9098019a7a7ccb832c520cabfa6031d
3
+ metadata.gz: 98d55ddef79dc7231d80d81a8c777a20ffa09685
4
+ data.tar.gz: c3f6ab7881cc7c22bcee599db7c60318522fe8a2
5
5
  SHA512:
6
- metadata.gz: d3d3963b6684b4666459e31f5985da07243ef7296cd19c60d63a54f1abde9a1f6e960a60d49eabc3922b9a92a15a01b9a96fdfc759f5f96aa24098793723313e
7
- data.tar.gz: 9b9e3e1dd2d0660163f7bbad86ecced0e710a1ec6c34ccc9c0c5af1f77f492f9cb7ae4975813e82a2f620d4cae1a376e27d21cadeb9d57f7483900e0d5468436
6
+ metadata.gz: fb2fb6945b67811ed7b211d360ffba3f0b63a2ba4a8dcc7bf5f94f3f8c46ca0fb9092a0ab982b69804bf4d054152df1ac4a8bf01df98058bb095890820f86482
7
+ data.tar.gz: c56d8aaffbe32d22c5e5e761f4a13d0c9075ca398ca5865c4808d9d9b38e3c550b64326bb747d8de4141eaeddeb582614ad8aafd9f0e772349a30948850b8f27
data/Gemfile CHANGED
@@ -4,6 +4,6 @@ gem 'rspec'
4
4
  gem 'pry'
5
5
  gem 'codeclimate-test-reporter'
6
6
  gem 'hamster', '~> 3.0'
7
- gem 'logasm-tracer', '0.3.0'
7
+ gem 'opentracing_test_tracer', '~> 0.1'
8
8
 
9
9
  gemspec
data/README.md CHANGED
@@ -142,34 +142,9 @@ Freddy supports [OpenTracing API|https://github.com/opentracing/opentracing-ruby
142
142
  OpenTracing.global_tracing = MyTracerImplementation.new(...)
143
143
  ```
144
144
 
145
- For example you can use [Logasm::Tracer](https://github.com/salemove/logasm-tracer) which will log all incoming and outgoing requests with trace ID, parent ID and span ID.
145
+ Current trace can be accessed through a thread-local variable `OpenTracing.active_span`. Calling `deliver` or `deliver_with_response` will pass trace context to down-stream services.
146
146
 
147
- Current trace can be accessed through a thread-local variable `Freddy.trace`. Calling `deliver` or `deliver_with_response` will pass trace context to down-stream services.
148
-
149
- Accessing trace information when using Logasm::Tracer implementation:
150
-
151
- ```ruby
152
- freddy1 = Freddy.build
153
- freddy1.respond_do('service1') do |payload, msg_handler|
154
- puts "Trace id: #{Freddy.trace.context.trace_id}"
155
- puts "Span id: #{Freddy.trace.context.span_id}"
156
-
157
- freddy1.deliver('service2', {})
158
- end
159
-
160
- freddy2 = Freddy.build
161
- freddy2.tap_into('service2') do |payload|
162
- puts "Has same trace_id as the request in service1: #{Freddy.trace.context.trace_id}"
163
- puts "Has service1 request span id as parent id: #{Freddy.trace.context.parent_id}"
164
- puts "Has its own generated span id: #{Freddy.trace.context.span_id}"
165
- end
166
- ```
167
-
168
- In case you already have an ongoing OpenTracing span (e.g. provided by REST API) then you can pass the trace information to Freddy by doing:
169
- ```ruby
170
- Freddy.trace = trace_span
171
- ```
172
- The `trace_span` must implement OpenTracing::Span interface.
147
+ See [opentracing-ruby](https://github.com/opentracing/opentracing-ruby) for more information.
173
148
 
174
149
  ## Notes about concurrency
175
150
 
data/freddy.gemspec CHANGED
@@ -8,7 +8,7 @@ Gem::Specification.new do |spec|
8
8
  else
9
9
  spec.name = "freddy"
10
10
  end
11
- spec.version = '1.3.3'
11
+ spec.version = '1.4.0'
12
12
  spec.authors = ["Salemove TechMovers"]
13
13
  spec.email = ["techmovers@salemove.com"]
14
14
  spec.description = %q{Messaging API}
@@ -34,14 +34,14 @@ class Freddy
34
34
  def process_message(delivery, &block)
35
35
  @consume_thread_pool.process do
36
36
  begin
37
- Freddy.trace = delivery.build_trace("freddy:respond:#{@destination}",
37
+ scope = delivery.build_trace("freddy:respond:#{@destination}",
38
38
  tags: {
39
39
  'peer.address': "#{@destination}:#{delivery.payload[:type]}",
40
40
  'component': 'freddy',
41
41
  'span.kind': 'server' # RPC
42
42
  }
43
43
  )
44
- Freddy.trace.log_kv(
44
+ scope.span.log_kv(
45
45
  event: 'Received message through respond_to',
46
46
  queue: @destination,
47
47
  payload: delivery.payload,
@@ -51,8 +51,7 @@ class Freddy
51
51
  block.call(delivery)
52
52
  ensure
53
53
  @channel.acknowledge(delivery.tag, false)
54
- Freddy.trace.finish
55
- Freddy.trace = nil
54
+ scope.close
56
55
  end
57
56
  end
58
57
  end
@@ -42,7 +42,7 @@ class Freddy
42
42
  def process_message(queue, delivery, &block)
43
43
  @consume_thread_pool.process do
44
44
  begin
45
- Freddy.trace = delivery.build_trace("freddy:observe:#{@pattern}",
45
+ scope = delivery.build_trace("freddy:observe:#{@pattern}",
46
46
  tags: {
47
47
  'message_bus.destination': @pattern,
48
48
  'component': 'freddy',
@@ -50,7 +50,7 @@ class Freddy
50
50
  },
51
51
  force_follows_from: true
52
52
  )
53
- Freddy.trace.log_kv(
53
+ scope.span.log_kv(
54
54
  event: 'Received message through tap_into',
55
55
  payload: delivery.payload,
56
56
  correlation_id: delivery.correlation_id
@@ -59,8 +59,7 @@ class Freddy
59
59
  block.call delivery.payload, delivery.routing_key
60
60
  ensure
61
61
  @channel.acknowledge(delivery.tag, false)
62
- Freddy.trace.finish
63
- Freddy.trace = nil
62
+ scope.close
64
63
  end
65
64
  end
66
65
  end
@@ -23,23 +23,18 @@ class Freddy
23
23
 
24
24
  def build_trace(operation_name, tags: {}, force_follows_from: false)
25
25
  carrier = TraceCarrier.new(@metadata)
26
- parent =
27
- if expecting_response? && !force_follows_from
28
- OpenTracing.global_tracer.extract(OpenTracing::FORMAT_TEXT_MAP, carrier)
26
+ parent = OpenTracing.global_tracer.extract(OpenTracing::FORMAT_TEXT_MAP, carrier)
27
+
28
+ references =
29
+ if !parent
30
+ []
31
+ elsif force_follows_from
32
+ [OpenTracing::Reference.follows_from(parent)]
29
33
  else
30
- nil
34
+ [OpenTracing::Reference.child_of(parent)]
31
35
  end
32
36
 
33
- # Creating a child span when the message sender is expecting a response.
34
- # Otherwise creating a new trace because the OpenTracing client does not
35
- # support FollowsFrom yet.
36
- OpenTracing.start_span(operation_name, child_of: parent, tags: tags)
37
- end
38
-
39
- private
40
-
41
- def expecting_response?
42
- type == 'request'
37
+ OpenTracing.start_active_span(operation_name, references: references, tags: tags)
43
38
  end
44
39
  end
45
40
  end
@@ -9,7 +9,11 @@ class Freddy
9
9
  end
10
10
 
11
11
  def produce(destination, payload, properties)
12
- Freddy.trace.log_kv event: 'Sending response', queue: destination, payload: payload
12
+ OpenTracing.active_span.log_kv(
13
+ event: 'Sending response',
14
+ queue: destination,
15
+ payload: payload
16
+ )
13
17
 
14
18
  properties = properties.merge(
15
19
  routing_key: destination,
@@ -11,7 +11,6 @@ class Freddy
11
11
 
12
12
  def produce(destination, payload, properties)
13
13
  span = OpenTracing.start_span("freddy:notify:#{destination}",
14
- child_of: Freddy.trace,
15
14
  tags: {
16
15
  'message_bus.destination': destination,
17
16
  'component': 'freddy',
@@ -24,11 +24,10 @@ class Freddy
24
24
 
25
25
  def produce(destination, payload, timeout_in_seconds:, delete_on_timeout:, **properties)
26
26
  span = OpenTracing.start_span("freddy:request:#{destination}",
27
- child_of: Freddy.trace,
28
27
  tags: {
29
28
  'component': 'freddy',
30
29
  'span.kind': 'client', # RPC
31
- 'payload.type': payload[:type]
30
+ 'payload.type': payload[:type] || 'unknown'
32
31
  }
33
32
  )
34
33
 
data/lib/freddy.rb CHANGED
@@ -32,12 +32,16 @@ class Freddy
32
32
  new(connection, logger, max_concurrency)
33
33
  end
34
34
 
35
+ # @deprecated Use {OpenTracing.active_span} instead
35
36
  def self.trace
36
- Thread.current[:freddy_trace]
37
+ OpenTracing.active_span
37
38
  end
38
39
 
40
+ # @deprecated Use OpenTracing ScopeManager instead
39
41
  def self.trace=(trace)
40
- Thread.current[:freddy_trace] = trace
42
+ if OpenTracing.active_span != trace
43
+ OpenTracing.scope_manager.activate(trace)
44
+ end
41
45
  end
42
46
 
43
47
  def initialize(connection, logger, max_concurrency)
@@ -1,8 +1,8 @@
1
1
  require 'spec_helper'
2
- require 'logasm/tracer'
2
+ require 'opentracing_test_tracer'
3
3
 
4
4
  describe 'Tracing' do
5
- let(:tracer) { Logasm::Tracer.new(logger) }
5
+ let(:tracer) { OpenTracingTestTracer.build(logger: logger) }
6
6
  let(:logger) { spy }
7
7
 
8
8
  before { OpenTracing.global_tracer = tracer }
@@ -19,9 +19,9 @@ describe 'Tracing' do
19
19
  freddy.respond_to(destination) do |payload, msg_handler|
20
20
  msg_handler.success({
21
21
  trace_initiator: {
22
- trace_id: Freddy.trace.context.trace_id,
23
- parent_id: Freddy.trace.context.parent_id,
24
- span_id: Freddy.trace.context.span_id
22
+ trace_id: active_span.context.trace_id,
23
+ parent_id: active_span.context.parent_id,
24
+ span_id: active_span.context.span_id
25
25
  },
26
26
  current_receiver: freddy.deliver_with_response(destination2, {})
27
27
  })
@@ -29,9 +29,9 @@ describe 'Tracing' do
29
29
 
30
30
  freddy2.respond_to(destination2) do |payload, msg_handler|
31
31
  msg_handler.success({
32
- trace_id: Freddy.trace.context.trace_id,
33
- parent_id: Freddy.trace.context.parent_id,
34
- span_id: Freddy.trace.context.span_id
32
+ trace_id: active_span.context.trace_id,
33
+ parent_id: active_span.context.parent_id,
34
+ span_id: active_span.context.span_id
35
35
  })
36
36
  end
37
37
  end
@@ -76,9 +76,9 @@ describe 'Tracing' do
76
76
  freddy.respond_to(destination) do |payload, msg_handler|
77
77
  msg_handler.success({
78
78
  trace_initiator: {
79
- trace_id: Freddy.trace.context.trace_id,
80
- parent_id: Freddy.trace.context.parent_id,
81
- span_id: Freddy.trace.context.span_id
79
+ trace_id: active_span.context.trace_id,
80
+ parent_id: active_span.context.parent_id,
81
+ span_id: active_span.context.span_id
82
82
  }
83
83
  }.merge(freddy.deliver_with_response(destination2, {})))
84
84
  end
@@ -86,9 +86,9 @@ describe 'Tracing' do
86
86
  freddy2.respond_to(destination2) do |payload, msg_handler|
87
87
  msg_handler.success({
88
88
  previous_receiver: {
89
- trace_id: Freddy.trace.context.trace_id,
90
- parent_id: Freddy.trace.context.parent_id,
91
- span_id: Freddy.trace.context.span_id
89
+ trace_id: active_span.context.trace_id,
90
+ parent_id: active_span.context.parent_id,
91
+ span_id: active_span.context.span_id
92
92
  },
93
93
  current_receiver: freddy2.deliver_with_response(destination3, {})
94
94
  })
@@ -96,9 +96,9 @@ describe 'Tracing' do
96
96
 
97
97
  freddy3.respond_to(destination3) do |payload, msg_handler|
98
98
  msg_handler.success({
99
- trace_id: Freddy.trace.context.trace_id,
100
- parent_id: Freddy.trace.context.parent_id,
101
- span_id: Freddy.trace.context.span_id
99
+ trace_id: active_span.context.trace_id,
100
+ parent_id: active_span.context.parent_id,
101
+ span_id: active_span.context.span_id
102
102
  })
103
103
  end
104
104
  end
@@ -130,4 +130,8 @@ describe 'Tracing' do
130
130
  expect(current_receiver.fetch(:span_id)).to_not eq(previous_receiver.fetch(:span_id))
131
131
  end
132
132
  end
133
+
134
+ def active_span
135
+ OpenTracing.active_span
136
+ end
133
137
  end
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.3.3
4
+ version: 1.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Salemove TechMovers
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-05-09 00:00:00.000000000 Z
11
+ date: 2018-07-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -144,7 +144,6 @@ files:
144
144
  - spec/freddy/sync_response_container_spec.rb
145
145
  - spec/freddy/trace_carrier_spec.rb
146
146
  - spec/integration/concurrency_spec.rb
147
- - spec/integration/logging_spec.rb
148
147
  - spec/integration/reply_spec.rb
149
148
  - spec/integration/tap_into_with_group_spec.rb
150
149
  - spec/integration/tracing_spec.rb
@@ -183,7 +182,6 @@ test_files:
183
182
  - spec/freddy/sync_response_container_spec.rb
184
183
  - spec/freddy/trace_carrier_spec.rb
185
184
  - spec/integration/concurrency_spec.rb
186
- - spec/integration/logging_spec.rb
187
185
  - spec/integration/reply_spec.rb
188
186
  - spec/integration/tap_into_with_group_spec.rb
189
187
  - spec/integration/tracing_spec.rb
@@ -1,101 +0,0 @@
1
- require 'spec_helper'
2
- require 'logasm/tracer'
3
-
4
- describe 'Logging with Logasm::Tracer' do
5
- let(:logger) { ArrayLogger.new }
6
- let(:tracer) { Logasm::Tracer.new(logger) }
7
-
8
- before { OpenTracing.global_tracer = tracer }
9
- after { OpenTracing.global_tracer = nil }
10
-
11
- context 'when receiving an untraced request' do
12
- let(:freddy) { Freddy.build(spy, config) }
13
- let(:destination) { random_destination }
14
-
15
- before do
16
- freddy.respond_to(destination) do |payload, msg_handler|
17
- sleep 0.1 # emulate some processing
18
- msg_handler.success({})
19
- end
20
- end
21
-
22
- after { freddy.close }
23
-
24
- it 'generates a trace' do
25
- freddy.deliver_with_response(destination, {})
26
-
27
- expect(logger.calls.map(&:first)).to eq([
28
- # Initiator
29
- "Span [freddy:request:#{destination}] started",
30
- "Span [freddy:request:#{destination}] Publishing request",
31
-
32
- # Service
33
- "Span [freddy:respond:#{destination}] started",
34
- "Span [freddy:respond:#{destination}] Received message through respond_to",
35
- "Span [freddy:respond:#{destination}] Sending response",
36
- "Span [freddy:respond:#{destination}] finished",
37
-
38
- # Initiator
39
- "Span [freddy:request:#{destination}] finished"
40
- ])
41
- end
42
- end
43
-
44
- context 'when receiving a traced request' do
45
- let(:freddy) { Freddy.build(spy, config) }
46
- let(:freddy2) { Freddy.build(spy, config) }
47
-
48
- let(:destination) { random_destination }
49
- let(:destination2) { random_destination }
50
-
51
- before do
52
- freddy.respond_to(destination) do |payload, msg_handler|
53
- sleep 0.1 # emulate some processing
54
- msg_handler.success({
55
- trace_initiator: {},
56
- current_receiver: freddy.deliver_with_response(destination2, {})
57
- })
58
- end
59
-
60
- freddy2.respond_to(destination2) do |payload, msg_handler|
61
- sleep 0.1 # emulate some processing
62
- msg_handler.success({})
63
- end
64
- end
65
-
66
- after do
67
- freddy.close
68
- freddy2.close
69
- end
70
-
71
- it 'generates a trace' do
72
- freddy.deliver_with_response(destination, {})
73
-
74
- expect(logger.calls.map(&:first)).to eq([
75
- # Initiator
76
- "Span [freddy:request:#{destination}] started",
77
- "Span [freddy:request:#{destination}] Publishing request",
78
-
79
- # Service 1
80
- "Span [freddy:respond:#{destination}] started",
81
- "Span [freddy:respond:#{destination}] Received message through respond_to",
82
- "Span [freddy:request:#{destination2}] started",
83
- "Span [freddy:request:#{destination2}] Publishing request",
84
-
85
- # Service 2
86
- "Span [freddy:respond:#{destination2}] started",
87
- "Span [freddy:respond:#{destination2}] Received message through respond_to",
88
- "Span [freddy:respond:#{destination2}] Sending response",
89
- "Span [freddy:respond:#{destination2}] finished",
90
-
91
- # Service 1
92
- "Span [freddy:request:#{destination2}] finished",
93
- "Span [freddy:respond:#{destination}] Sending response",
94
- "Span [freddy:respond:#{destination}] finished",
95
-
96
- # Initiator
97
- "Span [freddy:request:#{destination}] finished"
98
- ])
99
- end
100
- end
101
- end