aws-xray-sdk 0.9.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.
Files changed (42) hide show
  1. checksums.yaml +7 -0
  2. data/lib/aws-xray-sdk.rb +10 -0
  3. data/lib/aws-xray-sdk/configuration.rb +158 -0
  4. data/lib/aws-xray-sdk/context/context.rb +26 -0
  5. data/lib/aws-xray-sdk/context/default_context.rb +81 -0
  6. data/lib/aws-xray-sdk/emitter/default_emitter.rb +53 -0
  7. data/lib/aws-xray-sdk/emitter/emitter.rb +24 -0
  8. data/lib/aws-xray-sdk/exceptions.rb +31 -0
  9. data/lib/aws-xray-sdk/facets/aws_sdk.rb +127 -0
  10. data/lib/aws-xray-sdk/facets/helper.rb +61 -0
  11. data/lib/aws-xray-sdk/facets/net_http.rb +61 -0
  12. data/lib/aws-xray-sdk/facets/rack.rb +87 -0
  13. data/lib/aws-xray-sdk/facets/rails/active_record.rb +66 -0
  14. data/lib/aws-xray-sdk/facets/rails/ex_middleware.rb +24 -0
  15. data/lib/aws-xray-sdk/facets/rails/railtie.rb +23 -0
  16. data/lib/aws-xray-sdk/facets/resources/aws_params_whitelist.rb +340 -0
  17. data/lib/aws-xray-sdk/facets/resources/aws_services_whitelist.rb +147 -0
  18. data/lib/aws-xray-sdk/logger.rb +19 -0
  19. data/lib/aws-xray-sdk/model/annotations.rb +97 -0
  20. data/lib/aws-xray-sdk/model/cause.rb +70 -0
  21. data/lib/aws-xray-sdk/model/dummy_entities.rb +72 -0
  22. data/lib/aws-xray-sdk/model/entity.rb +187 -0
  23. data/lib/aws-xray-sdk/model/metadata.rb +77 -0
  24. data/lib/aws-xray-sdk/model/segment.rb +63 -0
  25. data/lib/aws-xray-sdk/model/subsegment.rb +67 -0
  26. data/lib/aws-xray-sdk/model/trace_header.rb +54 -0
  27. data/lib/aws-xray-sdk/patcher.rb +21 -0
  28. data/lib/aws-xray-sdk/plugins/ec2.rb +39 -0
  29. data/lib/aws-xray-sdk/plugins/ecs.rb +23 -0
  30. data/lib/aws-xray-sdk/plugins/elastic_beanstalk.rb +25 -0
  31. data/lib/aws-xray-sdk/recorder.rb +209 -0
  32. data/lib/aws-xray-sdk/sampling/default_sampler.rb +105 -0
  33. data/lib/aws-xray-sdk/sampling/reservoir.rb +35 -0
  34. data/lib/aws-xray-sdk/sampling/sampler.rb +27 -0
  35. data/lib/aws-xray-sdk/sampling/sampling_rule.rb +57 -0
  36. data/lib/aws-xray-sdk/search_pattern.rb +82 -0
  37. data/lib/aws-xray-sdk/segment_naming/dynamic_naming.rb +26 -0
  38. data/lib/aws-xray-sdk/segment_naming/segment_naming.rb +10 -0
  39. data/lib/aws-xray-sdk/streaming/default_streamer.rb +53 -0
  40. data/lib/aws-xray-sdk/streaming/streamer.rb +17 -0
  41. data/lib/aws-xray-sdk/version.rb +3 -0
  42. metadata +224 -0
@@ -0,0 +1,105 @@
1
+ require 'aws-xray-sdk/sampling/sampler'
2
+ require 'aws-xray-sdk/sampling/sampling_rule'
3
+ require 'aws-xray-sdk/exceptions'
4
+
5
+ module XRay
6
+ # The default sampler that uses internally defined
7
+ # sampling rule and reservoir models to decide sampling decision.
8
+ # It also uses the default sampling rule.
9
+ # An example definition:
10
+ # {
11
+ # version: 1,
12
+ # rules: [
13
+ # {
14
+ # description: 'Player moves.',
15
+ # service_name: '*',
16
+ # http_method: '*',
17
+ # url_path: '/api/move/*',
18
+ # fixed_target: 0,
19
+ # rate: 0.05
20
+ # }
21
+ # ],
22
+ # default: {
23
+ # fixed_target: 1,
24
+ # rate: 0.1
25
+ # }
26
+ # }
27
+ # This example defines one custom rule and a default rule.
28
+ # The custom rule applies a five-percent sampling rate with no minimum
29
+ # number of requests to trace for paths under /api/move/. The default
30
+ # rule traces the first request each second and 10 percent of additional requests.
31
+ # The SDK applies custom rules in the order in which they are defined.
32
+ # If a request matches multiple custom rules, the SDK applies only the first rule.
33
+ class DefaultSampler
34
+ include Sampler
35
+ DEFAULT_RULES = {
36
+ version: 1,
37
+ default: {
38
+ fixed_target: 1,
39
+ rate: 0.05
40
+ },
41
+ rules: []
42
+ }.freeze
43
+
44
+ def initialize
45
+ load_sampling_rules(DEFAULT_RULES)
46
+ end
47
+
48
+ # Return True if the sampler decide to sample based on input
49
+ # information and sampling rules. It will first check if any
50
+ # custom rule should be applied, if not it falls back to the
51
+ # default sampling rule.
52
+ # All arugments are extracted from incoming requests by
53
+ # X-Ray middleware to perform path based sampling.
54
+ def sample_request?(service_name:, url_path:, http_method:)
55
+ # directly fallback to non-path-based if all arguments are nil
56
+ return sample? unless service_name || url_path || http_method
57
+ @custom_rules ||= []
58
+ @custom_rules.each do |c|
59
+ return should_sample?(c) if c.applies?(target_name: service_name, target_path: url_path, target_method: http_method)
60
+ end
61
+ sample?
62
+ end
63
+
64
+ # Decides if should sample based on non-path-based rule.
65
+ # Currently only the default rule is not path-based.
66
+ def sample?
67
+ should_sample?(@default_rule)
68
+ end
69
+
70
+ # @param [Hash] v The sampling rules definition.
71
+ def sampling_rules=(v)
72
+ load_sampling_rules(v)
73
+ end
74
+
75
+ # @return [Array] An array of [SamplingRule]
76
+ def sampling_rules
77
+ all_rules = []
78
+ all_rules << @default_rule
79
+ all_rules << @custom_rules unless @custom_rules.empty?
80
+ all_rules
81
+ end
82
+
83
+ private
84
+
85
+ def should_sample?(rule)
86
+ return true if rule.reservoir.take
87
+ Random.rand <= rule.rate
88
+ end
89
+
90
+ def load_sampling_rules(v)
91
+ version = v[:version]
92
+ if version != 1
93
+ raise InvalidSamplingConfigError, %('Sampling rule version #{version} is not supported.')
94
+ end
95
+ unless v[:default]
96
+ raise InvalidSamplingConfigError, 'A default rule must be provided.'
97
+ end
98
+ @default_rule = SamplingRule.new rule_definition: v[:default], default: true
99
+ @custom_rules = []
100
+ v[:rules].each do |d|
101
+ @custom_rules << SamplingRule.new(rule_definition: d)
102
+ end
103
+ end
104
+ end
105
+ end
@@ -0,0 +1,35 @@
1
+ module XRay
2
+ # Keeps track of the number of sampled segments within
3
+ # a single second. This class is implemented to be
4
+ # thread-safe to achieve accurate sampling.
5
+ class Reservoir
6
+ # @param [Integer] traces_per_sec The number of guranteed sampled
7
+ # segments per second.
8
+ def initialize(traces_per_sec: 0)
9
+ @traces_per_sec = traces_per_sec
10
+ @used_this_sec = 0
11
+ @this_sec = Time.now.to_i
12
+ @lock = Mutex.new
13
+ end
14
+
15
+ # Returns `true` if there are segments left within the
16
+ # current second, otherwise returns `false`.
17
+ def take
18
+ # nothing to provide if reserved is set to 0
19
+ return false if @traces_per_sec.zero?
20
+ @lock.synchronize do
21
+ now = Time.now.to_i
22
+ # refresh time frame
23
+ if now != @this_sec
24
+ @used_this_sec = 0
25
+ @this_sec = now
26
+ end
27
+ # return false if reserved item ran out
28
+ return false unless @used_this_sec < @traces_per_sec
29
+ # otherwise increment used counter and return true
30
+ @used_this_sec += 1
31
+ return true
32
+ end
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,27 @@
1
+ module XRay
2
+ # The sampler interface that calculates if a segment
3
+ # should be sampled or not upon creation based on the
4
+ # sampling rules it holds. It doesn't respect sampling decision
5
+ # from upstream.
6
+ module Sampler
7
+ # Decides if a segment should be sampled for an incoming request.
8
+ # Used in case of middleware.
9
+ def sample_request?(service_name:, url_path:, http_method:)
10
+ raise 'Not implemented'
11
+ end
12
+
13
+ # Decides if a segment should be sampled merely based on internal
14
+ # sampling rules.
15
+ def sample?
16
+ raise 'Not implemented'
17
+ end
18
+
19
+ def sampling_rules=(v)
20
+ raise 'Not implemented'
21
+ end
22
+
23
+ def sampling_rules
24
+ raise 'Not implemented'
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,57 @@
1
+ require 'aws-xray-sdk/exceptions'
2
+ require 'aws-xray-sdk/sampling/reservoir'
3
+ require 'aws-xray-sdk/search_pattern'
4
+
5
+ module XRay
6
+ # One SamplingRule object represents one rule defined from the rules hash definition.
7
+ # It can be either a custom rule or the default rule.
8
+ class SamplingRule
9
+ attr_reader :fixed_target, :rate, :service_name,
10
+ :method, :path, :reservoir, :default
11
+
12
+ # @param [Hash] rule_definition Hash that defines a single rule.
13
+ # @param default A boolean flag indicates if this rule is the default rule.
14
+ def initialize(rule_definition:, default: false)
15
+ @fixed_target = rule_definition[:fixed_target]
16
+ @rate = rule_definition[:rate]
17
+
18
+ @service_name = rule_definition[:service_name]
19
+ @method = rule_definition[:http_method]
20
+ @path = rule_definition[:url_path]
21
+
22
+ @default = default
23
+ validate
24
+ @reservoir = Reservoir.new traces_per_sec: @fixed_target
25
+ end
26
+
27
+ # Determines whether or not this sampling rule applies to
28
+ # the incoming request based on some of the request's parameters.
29
+ # Any None parameters provided will be considered an implicit match.
30
+ def applies?(target_name:, target_path:, target_method:)
31
+ name_match = !target_name || SearchPattern.wildcard_match?(pattern: @service_name, text: target_name)
32
+ path_match = !target_path || SearchPattern.wildcard_match?(pattern: @path, text: target_path)
33
+ method_match = !target_method || SearchPattern.wildcard_match?(pattern: @method, text: target_method)
34
+ name_match && path_match && method_match
35
+ end
36
+
37
+ private
38
+
39
+ def validate
40
+ if @fixed_target < 0 || @rate < 0
41
+ raise InvalidSamplingConfigError, 'All rules must have non-negative values for fixed_target and rate.'
42
+ end
43
+
44
+ if @default
45
+ # validate default rule
46
+ if @service_name || @method || @path
47
+ raise InvalidSamplingConfigError, 'The default rule must not specify values for url_path, service_name, or http_method.'
48
+ end
49
+ else
50
+ # validate custom rule
51
+ unless @service_name && @method && @path
52
+ raise InvalidSamplingConfigError, 'All non-default rules must have values for url_path, service_name, and http_method.'
53
+ end
54
+ end
55
+ end
56
+ end
57
+ end
@@ -0,0 +1,82 @@
1
+ module XRay
2
+ # custom pattern matching for performance and the SDK use cases.
3
+ module SearchPattern
4
+ # Performs a case-insensitive wildcard match against two strings.
5
+ # This method works with pseduo-regex chars; specifically ? and * are supported.
6
+ # An asterisk (*) represents any combination of characters.
7
+ # A question mark (?) represents any single character.
8
+ # @param [String] pattern The regex-like pattern to be compared against.
9
+ # @param [String] text The string to compare against the pattern.
10
+ # @param case_insensitive A boolean flag. Default is true.
11
+ def self.wildcard_match?(pattern:, text:, case_insensitive: true)
12
+ return false unless pattern && text
13
+ pattern_len = pattern.length
14
+ text_len = text.length
15
+ return text_len.zero? if pattern_len.zero?
16
+ # Check the special case of a single * pattern, as it's common
17
+ return true if pattern == '*'
18
+
19
+ if case_insensitive
20
+ # do not mutate original input
21
+ pattern = pattern.downcase
22
+ text = text.downcase
23
+ end
24
+ # Infix globs are relatively rare, and the below search is expensive.
25
+ # Check for infix globs and, in their absence, do the simple thing.
26
+ if !pattern.include?('*') || pattern.index('*') == pattern_len - 1
27
+ return simple_wildcard_match? pattern: pattern, text: text
28
+ end
29
+
30
+ # The res[i] is used to record if there is a match between
31
+ # the first i chars in text and the first j chars in pattern.
32
+ # So will return res[textLength+1] in the end
33
+ # Loop from the beginning of the pattern
34
+ # case not '*': if text[i]==pattern[j] or pattern[j] is '?',
35
+ # and res[i] is true, set res[i+1] to true, otherwise false.
36
+ # case '*': since '*' can match any globing, as long as there is a true
37
+ # in res before i, all the res[i+1], res[i+2],...,res[textLength]
38
+ # could be true
39
+ res = Array.new(text_len + 1)
40
+ res[0] = true
41
+ (0...pattern_len).each do |j|
42
+ p = pattern[j]
43
+ if p != '*'
44
+ (text_len - 1).downto(0) do |i|
45
+ res[i + 1] = res[i] && (p == '?' || (p == text[i]))
46
+ end
47
+ else
48
+ i = 0
49
+ i += 1 while i <= text_len && !res[i]
50
+ (i..text_len + 1).each do |m|
51
+ res[m] = true
52
+ end
53
+ end
54
+ res[0] = res[0] && (p == '*')
55
+ end
56
+ res[text_len]
57
+ end
58
+
59
+ private_class_method
60
+
61
+ def self.simple_wildcard_match?(pattern:, text:)
62
+ j = 0
63
+ pattern_len = pattern.length
64
+ text_len = text.length
65
+ (0...pattern_len).each do |i|
66
+ p = pattern[i]
67
+ # Presumption for this method is that globs only occur at end
68
+ return true if p == '*'
69
+ if p == '?'
70
+ # No character to match
71
+ return false if j == text_len
72
+ else
73
+ return false if j >= text_len || p != text[j]
74
+ end
75
+ j += 1
76
+ end
77
+ # Ate up all the pattern and didn't end at a glob, so a match
78
+ # will have consumed all the text
79
+ j == text_len
80
+ end
81
+ end
82
+ end
@@ -0,0 +1,26 @@
1
+ require 'aws-xray-sdk/segment_naming/segment_naming'
2
+ require 'aws-xray-sdk/search_pattern'
3
+
4
+ module XRay
5
+ # Decides what name to use on a segment generated from an incoming request.
6
+ # This default naming takes the host name and compares it to a pre-defined pattern.
7
+ # If the host name matches that pattern, it returns the host name, otherwise
8
+ # it returns the fallback name. The host name usually comes from the incoming
9
+ # request's headers.
10
+ class DynamicNaming
11
+ include SegmentNaming
12
+
13
+ # @param [String] fallback The fallback name used when there is no match
14
+ # between host name and specified pattern.
15
+ def initialize(fallback:)
16
+ @fallback = fallback
17
+ end
18
+
19
+ # @param [String] host The host name fetched from the incoming request's header.
20
+ def provide_name(host:)
21
+ # use fallback name when either the pattern or host name is unavailable.
22
+ return fallback unless pattern && !pattern.empty? && host && !host.empty?
23
+ SearchPattern.wildcard_match?(pattern: pattern, text: host) ? host : fallback
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,10 @@
1
+ module XRay
2
+ # The interface that provides the segment name
3
+ # based on host name, pattern and the fallback name.
4
+ module SegmentNaming
5
+ attr_accessor :fallback, :pattern
6
+ def provide_name(host:)
7
+ raise 'Not implemented'
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,53 @@
1
+ require 'aws-xray-sdk/streaming/streamer'
2
+ require 'aws-xray-sdk/logger'
3
+
4
+ module XRay
5
+ # The default streamer use subsegment count as the threshold
6
+ # for performance reasons and it streams out subtrees
7
+ # where all the nodes in it are completed.
8
+ class DefaultStreamer
9
+ include Streamer
10
+ include Logging
11
+
12
+ def initialize
13
+ @stream_threshold = 50
14
+ end
15
+
16
+ # @param [Segment] segment Check if the provided segment exceeds
17
+ # the threshold to stream.
18
+ def eligible?(segment:)
19
+ # only get subsegments to stream from sampled segments.
20
+ segment && segment.sampled && segment.subsegment_size >= stream_threshold
21
+ end
22
+
23
+ # @param [Segment] root The target segment to stream subsegments from.
24
+ # @param [Emitter] emitter The emitter employed to send data to the daemon.
25
+ def stream_subsegments(root:, emitter:)
26
+ children = root.subsegments
27
+ children_ready = []
28
+
29
+ unless children.empty?
30
+ # Collect ready subtrees from root.
31
+ children.each do |child|
32
+ children_ready << child if stream_subsegments root: child, emitter: emitter
33
+ end
34
+ end
35
+
36
+ # If this subtree is ready, go back to the root's parent
37
+ # to try to find a bigger subtree
38
+ return true if children_ready.length == children.length && root.closed?
39
+ # Otherwise this subtree has at least one non-ready node.
40
+ # Only stream its ready child subtrees.
41
+ children_ready.each do |child|
42
+ root.remove_subsegment subsegment: child
43
+ emitter.send_entity entity: child
44
+ end
45
+ # Return false so this node won't be added to its parent's ready children.
46
+ false
47
+ end
48
+
49
+ # @return [Integer] The maximum number of subsegments a segment
50
+ # can hold before streaming.
51
+ attr_accessor :stream_threshold
52
+ end
53
+ end
@@ -0,0 +1,17 @@
1
+ module XRay
2
+ # The interface used by the X-Ray recoder to get eligible subsegments
3
+ # to be streamed out from a given segment.
4
+ module Streamer
5
+ def eligible?(segment:)
6
+ raise 'Not implemented'
7
+ end
8
+
9
+ def subsegments_to_stream(segment:, emitter:, force: false)
10
+ raise 'Not implemented'
11
+ end
12
+
13
+ def stream_threshold=(v)
14
+ raise 'Not implemented'
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,3 @@
1
+ module XRay
2
+ VERSION = '0.9.0'
3
+ end
metadata ADDED
@@ -0,0 +1,224 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: aws-xray-sdk
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.9.0
5
+ platform: ruby
6
+ authors:
7
+ - Amazon Web Services
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2018-01-09 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: oj
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '3.0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '3.0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: aws-sdk-dynamodb
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '1'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '1'
41
+ - !ruby/object:Gem::Dependency
42
+ name: aws-sdk-s3
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '1'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '1'
55
+ - !ruby/object:Gem::Dependency
56
+ name: bundler
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '1.0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '1.0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: minitest
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '5.0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '5.0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: rake
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: '12.0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: '12.0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: rdiscount
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - "~>"
102
+ - !ruby/object:Gem::Version
103
+ version: '2.2'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - "~>"
109
+ - !ruby/object:Gem::Version
110
+ version: '2.2'
111
+ - !ruby/object:Gem::Dependency
112
+ name: simplecov
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - "~>"
116
+ - !ruby/object:Gem::Version
117
+ version: '0.15'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - "~>"
123
+ - !ruby/object:Gem::Version
124
+ version: '0.15'
125
+ - !ruby/object:Gem::Dependency
126
+ name: webmock
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - "~>"
130
+ - !ruby/object:Gem::Version
131
+ version: '3.0'
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - "~>"
137
+ - !ruby/object:Gem::Version
138
+ version: '3.0'
139
+ - !ruby/object:Gem::Dependency
140
+ name: yard
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - "~>"
144
+ - !ruby/object:Gem::Version
145
+ version: '0.9'
146
+ type: :development
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - "~>"
151
+ - !ruby/object:Gem::Version
152
+ version: '0.9'
153
+ description: The AWS X-Ray SDK for Ruby enables Ruby developers to record and emit
154
+ information from within their applications to the AWS X-Ray service.
155
+ email: aws-xray-ruby@amazon.com
156
+ executables: []
157
+ extensions: []
158
+ extra_rdoc_files: []
159
+ files:
160
+ - lib/aws-xray-sdk.rb
161
+ - lib/aws-xray-sdk/configuration.rb
162
+ - lib/aws-xray-sdk/context/context.rb
163
+ - lib/aws-xray-sdk/context/default_context.rb
164
+ - lib/aws-xray-sdk/emitter/default_emitter.rb
165
+ - lib/aws-xray-sdk/emitter/emitter.rb
166
+ - lib/aws-xray-sdk/exceptions.rb
167
+ - lib/aws-xray-sdk/facets/aws_sdk.rb
168
+ - lib/aws-xray-sdk/facets/helper.rb
169
+ - lib/aws-xray-sdk/facets/net_http.rb
170
+ - lib/aws-xray-sdk/facets/rack.rb
171
+ - lib/aws-xray-sdk/facets/rails/active_record.rb
172
+ - lib/aws-xray-sdk/facets/rails/ex_middleware.rb
173
+ - lib/aws-xray-sdk/facets/rails/railtie.rb
174
+ - lib/aws-xray-sdk/facets/resources/aws_params_whitelist.rb
175
+ - lib/aws-xray-sdk/facets/resources/aws_services_whitelist.rb
176
+ - lib/aws-xray-sdk/logger.rb
177
+ - lib/aws-xray-sdk/model/annotations.rb
178
+ - lib/aws-xray-sdk/model/cause.rb
179
+ - lib/aws-xray-sdk/model/dummy_entities.rb
180
+ - lib/aws-xray-sdk/model/entity.rb
181
+ - lib/aws-xray-sdk/model/metadata.rb
182
+ - lib/aws-xray-sdk/model/segment.rb
183
+ - lib/aws-xray-sdk/model/subsegment.rb
184
+ - lib/aws-xray-sdk/model/trace_header.rb
185
+ - lib/aws-xray-sdk/patcher.rb
186
+ - lib/aws-xray-sdk/plugins/ec2.rb
187
+ - lib/aws-xray-sdk/plugins/ecs.rb
188
+ - lib/aws-xray-sdk/plugins/elastic_beanstalk.rb
189
+ - lib/aws-xray-sdk/recorder.rb
190
+ - lib/aws-xray-sdk/sampling/default_sampler.rb
191
+ - lib/aws-xray-sdk/sampling/reservoir.rb
192
+ - lib/aws-xray-sdk/sampling/sampler.rb
193
+ - lib/aws-xray-sdk/sampling/sampling_rule.rb
194
+ - lib/aws-xray-sdk/search_pattern.rb
195
+ - lib/aws-xray-sdk/segment_naming/dynamic_naming.rb
196
+ - lib/aws-xray-sdk/segment_naming/segment_naming.rb
197
+ - lib/aws-xray-sdk/streaming/default_streamer.rb
198
+ - lib/aws-xray-sdk/streaming/streamer.rb
199
+ - lib/aws-xray-sdk/version.rb
200
+ homepage: https://github.com/aws/aws-xray-sdk-ruby
201
+ licenses:
202
+ - Apache-2.0
203
+ metadata: {}
204
+ post_install_message:
205
+ rdoc_options: []
206
+ require_paths:
207
+ - lib
208
+ required_ruby_version: !ruby/object:Gem::Requirement
209
+ requirements:
210
+ - - ">="
211
+ - !ruby/object:Gem::Version
212
+ version: '0'
213
+ required_rubygems_version: !ruby/object:Gem::Requirement
214
+ requirements:
215
+ - - ">="
216
+ - !ruby/object:Gem::Version
217
+ version: '0'
218
+ requirements: []
219
+ rubyforge_project:
220
+ rubygems_version: 2.7.3
221
+ signing_key:
222
+ specification_version: 4
223
+ summary: AWS X-Ray SDK for Ruby
224
+ test_files: []