aws-xray 0.1.0 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 52798d0e091697990b5d7901b8e656c515d710f8
4
- data.tar.gz: f70bf8f3a9f6d2e4273c268191af0b2f559b727b
3
+ metadata.gz: 44943f3ac93283072875bfa94985b9aa76828628
4
+ data.tar.gz: 7c58541a4ba68f4b7968505029229b1f2abb0c76
5
5
  SHA512:
6
- metadata.gz: b9f46903cb8c14f83fb954bc50ee3fb7aa321ffb86abd93c433b71a23070ff526857f709e0c8f4044f181afacd64e5e9f6ec9231a5a23bad5e3a7e330798efea
7
- data.tar.gz: c7af99e3a4bb79200ff29c08328860bc9c01d77150cb6d613ecd312b88011cd4c887a1c089d9d4fa43eac5bcfbc7cce7a853889bf61ccec568919c9307763213
6
+ metadata.gz: e266ce6f924d71c447e1ca64775efbf55de67523965b3c805eb8fac5e9c99f936590857765156a8a8333ccf4d32a6cbcd0a04519220fcd5a7cd67315ff06f0b4
7
+ data.tar.gz: 1988b22141c57f19b2bb3963b2f691dbbcd8ecb6a08bdeb3037e4dfee0a20193d28c8f6899a82f7257d762eeb5a89113b382dbf1d97e9b7ab976a2c4a24221d4
data/.gitignore CHANGED
@@ -7,3 +7,4 @@
7
7
  /pkg/
8
8
  /spec/reports/
9
9
  /tmp/
10
+ example/Gemfile.lock
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --color
2
+ --require spec_helper
@@ -0,0 +1,10 @@
1
+ language: ruby
2
+ sudo: false
3
+ branches:
4
+ only:
5
+ - master
6
+ rvm:
7
+ - 2.1
8
+ - 2.2
9
+ - 2.3
10
+ - 2.4
data/README.md CHANGED
@@ -1,8 +1,24 @@
1
1
  # Aws::Xray
2
+ [![Build Status](https://travis-ci.org/taiki45/aws-xray.svg?branch=master)](https://travis-ci.org/taiki45/aws-xray)
3
+ [![Gem Version](https://badge.fury.io/rb/aws-xray.svg)](https://badge.fury.io/rb/aws-xray)
2
4
 
3
- Welcome to your new gem! In this directory, you'll find the files you need to be able to package up your Ruby library into a gem. Put your Ruby code in the file `lib/aws/xray`. To experiment with that code, run `bin/console` for an interactive prompt.
5
+ The unofficial AWS X-Ray Tracing SDK for Ruby.
6
+ It enables you to capture in-coming HTTP requests and out-going HTTP requests and send them to xray-agent automatically.
4
7
 
5
- TODO: Delete this and the text above, and describe your gem
8
+ AWS X-Ray is a ditributed tracing system. See more detail about AWS X-Ray at [official document](http://docs.aws.amazon.com/xray/latest/devguide/aws-xray.html).
9
+
10
+ ## Current status
11
+ Implemented:
12
+
13
+ - Rack middleware.
14
+ - Faraday middleware.
15
+ - Propagatin support limited in single thread environment.
16
+
17
+ Not yet:
18
+
19
+ - Tracing HTTP request/response.
20
+ - Multi thread support.
21
+ - Tracing errors.
6
22
 
7
23
  ## Installation
8
24
 
@@ -16,13 +32,54 @@ And then execute:
16
32
 
17
33
  $ bundle
18
34
 
19
- Or install it yourself as:
35
+ ## Usage
36
+ ### Rack app
37
+ ```ruby
38
+ # config.ru
39
+ require 'aws-xray'
40
+ use Aws::Xray::Rack
41
+ ```
20
42
 
21
- $ gem install aws-xray
43
+ This allow your app to trace in-coming HTTP requests.
22
44
 
23
- ## Usage
45
+ To trace out-going HTTP requests, use Faraday middleware.
24
46
 
25
- TODO: Write usage instructions here
47
+ ```ruby
48
+ Faraday.new('...', headers: { 'Host' => 'down-stream-app-id' } ) do |builder|
49
+ builder.use Aws::Xray::Faraday
50
+ # ...
51
+ end
52
+ ```
53
+
54
+ If you don't use any Service Discovery tools, pass the down stream app name to the Faraday middleware:
55
+
56
+ ```ruby
57
+ Faraday.new('...') do |builder|
58
+ builder.use Aws::Xray::Faraday, name: 'down-stream-app-id'
59
+ # ...
60
+ end
61
+ ```
62
+
63
+ ### non-Rack app (like background jobs)
64
+ ```ruby
65
+ # Build HTTP client with Faraday builder.
66
+ # You can set the down stream app id to Host header as well.
67
+ client = Faraday.new('...') do |builder|
68
+ builder.use Aws::Xray::Faraday, name: 'down-stream-app-id'
69
+ # ...
70
+ end
71
+
72
+ # Start new tracing context then perform arbitrary actions in the block.
73
+ Aws::Xray::Context.with_new_context('test-app', xray_client, trace_header) do
74
+ Aws::Xray::Context.current.base_trace do
75
+ client.get('/foo')
76
+
77
+ Aws::Xray::Context.current.child_trace do |sub|
78
+ # DB access or something to trace.
79
+ end
80
+ end
81
+ end
82
+ ```
26
83
 
27
84
  ## Development
28
85
 
@@ -32,7 +89,7 @@ To install this gem onto your local machine, run `bundle exec rake install`. To
32
89
 
33
90
  ## Contributing
34
91
 
35
- Bug reports and pull requests are welcome on GitHub at https://github.com/[USERNAME]/aws-xray.
92
+ Bug reports and pull requests are welcome on GitHub at https://github.com/taiki45/aws-xray.
36
93
 
37
94
  ## License
38
95
 
data/Rakefile CHANGED
@@ -1,2 +1,8 @@
1
1
  require "bundler/gem_tasks"
2
2
  task :default => :spec
3
+
4
+ begin
5
+ require 'rspec/core/rake_task'
6
+ RSpec::Core::RakeTask.new(:spec)
7
+ rescue LoadError
8
+ end
@@ -1,26 +1,29 @@
1
1
  # coding: utf-8
2
- lib = File.expand_path("../lib", __FILE__)
2
+ lib = File.expand_path('../lib', __FILE__)
3
3
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
- require "aws/xray/version"
4
+ require 'aws/xray/version'
5
5
 
6
6
  Gem::Specification.new do |spec|
7
- spec.name = "aws-xray"
7
+ spec.name = 'aws-xray'
8
8
  spec.version = Aws::Xray::VERSION
9
- spec.authors = ["Taiki Ono"]
10
- spec.email = ["taiks.4559@gmail.com"]
9
+ spec.authors = ['Taiki Ono']
10
+ spec.email = ['taiks.4559@gmail.com']
11
11
 
12
12
  spec.summary = %q{The unofficial X-Ray Tracing SDK for Ruby.}
13
13
  spec.description = spec.summary
14
- spec.homepage = "https://github.com/taiki45/aws-xray"
15
- spec.license = "MIT"
14
+ spec.homepage = 'https://github.com/taiki45/aws-xray'
15
+ spec.license = 'MIT'
16
16
 
17
17
  spec.files = `git ls-files -z`.split("\x0").reject do |f|
18
18
  f.match(%r{^(test|spec|features)/})
19
19
  end
20
- spec.bindir = "exe"
20
+ spec.bindir = 'exe'
21
21
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
22
- spec.require_paths = ["lib"]
22
+ spec.require_paths = ['lib']
23
23
 
24
- spec.add_development_dependency "bundler", "~> 1.15"
25
- spec.add_development_dependency "rake", "~> 10.0"
24
+ spec.add_dependency 'faraday'
25
+ spec.add_development_dependency 'bundler'
26
+ spec.add_development_dependency 'rake'
27
+ spec.add_development_dependency 'rspec'
28
+ spec.add_development_dependency 'pry-byebug'
26
29
  end
@@ -0,0 +1,7 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gem 'faraday'
4
+ gem 'rack'
5
+ gem 'aws-xray', path: File.expand_path('../', __dir__)
6
+
7
+ gem 'foreman'
@@ -0,0 +1,5 @@
1
+ front: env RECIPE_APP=127.0.0.1:3001 bundle exec rackup fron_app_config.ru -o 127.0.0.1 -p 3000
2
+ recipe: env USER_APP=127.0.0.1:3002 CAMPAIN_APP=127.0.0.1:3003 bundle exec rackup recipe_app_config.ru -o 127.0.0.1 -p 3001
3
+ user: bundle exec rackup user_app_config.ru -o 127.0.0.1 -p 3002
4
+ campain: bundle exec rackup campain_app_config.ru -o 127.0.0.1 -p 3003
5
+ agent: socat UDP-RECVFROM:2000,fork STDOUT
@@ -0,0 +1,27 @@
1
+ # Example apps
2
+ ```
3
+ --> user-app
4
+ client -> front-app -> recipe-app -|
5
+ --> campain-app
6
+ ```
7
+
8
+ To simulate xray-agent, this example runs socat which prints given bytes to STDOUT.
9
+
10
+ ## Running without xray-agent
11
+ At first, install [socat](http://www.dest-unreach.org/socat/).
12
+
13
+ ```
14
+ bundle install
15
+ bundle exec foreman start
16
+ ```
17
+
18
+ ## Running with xray-agent
19
+ Follow official document to install xray-agent: http://docs.aws.amazon.com/xray/latest/devguide/xray-daemon.html
20
+
21
+ Run xray-agent on localhost. Usually it recieves packats at UDP:2000.
22
+
23
+ Run example apps without socat like:
24
+
25
+ ```
26
+ bundle exec foreman start -m 'front=1,recipe=1,user=1,campain=1'
27
+ ```
@@ -0,0 +1,7 @@
1
+ require 'aws-xray'
2
+
3
+ use Aws::Xray::Rack, name: 'campain-app'
4
+
5
+ run Proc.new {|env|
6
+ ['200', {'Content-Type' => 'text/plain'}, ['0']]
7
+ }
@@ -0,0 +1,18 @@
1
+ require 'faraday'
2
+ require 'aws-xray'
3
+
4
+ recipe_app = ENV.fetch('RECIPE_APP') # host:port
5
+
6
+ use Aws::Xray::Rack, name: 'front-app'
7
+
8
+ run Proc.new {|env|
9
+ headers = { 'Host' => 'recipe-app' }
10
+ client = Faraday.new(url: "http://#{recipe_app}/", headers: headers) do |builder|
11
+ builder.use Aws::Xray::Faraday
12
+ builder.adapter Faraday.default_adapter
13
+ end
14
+ res = client.get('/')
15
+
16
+ body = "recipe_app returns: #{res.status}, #{res.body}"
17
+ ['200', {'Content-Type' => 'text/plain'}, [body]]
18
+ }
@@ -0,0 +1,28 @@
1
+ require 'faraday'
2
+ require 'aws-xray'
3
+
4
+ user_app = ENV.fetch('USER_APP') # host:port
5
+ campain_app = ENV.fetch('CAMPAIN_APP') # host:port
6
+
7
+ use Aws::Xray::Rack, name: 'recipe-app'
8
+
9
+ run Proc.new {|env|
10
+ user_client = Faraday.new(url: "http://#{user_app}/", headers: { 'Host' => 'user-app' }) do |builder|
11
+ builder.use Aws::Xray::Faraday
12
+ builder.adapter Faraday.default_adapter
13
+ end
14
+ user_res = user_client.get('/')
15
+
16
+ campain_client = Faraday.new(url: "http://#{campain_app}/", headers: { 'Host' => 'campain-app' }) do |builder|
17
+ builder.use Aws::Xray::Faraday
18
+ builder.adapter Faraday.default_adapter
19
+ end
20
+ campain_res = campain_client.get('/')
21
+
22
+ body = "awesome recipe by #{user_res.body}"
23
+ if campain_res.body == '1'
24
+ body << ': You got a campain!'
25
+ end
26
+
27
+ ['200', {'Content-Type' => 'text/plain'}, [body]]
28
+ }
@@ -0,0 +1,7 @@
1
+ require 'aws-xray'
2
+
3
+ use Aws::Xray::Rack, name: 'user-app'
4
+
5
+ run Proc.new {|env|
6
+ ['200', {'Content-Type' => 'text/plain'}, ['user-1']]
7
+ }
@@ -0,0 +1 @@
1
+ require 'aws/xray'
@@ -1,7 +1,9 @@
1
- require "aws/xray/version"
1
+ require 'aws/xray/version'
2
+ require 'aws/xray/rack'
3
+ require 'aws/xray/faraday'
2
4
 
3
5
  module Aws
4
6
  module Xray
5
- # Your code goes here...
7
+ TRACE_HEADER = 'X-Amzn-Trace-Id'.freeze
6
8
  end
7
9
  end
@@ -0,0 +1,26 @@
1
+ require 'socket'
2
+
3
+ module Aws
4
+ module Xray
5
+ class Client
6
+ # sock is for test
7
+ #
8
+ # XXX: keep options for implmenting copying later.
9
+ def initialize(host: '127.0.0.1', port: 2000, sock: nil)
10
+ @options = { host: host, port: port }
11
+ @sock = sock || Addrinfo.udp(host, port).connect
12
+ end
13
+
14
+ # @param [Aws::Xray::Segment] segment
15
+ def send_segment(segment)
16
+ segment.finish
17
+ payload = %!{"format": "json", "version": 1}\n#{segment.to_json}\n!
18
+ len = @sock.send(payload, 0)
19
+ # TODO: retry
20
+ if payload.size != len
21
+ $stderr.puts("Can not send all bytes: #{len} sent")
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,72 @@
1
+ require 'aws/xray/segment'
2
+ require 'aws/xray/sub_segment'
3
+
4
+ module Aws
5
+ module Xray
6
+ class Context
7
+ class << self
8
+ VAR_NAME = :_aws_xray_context_
9
+
10
+ class NotSetError < ::StandardError
11
+ def initialize
12
+ super('Context is not set for this thread')
13
+ end
14
+ end
15
+
16
+ def current
17
+ Thread.current[VAR_NAME] || raise(NotSetError)
18
+ end
19
+
20
+ def with_new_context(name, client, trace_header)
21
+ build_current(name, client, trace_header)
22
+ yield
23
+ ensure
24
+ remove_current
25
+ end
26
+
27
+ private
28
+
29
+ def build_current(name, client, trace_header)
30
+ Thread.current[VAR_NAME] = Context.new(name, client, trace_header)
31
+ end
32
+
33
+ # XXX: Use delete API if exists
34
+ def remove_current
35
+ Thread.current[VAR_NAME] = nil
36
+ end
37
+ end
38
+
39
+ attr_reader :name
40
+
41
+ def initialize(name, client, trace_header)
42
+ @name = name
43
+ @client = client
44
+ @trace_header = trace_header
45
+ @base_segment = Segment.build(@name, trace_header)
46
+ end
47
+
48
+ def base_trace
49
+ res = yield
50
+ @client.send_segment(@base_segment)
51
+ res
52
+ rescue => e
53
+ @base_segment.set_error(e)
54
+ @client.send_segment(@base_segment)
55
+ raise e
56
+ end
57
+
58
+ # @param [Boolean] remote
59
+ # @yield [Aws::Xray::SubSegment]
60
+ def child_trace(remote:, name:)
61
+ sub = SubSegment.build(@trace_header, @base_segment, remote: remote, name: name)
62
+ res = yield sub
63
+ @client.send_segment(sub)
64
+ res
65
+ rescue => e
66
+ sub.set_error(e)
67
+ @client.send_segment(sub)
68
+ raise e
69
+ end
70
+ end
71
+ end
72
+ end
@@ -0,0 +1,27 @@
1
+ require 'faraday'
2
+
3
+ module Aws
4
+ module Xray
5
+ class Faraday < ::Faraday::Middleware
6
+ def initialize(app, name = nil)
7
+ super(app)
8
+ @name = name
9
+ end
10
+
11
+ # XXX: use host header?
12
+ def call(req_env)
13
+ name = @name || req_env.request_headers['Host'] || "unknown-request-from-#{Context.current.name}"
14
+
15
+ Context.current.child_trace(remote: true, name: name) do |sub|
16
+ propagate_trace_header = sub.generate_trace_header
17
+ req_env.request_headers[TRACE_HEADER] = propagate_trace_header.to_header_value
18
+ sub.set_http_request(req_env)
19
+
20
+ @app.call(req_env).on_complete do |res_env|
21
+ sub.set_http_response(res_env)
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,50 @@
1
+ module Aws
2
+ module Xray
3
+ module HeaderParser
4
+ extend self
5
+
6
+ # XXX: returns error when given invaild header_value
7
+ # Header format document: http://docs.aws.amazon.com/xray/latest/devguide/xray-concepts.html#xray-concepts-tracingheader
8
+ def parse(header_value)
9
+ h = {}
10
+ key = ''
11
+ value = ''
12
+ value_mode = false
13
+ header_value.chars.each_with_index do |c, i|
14
+ next if space?(c)
15
+ if delim?(c)
16
+ h[key] = value
17
+ key, value = '', ''
18
+ value_mode = false
19
+ next
20
+ end
21
+
22
+ if equal_mark?(c)
23
+ value_mode = true
24
+ next
25
+ end
26
+
27
+ if value_mode
28
+ value << c
29
+ else
30
+ key << c
31
+ end
32
+ end
33
+ h[key] = value if !key.empty? && !value.empty?
34
+ h
35
+ end
36
+
37
+ def space?(c)
38
+ c == ' '
39
+ end
40
+
41
+ def delim?(c)
42
+ c == ';'
43
+ end
44
+
45
+ def equal_mark?(c)
46
+ c == '='
47
+ end
48
+ end
49
+ end
50
+ end
@@ -0,0 +1,36 @@
1
+ require 'aws/xray/trace_header'
2
+ require 'aws/xray/client'
3
+ require 'aws/xray/context'
4
+
5
+ module Aws
6
+ module Xray
7
+ class Rack
8
+ TRACE_ENV = 'HTTP_X_AMZN_TRACE_ID'.freeze
9
+
10
+ # XXX: excluded_paths, included_paths
11
+ # XXX: document about client_options
12
+ def initialize(app, name:, client_options: {})
13
+ @app = app
14
+ @name = name
15
+ @client = Client.new(client_options)
16
+ end
17
+
18
+ def call(env)
19
+ header_value = env[TRACE_ENV]
20
+ trace_header = if header_value
21
+ TraceHeader.build_from_header_value(header_value)
22
+ else
23
+ TraceHeader.generate
24
+ end
25
+
26
+ Context.with_new_context(@name, @client, trace_header) do
27
+ Context.current.base_trace do
28
+ status, headers, body = @app.call(env)
29
+ headers[TRACE_HEADER] = trace_header.to_header_value
30
+ [status, headers, body]
31
+ end
32
+ end
33
+ end
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,72 @@
1
+ require 'json'
2
+ require 'securerandom'
3
+
4
+ module Aws
5
+ module Xray
6
+ # http://docs.aws.amazon.com/xray/latest/devguide/xray-api-segmentdocuments.html
7
+ class Segment
8
+ class << self
9
+ def build(name, trace_header)
10
+ new(name: name, trace_id: trace_header.root, parent_id: trace_header.parent)
11
+ end
12
+ end
13
+
14
+ attr_reader :name, :id, :trace_id, :parent_id
15
+
16
+ # TODO: securerandom?
17
+ def initialize(name:, trace_id:, parent_id: nil)
18
+ @name = name
19
+ @id = SecureRandom.hex(8)
20
+ @trace_id = trace_id
21
+ @parent_id = parent_id
22
+ start
23
+ @end_time = nil
24
+ @http_request = nil
25
+ @http_response = nil
26
+ @error = nil
27
+ end
28
+
29
+ # @param [Hash] env A Rack env
30
+ def set_http_request(env)
31
+ end
32
+
33
+ # @param [Array] res A Rack response
34
+ def set_http_response(res)
35
+ end
36
+
37
+ def set_error(e)
38
+ # TODO: Set error object
39
+ end
40
+
41
+ def finish(now = Time.now)
42
+ @end_time = now.to_f
43
+ end
44
+
45
+ def to_json
46
+ to_h.to_json
47
+ end
48
+
49
+ def to_h
50
+ h = {
51
+ name: @name,
52
+ id: @id,
53
+ trace_id: @trace_id,
54
+ start_time: @start_time,
55
+ }
56
+ if @end_time.nil?
57
+ h[:in_progress] = true
58
+ else
59
+ h[:end_time] = @end_time
60
+ end
61
+ h[:parent_id] = @parent_id if @parent_id
62
+ h
63
+ end
64
+
65
+ private
66
+
67
+ def start(now = Time.now)
68
+ @start_time = now.to_f
69
+ end
70
+ end
71
+ end
72
+ end
@@ -0,0 +1,32 @@
1
+ require 'aws/xray/segment'
2
+
3
+ module Aws
4
+ module Xray
5
+ # http://docs.aws.amazon.com/xray/latest/devguide/xray-api-segmentdocuments.html
6
+ class SubSegment < Segment
7
+ # @param [Boolean] remote
8
+ def self.build(trace_header, parent, remote:, name:)
9
+ new(name: name, trace_header: trace_header, parent_id: parent.id, remote: remote)
10
+ end
11
+
12
+ TYPE_NAME = 'subsegment'.freeze
13
+
14
+ def initialize(name:, trace_header:, parent_id:, remote:)
15
+ super(name: name, trace_id: trace_header.root, parent_id: parent_id)
16
+ @trace_header = trace_header
17
+ @remote = !!remote
18
+ end
19
+
20
+ def to_h
21
+ h = super
22
+ h[:type] = TYPE_NAME
23
+ h[:namespace] = 'remote' if @remote
24
+ h
25
+ end
26
+
27
+ def generate_trace_header
28
+ @trace_header.copy(parent: @id)
29
+ end
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,54 @@
1
+ require 'aws/xray/header_parser'
2
+ require 'securerandom'
3
+
4
+ module Aws
5
+ module Xray
6
+ class TraceHeader
7
+ class << self
8
+ def generate(now = Time.now)
9
+ new(root: generate_root(now))
10
+ end
11
+
12
+ def build_from_header_value(header_value)
13
+ h = HeaderParser.parse(header_value)
14
+ new(root: h.fetch('Root'), sampled: h['Sampled'] != '0', parent: h['Parent'])
15
+ end
16
+
17
+ private
18
+
19
+ # XXX: securerandom?
20
+ def generate_root(now)
21
+ "1-#{now.to_i.to_s(16)}-#{SecureRandom.hex(12)}"
22
+ end
23
+ end
24
+
25
+ attr_reader :root, :parent
26
+
27
+ def initialize(root:, sampled: true, parent: nil)
28
+ @root = root
29
+ @sampled = sampled
30
+ @parent = parent
31
+ end
32
+
33
+ def to_header_value
34
+ v = "Root=#{@root};"
35
+ sampled? ? v << 'Sampled=1' : v << 'Sampled=0'
36
+ v << ";Parent=#{@parent}" if has_parent?
37
+ v
38
+ end
39
+
40
+ def sampled?
41
+ @sampled
42
+ end
43
+
44
+ def has_parent?
45
+ !!@parent
46
+ end
47
+
48
+ def copy(parent: nil)
49
+ parent = parent.nil? ? @parent : parent
50
+ self.class.new(root: @root, sampled: @sampled, parent: parent)
51
+ end
52
+ end
53
+ end
54
+ end
@@ -1,5 +1,5 @@
1
1
  module Aws
2
2
  module Xray
3
- VERSION = "0.1.0"
3
+ VERSION = "0.2.0"
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,43 +1,85 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: aws-xray
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Taiki Ono
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2017-05-23 00:00:00.000000000 Z
11
+ date: 2017-05-27 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: faraday
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
13
27
  - !ruby/object:Gem::Dependency
14
28
  name: bundler
15
29
  requirement: !ruby/object:Gem::Requirement
16
30
  requirements:
17
- - - "~>"
31
+ - - ">="
18
32
  - !ruby/object:Gem::Version
19
- version: '1.15'
33
+ version: '0'
20
34
  type: :development
21
35
  prerelease: false
22
36
  version_requirements: !ruby/object:Gem::Requirement
23
37
  requirements:
24
- - - "~>"
38
+ - - ">="
25
39
  - !ruby/object:Gem::Version
26
- version: '1.15'
40
+ version: '0'
27
41
  - !ruby/object:Gem::Dependency
28
42
  name: rake
29
43
  requirement: !ruby/object:Gem::Requirement
30
44
  requirements:
31
- - - "~>"
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rspec
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: pry-byebug
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
32
74
  - !ruby/object:Gem::Version
33
- version: '10.0'
75
+ version: '0'
34
76
  type: :development
35
77
  prerelease: false
36
78
  version_requirements: !ruby/object:Gem::Requirement
37
79
  requirements:
38
- - - "~>"
80
+ - - ">="
39
81
  - !ruby/object:Gem::Version
40
- version: '10.0'
82
+ version: '0'
41
83
  description: The unofficial X-Ray Tracing SDK for Ruby.
42
84
  email:
43
85
  - taiks.4559@gmail.com
@@ -46,6 +88,8 @@ extensions: []
46
88
  extra_rdoc_files: []
47
89
  files:
48
90
  - ".gitignore"
91
+ - ".rspec"
92
+ - ".travis.yml"
49
93
  - Gemfile
50
94
  - LICENSE.txt
51
95
  - README.md
@@ -53,7 +97,23 @@ files:
53
97
  - aws-xray.gemspec
54
98
  - bin/console
55
99
  - bin/setup
100
+ - example/Gemfile
101
+ - example/Procfile
102
+ - example/README.md
103
+ - example/campain_app_config.ru
104
+ - example/fron_app_config.ru
105
+ - example/recipe_app_config.ru
106
+ - example/user_app_config.ru
107
+ - lib/aws-xray.rb
56
108
  - lib/aws/xray.rb
109
+ - lib/aws/xray/client.rb
110
+ - lib/aws/xray/context.rb
111
+ - lib/aws/xray/faraday.rb
112
+ - lib/aws/xray/header_parser.rb
113
+ - lib/aws/xray/rack.rb
114
+ - lib/aws/xray/segment.rb
115
+ - lib/aws/xray/sub_segment.rb
116
+ - lib/aws/xray/trace_header.rb
57
117
  - lib/aws/xray/version.rb
58
118
  homepage: https://github.com/taiki45/aws-xray
59
119
  licenses:
@@ -75,7 +135,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
75
135
  version: '0'
76
136
  requirements: []
77
137
  rubyforge_project:
78
- rubygems_version: 2.6.11
138
+ rubygems_version: 2.5.2
79
139
  signing_key:
80
140
  specification_version: 4
81
141
  summary: The unofficial X-Ray Tracing SDK for Ruby.