faraday-zipkin 0.0.1 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- ZDY4YWE5Y2M1NTA1Mzg3ZDUzN2U1MmJkNDU3ZDQ1YjNiYjBiZGFjOQ==
4
+ YzUwZDc2ZDFjODFlODBmNjA1ZjZmMWQ0ODdlMDYyNWFhN2U2NGUwMw==
5
5
  data.tar.gz: !binary |-
6
- MWFmOTVjMWIyOGEwZjRkODc2MDQ5YTY0ZWNiMWVmZTFmMDRlMDZhNA==
6
+ MDcxYTc2ODYwMTMzZDg5NzJiYzBjM2MzOTQzN2M0NGE2MDQzNTA1Mw==
7
7
  SHA512:
8
8
  metadata.gz: !binary |-
9
- NjhiMzE5YWRlNzE3ZWVjODU3ZWYzZTI0ZTg4ZjIwMzQ0NDZmODI1YzVmMzVj
10
- NWY2MmYyZTJjMDM4NDI4MmZmNjMzN2I2YjZiMmU5OWI2ODRkMGJiY2QxYTkx
11
- NmEwN2ViNzQwM2I2OGVkOTQ5ZGZmNzZkOWJjYzNhMmVjMjUwZTQ=
9
+ YTc4YTMxNDM0ZjQ3YWUzYmQ5ZGM2NmM2ZTA1NjEwMjZjMjEyZGZiMmM1ZDMy
10
+ MDFkZjY5OTcwMDBiOGMwMTQwZTRhYjU0MDM2NTJmZGZjMjQzYzRiNjliOTM1
11
+ YjZiN2YxNDFiOTAzOGE4MjFlNGJkZmZhMzVhMjY0YjQyYWZjMTY=
12
12
  data.tar.gz: !binary |-
13
- MTAxZTc4NDEzNzgyZTVjNmM4NWVlZWUzYTBmNzQ1ZTI5YjZhNjhhNjIyOWJm
14
- MTBiZjI0Y2FlODE5Y2U3NzViNDE1M2Y2MDE2NTZhM2ZmZWUzM2FjOWZkNDA0
15
- YjM4MjQ2MzhkYjM1ZDkyNDU3ZTViZGU5ZDU5OTcyZWFkNmMzNGU=
13
+ NWFkNjUyZjc0MzFhMGQxNDQ1MGM3OWMyNjE5ZmRiYTEyMGJiMzk3MzgwMmM5
14
+ ZWZmZjE5NDAzMmI0ZGYyYWMwMTM4YzI5NTUyNzY2NTBlYmQ4NGNkMTM1OGI0
15
+ YzJlNTA1NjQyMDg1MDY4NzdiMmU4ZTk5NjE4ZGYxZWI2ODczMGY=
data/README.md CHANGED
@@ -2,13 +2,20 @@
2
2
 
3
3
  Faraday middleware to generate Zipkin tracing headers.
4
4
 
5
+ For more information about Zipkin, go to
6
+ http://twitter.github.io/zipkin
7
+ http://github.com/twitter/zipkin
8
+
9
+ This gem implements the client side described at
10
+ http://twitter.github.io/zipkin/instrument.html
11
+
5
12
  Note that you should also be using the zipkin-tracer Rack middleware
6
13
  to generate trace IDs around your requests:
7
14
  https://github.com/twitter/zipkin/tree/master/zipkin-gems/zipkin-tracer
8
15
 
9
- Zipkin tracing headers are documented at
16
+ Zipkin tracing headers for HTTP APIs are documented at
10
17
  https://github.com/twitter/zipkin/blob/master/doc/collector-api.md
11
-
18
+
12
19
  ## Usage
13
20
 
14
21
  Include Faraday::Zipkin::TraceHeaders as a Faraday middleware:
@@ -25,7 +32,7 @@ Include Faraday::Zipkin::TraceHeaders as a Faraday middleware:
25
32
 
26
33
  ## Contributing
27
34
 
28
- 1. Fork it ( https://github.com/[my-github-username]/faraday-zipkin/fork )
35
+ 1. Fork it ( https://github.com/Oscil8/faraday-zipkin/fork )
29
36
  2. Create your feature branch (`git checkout -b my-new-feature`)
30
37
  3. Commit your changes (`git commit -am 'Add some feature'`)
31
38
  4. Push to the branch (`git push origin my-new-feature`)
@@ -20,7 +20,7 @@ Gem::Specification.new do |spec|
20
20
 
21
21
  spec.add_dependency "faraday", ">= 0.8"
22
22
  spec.add_dependency "thrift", "~> 0.9.0"
23
- spec.add_dependency "finagle-thrift", "~> 1.3.0"
23
+ spec.add_dependency "finagle-thrift", "~> 1.2.0"
24
24
 
25
25
  spec.add_development_dependency "bundler", "~> 1.6"
26
26
  spec.add_development_dependency "rake", "~> 10.0"
@@ -1,5 +1,5 @@
1
1
  module Faraday
2
2
  module Zipkin
3
- VERSION = "0.0.1"
3
+ VERSION = "0.1.0"
4
4
  end
5
5
  end
@@ -1,8 +1,9 @@
1
1
  require 'faraday'
2
2
  require 'finagle-thrift'
3
3
  require 'finagle-thrift/trace'
4
+ require 'uri'
4
5
 
5
- require "faraday/zipkin/version"
6
+ require 'faraday/zipkin/version'
6
7
 
7
8
  module Faraday
8
9
  module Zipkin
@@ -11,8 +12,7 @@ module Faraday
11
12
  :trace_id => "X-B3-TraceId",
12
13
  :parent_id => "X-B3-ParentSpanId",
13
14
  :span_id => "X-B3-SpanId",
14
- :sampled => "X-B3-Sampled",
15
- :flags => "X-B3-Flags"
15
+ :sampled => "X-B3-Sampled"
16
16
  }.freeze
17
17
 
18
18
  def initialize(app)
@@ -21,10 +21,16 @@ module Faraday
21
21
 
22
22
  def call(env)
23
23
  trace_id = ::Trace.id
24
- B3_HEADERS.each do |method, header|
25
- env[:request_headers][header] = trace_id.send(method).to_s
24
+ host = URI.parse(env[:url]).host
25
+ ::Trace.push(trace_id.next_id) do
26
+ ::Trace.record(::Trace::Annotation.new(::Trace::Annotation::CLIENT_SEND, host))
27
+ B3_HEADERS.each do |method, header|
28
+ env[:request_headers][header] = ::Trace.id.send(method).to_s
29
+ end
30
+ result = @app.call(env)
31
+ ::Trace.record(::Trace::Annotation.new(::Trace::Annotation::CLIENT_RECV, host))
32
+ result
26
33
  end
27
- @app.call(env)
28
34
  end
29
35
  end
30
36
  end
@@ -1,28 +1,49 @@
1
1
  describe Faraday::Zipkin::TraceHeaders do
2
2
  let(:middleware) { described_class.new(lambda{|env| env}) }
3
+ let(:hostname) { 'service.example.com' }
3
4
 
4
5
  def process(body, headers={})
5
6
  env = {
7
+ :url => "https://#{hostname}/some/path/here",
6
8
  :body => body,
7
9
  :request_headers => Faraday::Utils::Headers.new(headers),
8
10
  }
9
11
  middleware.call(env)
10
12
  end
11
13
 
14
+ # custom matcher for trace annotation
15
+ RSpec::Matchers.define :have_value_and_host do |v, h|
16
+ match { |actual| actual.value == v && actual.host == h }
17
+ end
18
+
12
19
  context 'request' do
13
20
  context 'with tracing id' do
14
- let(:trace_id) { ::Trace::TraceId.new(1, 2, 3, true, ::Trace::Flags::EMPTY) }
21
+ let(:trace_id) { ::Trace::TraceId.new(1, 2, 3, true) }
15
22
 
16
23
  it 'sets the X-B3 request headers' do
24
+ # expect SEND then RECV
25
+ expect(::Trace).to receive(:record).with(have_value_and_host(::Trace::Annotation::CLIENT_SEND, hostname)).ordered
26
+ expect(::Trace).to receive(:record).with(have_value_and_host(::Trace::Annotation::CLIENT_RECV, hostname)).ordered
27
+
17
28
  result = nil
18
29
  ::Trace.push(trace_id) do
19
30
  result = process('')
20
31
  end
21
32
  expect(result[:request_headers]['X-B3-TraceId']).to eq('0000000000000001')
22
- expect(result[:request_headers]['X-B3-ParentSpanId']).to eq('0000000000000002')
23
- expect(result[:request_headers]['X-B3-SpanId']).to eq('0000000000000003')
33
+ expect(result[:request_headers]['X-B3-ParentSpanId']).to eq('0000000000000003')
34
+ expect(result[:request_headers]['X-B3-SpanId']).not_to eq('0000000000000003')
35
+ expect(result[:request_headers]['X-B3-SpanId']).to match(/^\h{16}$/)
24
36
  expect(result[:request_headers]['X-B3-Sampled']).to eq('true')
25
- expect(result[:request_headers]['X-B3-Flags']).to eq('0')
37
+ end
38
+ end
39
+
40
+ context 'without tracing id' do
41
+ it 'generates a new ID, and sets the X-B3 request headers' do
42
+ result = process('')
43
+ expect(result[:request_headers]['X-B3-TraceId']).to match(/^\h{16}$/)
44
+ expect(result[:request_headers]['X-B3-ParentSpanId']).to match(/^\h{16}$/)
45
+ expect(result[:request_headers]['X-B3-SpanId']).to match(/^\h{16}$/)
46
+ expect(result[:request_headers]['X-B3-Sampled']).to match(/(true|false)/)
26
47
  end
27
48
  end
28
49
  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.0.1
4
+ version: 0.1.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-08-22 00:00:00.000000000 Z
11
+ date: 2014-09-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: faraday
@@ -44,14 +44,14 @@ dependencies:
44
44
  requirements:
45
45
  - - ~>
46
46
  - !ruby/object:Gem::Version
47
- version: 1.3.0
47
+ version: 1.2.0
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - ~>
53
53
  - !ruby/object:Gem::Version
54
- version: 1.3.0
54
+ version: 1.2.0
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: bundler
57
57
  requirement: !ruby/object:Gem::Requirement