request-tracer 0.5.5 → 0.5.6

Sign up to get free protection for your applications and to get access to all the features.
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