request-tracer 0.5.5 → 0.5.6

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,15 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 568a644828b5c78478ff4347ca98b3203953db48
4
- data.tar.gz: 9c78a78c1c80c8b212755c6f8588d02f26380a54
2
+ !binary "U0hBMQ==":
3
+ metadata.gz: !binary |-
4
+ MjhhMTU0YjYxYTg5ZTk0NmRjM2U1NzM3MWUwNjFhODc4NjUzZDIwNg==
5
+ data.tar.gz: !binary |-
6
+ MTI2MWRiNWE2NmJkNDIwZTgzMjJiYWVjMWZmNGQ5OTRjOGNkMzJkMg==
5
7
  SHA512:
6
- metadata.gz: 0f15bd2e483b3497bf50e2662523cf72f63f1d32dd26ea044d56395200d33f1551ab0b28638ef51f2b5dd83cfc1f7afce25257378fb39a533ff4c3e64b6d0539
7
- data.tar.gz: 996680db6d55f1c75c3c02ec2f3655ba9774645b8e934f96edb3df84ed813dfe7092bcdd3c4e0ffb12945c1f0ed0fc32046b9676dd307dd297db7d67abbea2ec
8
+ metadata.gz: !binary |-
9
+ OWMyZTJiMmE2ODJhM2E1NTEwZDg3NjYyNTI2YzgwZjY0OGRmM2QwZTY4ZjM5
10
+ MTU1MDMzMmVmNWM5NGQxZDFjNjE2MjU0M2JmNWEyMDhhZjg1NDIwZTJkNzlj
11
+ Yzk2Zjg2YWQ3ZmRkOTY5ODkyMzUzNzYyNjgwOTU0MDdmZjgxYTk=
12
+ data.tar.gz: !binary |-
13
+ ZTUxYzlkY2U5NTQ2MGNiMTc2OWRhMDcyYzVjNDRhYWE2NTQ4ZTY1OWRhZTg4
14
+ YWZmNTQ4MjZmNzA2MTg1MmQ4YWM3NWExOGRlNWRkOGIwNjllOWI2OGFjNmRm
15
+ OWQ1NGUwODU3YzgxYTg0MmQ3OGIxZjM4MTMzMDI2NWQ3MzFhYzA=
data/.rspec CHANGED
@@ -1 +1,4 @@
1
1
  --require spec_helper.rb
2
+ --color
3
+ --format progress
4
+ --require generative
data/Guardfile CHANGED
@@ -10,7 +10,7 @@ guard :bundler do
10
10
  files.each { |file| watch(helper.real_path(file)) }
11
11
  end
12
12
 
13
- guard :rspec, cmd: "bundle exec rspec -t focus" do
13
+ guard :rspec, cmd: "GENERATIVE_COUNT=5 bundle exec rspec -t focus" do
14
14
  require "guard/rspec/dsl"
15
15
  dsl = Guard::RSpec::Dsl.new(self)
16
16
 
@@ -28,6 +28,7 @@ module RequestTracer
28
28
  end
29
29
  end
30
30
 
31
+ attr_reader :value, :i64
31
32
  def initialize(value)
32
33
  @value = value
33
34
  @i64 = if @value > MAX_SIGNED_I64
@@ -37,6 +38,9 @@ module RequestTracer
37
38
  end
38
39
  end
39
40
 
41
+ def ==(other_span)
42
+ other_span&.value == @value
43
+ end
40
44
  def to_s; "%016x" % @value; end
41
45
  def to_i; @i64; end
42
46
  end
@@ -78,9 +82,7 @@ module RequestTracer
78
82
 
79
83
  def create
80
84
  span_id = generate_id
81
- trace_id = TraceId.new(span_id, nil, span_id)
82
- stack.push(trace_id)
83
- trace_id
85
+ TraceId.new(span_id, nil, span_id)
84
86
  end
85
87
 
86
88
  def latest
@@ -88,7 +90,7 @@ module RequestTracer
88
90
  end
89
91
 
90
92
  def latest_or_create
91
- latest || create
93
+ latest || stack.push(create)
92
94
  end
93
95
 
94
96
  def push(trace_info)
@@ -127,7 +129,7 @@ module RequestTracer
127
129
  end
128
130
 
129
131
  def record(annotation = nil, &block)
130
- tracer.record(latest.next_id, annotation, &block)
132
+ tracer.record(latest&.next_id || create, annotation, &block)
131
133
  end
132
134
 
133
135
  def tracer=(tracer)
@@ -1,3 +1,3 @@
1
1
  module RequestTracer
2
- VERSION = "0.5.5"
2
+ VERSION = "0.5.6"
3
3
  end
@@ -14,11 +14,4 @@ module RequestTracer
14
14
  integration_module.activate
15
15
  end
16
16
  end
17
- def self.annotate(annotation)
18
-
19
- end
20
-
21
- def self.record(annotation=nil, &blk)
22
-
23
- end
24
17
  end
@@ -20,6 +20,7 @@ Gem::Specification.new do |spec|
20
20
  spec.add_development_dependency 'bundler', '~> 1.7'
21
21
  spec.add_development_dependency 'rake', '~> 10.0'
22
22
  spec.add_development_dependency "rspec", "~> 3.4"
23
+ spec.add_development_dependency "generative"
23
24
  spec.add_development_dependency "rack-test", "~> 0.6"
24
25
  spec.add_development_dependency "webmock"
25
26
  spec.add_development_dependency "guard", "~> 2.13"
@@ -0,0 +1,92 @@
1
+ require 'request_tracer/trace'
2
+
3
+ describe RequestTracer::Trace do
4
+ let(:trace_stack_size) { rand(2) }
5
+ let(:trace_stack) do
6
+ (1..trace_stack_size).inject([]) do |stack, i|
7
+ stack + [stack.last&.next_id || described_class.create]
8
+ end
9
+ end
10
+ before do
11
+ described_class.clear
12
+ trace_stack.each {|s| described_class.push(s.to_h) }
13
+ end
14
+ context '#record', generative: true, order: :generative do
15
+ def record(&blk)
16
+ described_class.record(&blk)
17
+ end
18
+ it 'generates a new span_id for the scope of the block' do
19
+ temp_span = record do |t|
20
+ expect(t.span_id).not_to eq(trace_stack.last&.span_id)
21
+ expect(described_class.latest).to eq(t)
22
+ t
23
+ end
24
+ expect(described_class.latest).not_to eq(temp_span)
25
+ end
26
+ it 'takes the old span_id as the parent_span_id' do
27
+ temp_span = record do |t|
28
+ expect(t.parent_id).to eq(trace_stack.last&.span_id)
29
+ t
30
+ end
31
+ expect(described_class.latest&.span_id).to eq(temp_span.parent_id)
32
+ end
33
+ context 'when no previous trace exists' do
34
+ let(:trace_stack_size) { 0 }
35
+ it 'generates a new trace_id' do
36
+ record do |t|
37
+ expect(t.trace_id.i64.to_s).to match /[0-9a-z]+/i
38
+ end
39
+ end
40
+ end
41
+ context 'when a previous trace exists' do
42
+ let(:trace_stack_size) { 1 }
43
+ it 'reuses the existing trace_id' do
44
+ record do |t|
45
+ expect(t.trace_id).to eq(trace_stack.last.trace_id)
46
+ end
47
+ end
48
+ end
49
+ end
50
+ context '#push(trace_hash)', generative: true, order: :generative do
51
+ def push(&blk)
52
+ described_class.push(previous_trace_hash, &blk)
53
+ end
54
+ context 'when trace_hash contains a previous trace' do
55
+ let(:previous_trace) { described_class.create}
56
+ let(:previous_trace_hash) { previous_trace.to_h }
57
+ it 'keeps the span_id' do
58
+ push do |t|
59
+ expect(t.span_id).to eq(previous_trace.span_id)
60
+ end
61
+ end
62
+ it 'keeps the parent_span_id' do
63
+ push do |t|
64
+ expect(t.parent_id).to eq(previous_trace.parent_id)
65
+ end
66
+ end
67
+ it 'keeps the trace_id' do
68
+ push do |t|
69
+ expect(t.trace_id).to eq(previous_trace.trace_id)
70
+ end
71
+ end
72
+ end
73
+ context 'when no previous trace exists' do
74
+ let(:previous_trace_hash) { {} }
75
+ it 'creates a new span_id' do
76
+ push do |t|
77
+ expect(t.span_id.i64.to_s).to match /[0-9a-z]+/i
78
+ end
79
+ end
80
+ it 'creates a new trace_id' do
81
+ push do |t|
82
+ expect(t.trace_id.i64.to_s).to match /[0-9a-z]+/i
83
+ end
84
+ end
85
+ it 'does not set a parent_span_id' do
86
+ push do |t|
87
+ expect(t.parent_id).to eq(nil)
88
+ end
89
+ end
90
+ end
91
+ end
92
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: request-tracer
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.5
4
+ version: 0.5.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Martin Mauch
@@ -14,168 +14,182 @@ dependencies:
14
14
  name: rest-client
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ">="
17
+ - - ! '>='
18
18
  - !ruby/object:Gem::Version
19
19
  version: '0'
20
20
  type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - ">="
24
+ - - ! '>='
25
25
  - !ruby/object:Gem::Version
26
26
  version: '0'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: bundler
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - "~>"
31
+ - - ~>
32
32
  - !ruby/object:Gem::Version
33
33
  version: '1.7'
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - "~>"
38
+ - - ~>
39
39
  - !ruby/object:Gem::Version
40
40
  version: '1.7'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: rake
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - "~>"
45
+ - - ~>
46
46
  - !ruby/object:Gem::Version
47
47
  version: '10.0'
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - "~>"
52
+ - - ~>
53
53
  - !ruby/object:Gem::Version
54
54
  version: '10.0'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: rspec
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - "~>"
59
+ - - ~>
60
60
  - !ruby/object:Gem::Version
61
61
  version: '3.4'
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
- - - "~>"
66
+ - - ~>
67
67
  - !ruby/object:Gem::Version
68
68
  version: '3.4'
69
+ - !ruby/object:Gem::Dependency
70
+ name: generative
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ! '>='
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ! '>='
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
69
83
  - !ruby/object:Gem::Dependency
70
84
  name: rack-test
71
85
  requirement: !ruby/object:Gem::Requirement
72
86
  requirements:
73
- - - "~>"
87
+ - - ~>
74
88
  - !ruby/object:Gem::Version
75
89
  version: '0.6'
76
90
  type: :development
77
91
  prerelease: false
78
92
  version_requirements: !ruby/object:Gem::Requirement
79
93
  requirements:
80
- - - "~>"
94
+ - - ~>
81
95
  - !ruby/object:Gem::Version
82
96
  version: '0.6'
83
97
  - !ruby/object:Gem::Dependency
84
98
  name: webmock
85
99
  requirement: !ruby/object:Gem::Requirement
86
100
  requirements:
87
- - - ">="
101
+ - - ! '>='
88
102
  - !ruby/object:Gem::Version
89
103
  version: '0'
90
104
  type: :development
91
105
  prerelease: false
92
106
  version_requirements: !ruby/object:Gem::Requirement
93
107
  requirements:
94
- - - ">="
108
+ - - ! '>='
95
109
  - !ruby/object:Gem::Version
96
110
  version: '0'
97
111
  - !ruby/object:Gem::Dependency
98
112
  name: guard
99
113
  requirement: !ruby/object:Gem::Requirement
100
114
  requirements:
101
- - - "~>"
115
+ - - ~>
102
116
  - !ruby/object:Gem::Version
103
117
  version: '2.13'
104
118
  type: :development
105
119
  prerelease: false
106
120
  version_requirements: !ruby/object:Gem::Requirement
107
121
  requirements:
108
- - - "~>"
122
+ - - ~>
109
123
  - !ruby/object:Gem::Version
110
124
  version: '2.13'
111
125
  - !ruby/object:Gem::Dependency
112
126
  name: guard-rspec
113
127
  requirement: !ruby/object:Gem::Requirement
114
128
  requirements:
115
- - - "~>"
129
+ - - ~>
116
130
  - !ruby/object:Gem::Version
117
131
  version: '4.6'
118
132
  type: :development
119
133
  prerelease: false
120
134
  version_requirements: !ruby/object:Gem::Requirement
121
135
  requirements:
122
- - - "~>"
136
+ - - ~>
123
137
  - !ruby/object:Gem::Version
124
138
  version: '4.6'
125
139
  - !ruby/object:Gem::Dependency
126
140
  name: guard-bundler
127
141
  requirement: !ruby/object:Gem::Requirement
128
142
  requirements:
129
- - - "~>"
143
+ - - ~>
130
144
  - !ruby/object:Gem::Version
131
145
  version: '2.1'
132
146
  type: :development
133
147
  prerelease: false
134
148
  version_requirements: !ruby/object:Gem::Requirement
135
149
  requirements:
136
- - - "~>"
150
+ - - ~>
137
151
  - !ruby/object:Gem::Version
138
152
  version: '2.1'
139
153
  - !ruby/object:Gem::Dependency
140
154
  name: geminabox
141
155
  requirement: !ruby/object:Gem::Requirement
142
156
  requirements:
143
- - - ">="
157
+ - - ! '>='
144
158
  - !ruby/object:Gem::Version
145
159
  version: '0'
146
160
  type: :development
147
161
  prerelease: false
148
162
  version_requirements: !ruby/object:Gem::Requirement
149
163
  requirements:
150
- - - ">="
164
+ - - ! '>='
151
165
  - !ruby/object:Gem::Version
152
166
  version: '0'
153
167
  - !ruby/object:Gem::Dependency
154
168
  name: gem-release
155
169
  requirement: !ruby/object:Gem::Requirement
156
170
  requirements:
157
- - - ">="
171
+ - - ! '>='
158
172
  - !ruby/object:Gem::Version
159
173
  version: '0'
160
174
  type: :development
161
175
  prerelease: false
162
176
  version_requirements: !ruby/object:Gem::Requirement
163
177
  requirements:
164
- - - ">="
178
+ - - ! '>='
165
179
  - !ruby/object:Gem::Version
166
180
  version: '0'
167
181
  - !ruby/object:Gem::Dependency
168
182
  name: pry
169
183
  requirement: !ruby/object:Gem::Requirement
170
184
  requirements:
171
- - - ">="
185
+ - - ! '>='
172
186
  - !ruby/object:Gem::Version
173
187
  version: '0'
174
188
  type: :development
175
189
  prerelease: false
176
190
  version_requirements: !ruby/object:Gem::Requirement
177
191
  requirements:
178
- - - ">="
192
+ - - ! '>='
179
193
  - !ruby/object:Gem::Version
180
194
  version: '0'
181
195
  description: This is a tracer that hooks into several components to allow tracing
@@ -186,10 +200,10 @@ executables: []
186
200
  extensions: []
187
201
  extra_rdoc_files: []
188
202
  files:
189
- - ".gemrelease"
190
- - ".gitignore"
191
- - ".rspec"
192
- - ".travis.yml"
203
+ - .gemrelease
204
+ - .gitignore
205
+ - .rspec
206
+ - .travis.yml
193
207
  - Gemfile
194
208
  - Guardfile
195
209
  - LICENSE
@@ -205,6 +219,7 @@ files:
205
219
  - spec/integration/integration_spec.rb
206
220
  - spec/lib/request_tracer/integration/rack_handler_spec.rb
207
221
  - spec/lib/request_tracer/integration/rest_client_handler_spec.rb
222
+ - spec/lib/request_tracer/trace_spec.rb
208
223
  - spec/spec_helper.rb
209
224
  - spec/support/test_app.rb
210
225
  - spec/support/test_app_config.ru
@@ -218,17 +233,17 @@ require_paths:
218
233
  - lib
219
234
  required_ruby_version: !ruby/object:Gem::Requirement
220
235
  requirements:
221
- - - ">="
236
+ - - ! '>='
222
237
  - !ruby/object:Gem::Version
223
238
  version: '0'
224
239
  required_rubygems_version: !ruby/object:Gem::Requirement
225
240
  requirements:
226
- - - ">="
241
+ - - ! '>='
227
242
  - !ruby/object:Gem::Version
228
243
  version: '0'
229
244
  requirements: []
230
245
  rubyforge_project:
231
- rubygems_version: 2.5.1
246
+ rubygems_version: 2.4.5
232
247
  signing_key:
233
248
  specification_version: 4
234
249
  summary: Traces requests using the Zipkin HTTP headers
@@ -236,6 +251,7 @@ test_files:
236
251
  - spec/integration/integration_spec.rb
237
252
  - spec/lib/request_tracer/integration/rack_handler_spec.rb
238
253
  - spec/lib/request_tracer/integration/rest_client_handler_spec.rb
254
+ - spec/lib/request_tracer/trace_spec.rb
239
255
  - spec/spec_helper.rb
240
256
  - spec/support/test_app.rb
241
257
  - spec/support/test_app_config.ru