aws-xray-sdk 0.9.0

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