faraday-zipkin 0.1.1 → 0.2.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 +8 -8
- data/README.md +7 -2
- data/lib/faraday/zipkin/version.rb +1 -1
- data/lib/faraday/zipkin.rb +7 -4
- data/spec/zipkin_trace_headers_spec.rb +42 -13
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
OGYxYzAzNzAzZTQ3OTVhMjcyOWUyZWFlOTQ2OWE2YjgzOTlmNzBjYQ==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
YmRlM2VkNzIyNmQyYWNhMzQ5M2M2N2RkN2ZlMjI0YTM5YWVhYTdmOQ==
|
7
7
|
SHA512:
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
OTdkMzY3MmJiNTQyOWVkNjZhZDA5ZGI0MDkyNWJlMGQxZTg2N2RhZmMxMDkx
|
10
|
+
MTJlOWUzNTlhMWIzMGFlNTcwYjJjMGQyODQ2YzM2MjRiM2RmYWFhNGNiY2Zm
|
11
|
+
ODg1ZjgwZmU5YmVmODU0ZWE1ZjJiMzcyYjQ3MWVhOWE5ZDIwOGQ=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
ZTZkZGQwZmU4NTRhYmRiYjdhOTJlMmQ2Nzg4MjU2ZWJhMGUyMWQ0NjI5ZjE1
|
14
|
+
NjYwZjhlYmM2ZjU2MmY5Mzk2YzcyMGNlMTIwYTcwN2ZjMTRmNDkwODVmNjU3
|
15
|
+
MGExOWI3NjcwYzkxYzkxMmMwZWRjNzhiMWVkNDNkODFmODIxZjA=
|
data/README.md
CHANGED
@@ -24,12 +24,17 @@ Include Faraday::Zipkin::TraceHeaders as a Faraday middleware:
|
|
24
24
|
require 'faraday/zipkin'
|
25
25
|
|
26
26
|
conn = Faraday.new(:url => 'http://localhost:9292/') do |faraday|
|
27
|
-
faraday.use Faraday::Zipkin::TraceHeaders
|
27
|
+
faraday.use Faraday::Zipkin::TraceHeaders [, 'service_name']
|
28
28
|
# default Faraday stack
|
29
29
|
faraday.request :url_encoded
|
30
30
|
faraday.adapter Faraday.default_adapter
|
31
31
|
end
|
32
|
-
|
32
|
+
|
33
|
+
Note that supplying the service name for the destination service is
|
34
|
+
optional; the tracing will default to a service name derived from the
|
35
|
+
first section of the destination URL (e.g. 'service.example.com' =>
|
36
|
+
'service').
|
37
|
+
|
33
38
|
## Contributing
|
34
39
|
|
35
40
|
1. Fork it ( https://github.com/Oscil8/faraday-zipkin/fork )
|
data/lib/faraday/zipkin.rb
CHANGED
@@ -15,23 +15,26 @@ module Faraday
|
|
15
15
|
:sampled => "X-B3-Sampled"
|
16
16
|
}.freeze
|
17
17
|
|
18
|
-
def initialize(app)
|
18
|
+
def initialize(app, service_name=nil)
|
19
19
|
@app = app
|
20
|
+
@service_name = service_name
|
20
21
|
end
|
21
22
|
|
22
23
|
def call(env)
|
23
24
|
trace_id = ::Trace.id
|
24
25
|
|
25
26
|
# handle either a URI object (passed by Faraday v0.8.x in testing), or something string-izable
|
26
|
-
|
27
|
+
url = env[:url].respond_to?(:host) ? env[:url] : URI.parse(env[:url].to_s)
|
28
|
+
service_name = @service_name || url.host.split('.').first # default to url-derived service name
|
29
|
+
endpoint = ::Trace::Endpoint.new(::Trace::Endpoint.host_to_i32(url.host), url.port, service_name)
|
27
30
|
|
28
31
|
::Trace.push(trace_id.next_id) do
|
29
|
-
::Trace.record(::Trace::Annotation.new(::Trace::Annotation::CLIENT_SEND,
|
32
|
+
::Trace.record(::Trace::Annotation.new(::Trace::Annotation::CLIENT_SEND, endpoint))
|
30
33
|
B3_HEADERS.each do |method, header|
|
31
34
|
env[:request_headers][header] = ::Trace.id.send(method).to_s
|
32
35
|
end
|
33
36
|
result = @app.call(env)
|
34
|
-
::Trace.record(::Trace::Annotation.new(::Trace::Annotation::CLIENT_RECV,
|
37
|
+
::Trace.record(::Trace::Annotation.new(::Trace::Annotation::CLIENT_RECV, endpoint))
|
35
38
|
result
|
36
39
|
end
|
37
40
|
end
|
@@ -1,6 +1,8 @@
|
|
1
1
|
describe Faraday::Zipkin::TraceHeaders do
|
2
|
-
let(:
|
2
|
+
let(:wrapped_app) { lambda{|env| env} }
|
3
|
+
|
3
4
|
let(:hostname) { 'service.example.com' }
|
5
|
+
let(:host_ip) { 0x11223344 }
|
4
6
|
|
5
7
|
def process(body, url, headers={})
|
6
8
|
env = {
|
@@ -11,19 +13,29 @@ describe Faraday::Zipkin::TraceHeaders do
|
|
11
13
|
middleware.call(env)
|
12
14
|
end
|
13
15
|
|
14
|
-
# custom
|
15
|
-
RSpec::Matchers.define :
|
16
|
-
match { |actual| actual.value == v
|
16
|
+
# custom matchers for trace annotation
|
17
|
+
RSpec::Matchers.define :have_value do |v|
|
18
|
+
match { |actual| actual.value == v }
|
19
|
+
end
|
20
|
+
|
21
|
+
RSpec::Matchers.define :have_endpoint do |ip, svc|
|
22
|
+
match { |actual| actual.host.kind_of?(::Trace::Endpoint) &&
|
23
|
+
actual.host.ipv4 == ip &&
|
24
|
+
actual.host.service_name == svc }
|
17
25
|
end
|
18
26
|
|
27
|
+
before(:each) {
|
28
|
+
allow(::Trace::Endpoint).to receive(:host_to_i32).with(hostname).and_return(host_ip)
|
29
|
+
}
|
30
|
+
|
19
31
|
shared_examples 'can make requests' do
|
20
32
|
context 'with tracing id' do
|
21
33
|
let(:trace_id) { ::Trace::TraceId.new(1, 2, 3, true) }
|
22
34
|
|
23
35
|
it 'sets the X-B3 request headers' do
|
24
36
|
# expect SEND then RECV
|
25
|
-
expect(::Trace).to receive(:record).with(
|
26
|
-
expect(::Trace).to receive(:record).with(
|
37
|
+
expect(::Trace).to receive(:record).with(have_value(::Trace::Annotation::CLIENT_SEND).and(have_endpoint(host_ip, service_name))).ordered
|
38
|
+
expect(::Trace).to receive(:record).with(have_value(::Trace::Annotation::CLIENT_RECV).and(have_endpoint(host_ip, service_name))).ordered
|
27
39
|
|
28
40
|
result = nil
|
29
41
|
::Trace.push(trace_id) do
|
@@ -48,16 +60,33 @@ describe Faraday::Zipkin::TraceHeaders do
|
|
48
60
|
end
|
49
61
|
end
|
50
62
|
|
51
|
-
context '
|
52
|
-
let(:
|
63
|
+
context 'middleware configured (without service_name)' do
|
64
|
+
let(:middleware) { described_class.new(wrapped_app) }
|
65
|
+
let(:service_name) { 'service' }
|
66
|
+
|
67
|
+
context 'request with string URL' do
|
68
|
+
let(:url) { "https://#{hostname}/some/path/here" }
|
53
69
|
|
54
|
-
|
70
|
+
include_examples 'can make requests'
|
71
|
+
end
|
72
|
+
|
73
|
+
# in testing, Faraday v0.8.x passes a URI object rather than a string
|
74
|
+
context 'request with pre-parsed URL' do
|
75
|
+
let(:url) { URI.parse("https://#{hostname}/some/path/here") }
|
76
|
+
|
77
|
+
include_examples 'can make requests'
|
78
|
+
end
|
55
79
|
end
|
56
80
|
|
57
|
-
|
58
|
-
|
59
|
-
let(:
|
81
|
+
context 'configured with service_name "foo"' do
|
82
|
+
let(:middleware) { described_class.new(wrapped_app, 'foo') }
|
83
|
+
let(:service_name) { 'foo' }
|
60
84
|
|
61
|
-
|
85
|
+
# in testing, Faraday v0.8.x passes a URI object rather than a string
|
86
|
+
context 'request with pre-parsed URL' do
|
87
|
+
let(:url) { URI.parse("https://#{hostname}/some/path/here") }
|
88
|
+
|
89
|
+
include_examples 'can make requests'
|
90
|
+
end
|
62
91
|
end
|
63
92
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: faraday-zipkin
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ariel Salomon
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-10-02 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: faraday
|