aws-xray-sdk 0.9.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/lib/aws-xray-sdk.rb +10 -0
- data/lib/aws-xray-sdk/configuration.rb +158 -0
- data/lib/aws-xray-sdk/context/context.rb +26 -0
- data/lib/aws-xray-sdk/context/default_context.rb +81 -0
- data/lib/aws-xray-sdk/emitter/default_emitter.rb +53 -0
- data/lib/aws-xray-sdk/emitter/emitter.rb +24 -0
- data/lib/aws-xray-sdk/exceptions.rb +31 -0
- data/lib/aws-xray-sdk/facets/aws_sdk.rb +127 -0
- data/lib/aws-xray-sdk/facets/helper.rb +61 -0
- data/lib/aws-xray-sdk/facets/net_http.rb +61 -0
- data/lib/aws-xray-sdk/facets/rack.rb +87 -0
- data/lib/aws-xray-sdk/facets/rails/active_record.rb +66 -0
- data/lib/aws-xray-sdk/facets/rails/ex_middleware.rb +24 -0
- data/lib/aws-xray-sdk/facets/rails/railtie.rb +23 -0
- data/lib/aws-xray-sdk/facets/resources/aws_params_whitelist.rb +340 -0
- data/lib/aws-xray-sdk/facets/resources/aws_services_whitelist.rb +147 -0
- data/lib/aws-xray-sdk/logger.rb +19 -0
- data/lib/aws-xray-sdk/model/annotations.rb +97 -0
- data/lib/aws-xray-sdk/model/cause.rb +70 -0
- data/lib/aws-xray-sdk/model/dummy_entities.rb +72 -0
- data/lib/aws-xray-sdk/model/entity.rb +187 -0
- data/lib/aws-xray-sdk/model/metadata.rb +77 -0
- data/lib/aws-xray-sdk/model/segment.rb +63 -0
- data/lib/aws-xray-sdk/model/subsegment.rb +67 -0
- data/lib/aws-xray-sdk/model/trace_header.rb +54 -0
- data/lib/aws-xray-sdk/patcher.rb +21 -0
- data/lib/aws-xray-sdk/plugins/ec2.rb +39 -0
- data/lib/aws-xray-sdk/plugins/ecs.rb +23 -0
- data/lib/aws-xray-sdk/plugins/elastic_beanstalk.rb +25 -0
- data/lib/aws-xray-sdk/recorder.rb +209 -0
- data/lib/aws-xray-sdk/sampling/default_sampler.rb +105 -0
- data/lib/aws-xray-sdk/sampling/reservoir.rb +35 -0
- data/lib/aws-xray-sdk/sampling/sampler.rb +27 -0
- data/lib/aws-xray-sdk/sampling/sampling_rule.rb +57 -0
- data/lib/aws-xray-sdk/search_pattern.rb +82 -0
- data/lib/aws-xray-sdk/segment_naming/dynamic_naming.rb +26 -0
- data/lib/aws-xray-sdk/segment_naming/segment_naming.rb +10 -0
- data/lib/aws-xray-sdk/streaming/default_streamer.rb +53 -0
- data/lib/aws-xray-sdk/streaming/streamer.rb +17 -0
- data/lib/aws-xray-sdk/version.rb +3 -0
- 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,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
|
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: []
|