ddtrace 0.46.0 → 0.47.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.
- checksums.yaml +5 -5
- data/.circleci/config.yml +52 -12
- data/.circleci/images/primary/{Dockerfile-jruby-9.2 → Dockerfile-jruby-9.2-latest} +2 -1
- data/.circleci/images/primary/Dockerfile-jruby-9.2.0.0 +73 -0
- data/.circleci/images/primary/Dockerfile-truffleruby-21.0.0 +73 -0
- data/.github/workflows/create-next-milestone.yml +2 -2
- data/.rubocop_todo.yml +3 -2
- data/.simplecov +6 -0
- data/Appraisals +1 -1
- data/CHANGELOG.md +83 -1
- data/Gemfile +19 -4
- data/LICENSE-3rdparty.csv +2 -0
- data/docker-compose.yml +75 -7
- data/docs/GettingStarted.md +61 -8
- data/lib/ddtrace/configuration.rb +92 -23
- data/lib/ddtrace/configuration/options.rb +2 -4
- data/lib/ddtrace/context_provider.rb +0 -2
- data/lib/ddtrace/contrib/active_record/configuration/resolver.rb +97 -26
- data/lib/ddtrace/contrib/aws/services.rb +1 -0
- data/lib/ddtrace/contrib/configurable.rb +63 -39
- data/lib/ddtrace/contrib/configuration/resolver.rb +70 -5
- data/lib/ddtrace/contrib/configuration/resolvers/pattern_resolver.rb +19 -17
- data/lib/ddtrace/contrib/configuration/settings.rb +7 -6
- data/lib/ddtrace/contrib/elasticsearch/patcher.rb +1 -0
- data/lib/ddtrace/contrib/extensions.rb +26 -3
- data/lib/ddtrace/contrib/httpclient/instrumentation.rb +12 -16
- data/lib/ddtrace/contrib/httpclient/patcher.rb +5 -2
- data/lib/ddtrace/contrib/httprb/instrumentation.rb +12 -17
- data/lib/ddtrace/contrib/httprb/patcher.rb +5 -2
- data/lib/ddtrace/contrib/patcher.rb +8 -5
- data/lib/ddtrace/contrib/presto/patcher.rb +5 -2
- data/lib/ddtrace/contrib/rails/patcher.rb +6 -2
- data/lib/ddtrace/contrib/redis/configuration/resolver.rb +11 -4
- data/lib/ddtrace/contrib/resque/integration.rb +1 -1
- data/lib/ddtrace/ext/runtime.rb +2 -0
- data/lib/ddtrace/patcher.rb +23 -1
- data/lib/ddtrace/pin.rb +5 -9
- data/lib/ddtrace/runtime/cgroup.rb +1 -1
- data/lib/ddtrace/runtime/container.rb +25 -27
- data/lib/ddtrace/runtime/identity.rb +8 -0
- data/lib/ddtrace/sync_writer.rb +5 -2
- data/lib/ddtrace/tracer.rb +6 -4
- data/lib/ddtrace/transport/http.rb +14 -5
- data/lib/ddtrace/transport/http/adapters/net.rb +18 -4
- data/lib/ddtrace/transport/http/builder.rb +5 -1
- data/lib/ddtrace/transport/http/env.rb +8 -0
- data/lib/ddtrace/transport/io/response.rb +1 -3
- data/lib/ddtrace/transport/io/traces.rb +6 -0
- data/lib/ddtrace/transport/traces.rb +15 -1
- data/lib/ddtrace/utils/compression.rb +27 -0
- data/lib/ddtrace/utils/object_set.rb +41 -0
- data/lib/ddtrace/utils/only_once.rb +40 -0
- data/lib/ddtrace/utils/sequence.rb +17 -0
- data/lib/ddtrace/utils/string_table.rb +45 -0
- data/lib/ddtrace/utils/time.rb +7 -0
- data/lib/ddtrace/vendor/multipart-post/LICENSE +11 -0
- data/lib/ddtrace/vendor/multipart-post/multipart.rb +12 -0
- data/lib/ddtrace/vendor/multipart-post/multipart/post.rb +8 -0
- data/lib/ddtrace/vendor/multipart-post/multipart/post/composite_read_io.rb +116 -0
- data/lib/ddtrace/vendor/multipart-post/multipart/post/multipartable.rb +57 -0
- data/lib/ddtrace/vendor/multipart-post/multipart/post/parts.rb +135 -0
- data/lib/ddtrace/vendor/multipart-post/multipart/post/version.rb +9 -0
- data/lib/ddtrace/vendor/multipart-post/net/http/post/multipart.rb +32 -0
- data/lib/ddtrace/version.rb +1 -1
- data/lib/ddtrace/workers/async.rb +3 -3
- data/lib/ddtrace/workers/loop.rb +14 -3
- data/lib/ddtrace/workers/queue.rb +1 -0
- data/lib/ddtrace/workers/trace_writer.rb +1 -0
- data/lib/ddtrace/writer.rb +4 -1
- metadata +21 -4
@@ -1,4 +1,5 @@
|
|
1
1
|
require 'ddtrace/configuration/base'
|
2
|
+
require 'ddtrace/utils/only_once'
|
2
3
|
|
3
4
|
module Datadog
|
4
5
|
module Contrib
|
@@ -7,6 +8,8 @@ module Datadog
|
|
7
8
|
class Settings
|
8
9
|
include Datadog::Configuration::Base
|
9
10
|
|
11
|
+
DEPRECATION_WARN_ONLY_ONCE = Datadog::Utils::OnlyOnce.new
|
12
|
+
|
10
13
|
option :analytics_enabled, default: false
|
11
14
|
option :analytics_sample_rate, default: 1.0
|
12
15
|
option :enabled, default: true
|
@@ -14,7 +17,7 @@ module Datadog
|
|
14
17
|
option :tracer do |o|
|
15
18
|
o.delegate_to { Datadog.tracer }
|
16
19
|
o.on_set do |_value|
|
17
|
-
log_deprecation_warning
|
20
|
+
log_deprecation_warning
|
18
21
|
end
|
19
22
|
end
|
20
23
|
|
@@ -41,11 +44,9 @@ module Datadog
|
|
41
44
|
the correct tracer internally.
|
42
45
|
).freeze
|
43
46
|
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
do_once(method_name) do
|
48
|
-
Datadog.logger.warn("#{method_name}:#{DEPRECATION_WARNING}:#{caller.join("\n")}")
|
47
|
+
def log_deprecation_warning
|
48
|
+
DEPRECATION_WARN_ONLY_ONCE.run do
|
49
|
+
Datadog.logger.warn("tracer:#{DEPRECATION_WARNING}:#{caller.join("\n")}")
|
49
50
|
end
|
50
51
|
end
|
51
52
|
end
|
@@ -47,7 +47,7 @@ module Datadog
|
|
47
47
|
desc += ", Compatible? #{patch_results[:compatible]}"
|
48
48
|
desc += ", Patchable? #{patch_results[:patchable]}"
|
49
49
|
|
50
|
-
Datadog.logger.warn("Unable to patch #{patch_results[
|
50
|
+
Datadog.logger.warn("Unable to patch #{patch_results[:name]} (#{desc})")
|
51
51
|
end
|
52
52
|
|
53
53
|
target.integrations_pending_activation.clear
|
@@ -67,9 +67,32 @@ module Datadog
|
|
67
67
|
end
|
68
68
|
end
|
69
69
|
|
70
|
-
|
70
|
+
# For the provided `integration_name`, resolves a matching configuration
|
71
|
+
# for the provided integration from an integration-specific `key`.
|
72
|
+
#
|
73
|
+
# How the matching is performed is integration-specific.
|
74
|
+
#
|
75
|
+
# @param [Symbol] integration_name the integration name
|
76
|
+
# @param [Object] key the integration-specific lookup key
|
77
|
+
# @return [Datadog::Contrib::Configuration::Settings]
|
78
|
+
def [](integration_name, key = :default)
|
71
79
|
integration = fetch_integration(integration_name)
|
72
|
-
integration.
|
80
|
+
integration.resolve(key) unless integration.nil?
|
81
|
+
end
|
82
|
+
|
83
|
+
# For the provided `integration_name`, retrieves a configuration previously
|
84
|
+
# stored by `#instrument`. Specifically, `describes` should be
|
85
|
+
# the same value provided in the `describes:` option for `#instrument`.
|
86
|
+
#
|
87
|
+
# If no `describes` value is provided, the default configuration is returned.
|
88
|
+
#
|
89
|
+
# @param [Symbol] integration_name the integration name
|
90
|
+
# @param [Object] describes the previously configured `describes:` object. If `nil`,
|
91
|
+
# fetches the default configuration
|
92
|
+
# @return [Datadog::Contrib::Configuration::Settings]
|
93
|
+
def configuration(integration_name, describes = nil)
|
94
|
+
integration = fetch_integration(integration_name)
|
95
|
+
integration.configuration(describes) unless integration.nil?
|
73
96
|
end
|
74
97
|
|
75
98
|
def instrument(integration_name, options = {}, &block)
|
@@ -88,14 +88,12 @@ module Datadog
|
|
88
88
|
service = config[:service_name]
|
89
89
|
tracer = config[:tracer]
|
90
90
|
|
91
|
-
@datadog_pin ||=
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
)
|
98
|
-
end
|
91
|
+
@datadog_pin ||= Datadog::Pin.new(
|
92
|
+
service,
|
93
|
+
app: Ext::APP,
|
94
|
+
app_type: Datadog::Ext::HTTP::TYPE_OUTBOUND,
|
95
|
+
tracer: -> { config[:tracer] }
|
96
|
+
)
|
99
97
|
|
100
98
|
if @datadog_pin.service_name == default_datadog_pin.service_name && @datadog_pin.service_name != service
|
101
99
|
@datadog_pin.service = service
|
@@ -111,14 +109,12 @@ module Datadog
|
|
111
109
|
config = Datadog.configuration[:httpclient]
|
112
110
|
service = config[:service_name]
|
113
111
|
|
114
|
-
@default_datadog_pin ||=
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
)
|
121
|
-
end
|
112
|
+
@default_datadog_pin ||= Datadog::Pin.new(
|
113
|
+
service,
|
114
|
+
app: Ext::APP,
|
115
|
+
app_type: Datadog::Ext::HTTP::TYPE_OUTBOUND,
|
116
|
+
tracer: -> { config[:tracer] }
|
117
|
+
)
|
122
118
|
end
|
123
119
|
|
124
120
|
def datadog_configuration(host = :default)
|
@@ -1,5 +1,6 @@
|
|
1
1
|
require 'ddtrace/contrib/patcher'
|
2
2
|
require 'ddtrace/contrib/httpclient/instrumentation'
|
3
|
+
require 'ddtrace/utils/only_once'
|
3
4
|
|
4
5
|
module Datadog
|
5
6
|
module Contrib
|
@@ -9,10 +10,12 @@ module Datadog
|
|
9
10
|
module Patcher
|
10
11
|
include Contrib::Patcher
|
11
12
|
|
13
|
+
PATCH_ONLY_ONCE = Datadog::Utils::OnlyOnce.new
|
14
|
+
|
12
15
|
module_function
|
13
16
|
|
14
17
|
def patched?
|
15
|
-
|
18
|
+
PATCH_ONLY_ONCE.ran?
|
16
19
|
end
|
17
20
|
|
18
21
|
def target_version
|
@@ -21,7 +24,7 @@ module Datadog
|
|
21
24
|
|
22
25
|
# patch applies our patch
|
23
26
|
def patch
|
24
|
-
|
27
|
+
PATCH_ONLY_ONCE.run do
|
25
28
|
begin
|
26
29
|
::HTTPClient.send(:include, Instrumentation)
|
27
30
|
rescue StandardError => e
|
@@ -16,7 +16,6 @@ module Datadog
|
|
16
16
|
end
|
17
17
|
|
18
18
|
# Instance methods for configuration
|
19
|
-
# rubocop:disable Metrics/ModuleLength
|
20
19
|
module InstanceMethods
|
21
20
|
include Datadog::Contrib::HttpAnnotationHelper
|
22
21
|
|
@@ -99,14 +98,12 @@ module Datadog
|
|
99
98
|
service = config[:service_name]
|
100
99
|
tracer = config[:tracer]
|
101
100
|
|
102
|
-
@datadog_pin ||=
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
)
|
109
|
-
end
|
101
|
+
@datadog_pin ||= Datadog::Pin.new(
|
102
|
+
service,
|
103
|
+
app: Ext::APP,
|
104
|
+
app_type: Datadog::Ext::HTTP::TYPE_OUTBOUND,
|
105
|
+
tracer: -> { config[:tracer] }
|
106
|
+
)
|
110
107
|
|
111
108
|
if @datadog_pin.service_name == default_datadog_pin.service_name && @datadog_pin.service_name != service
|
112
109
|
@datadog_pin.service = service
|
@@ -122,14 +119,12 @@ module Datadog
|
|
122
119
|
config = Datadog.configuration[:httprb]
|
123
120
|
service = config[:service_name]
|
124
121
|
|
125
|
-
@default_datadog_pin ||=
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
)
|
132
|
-
end
|
122
|
+
@default_datadog_pin ||= Datadog::Pin.new(
|
123
|
+
service,
|
124
|
+
app: Ext::APP,
|
125
|
+
app_type: Datadog::Ext::HTTP::TYPE_OUTBOUND,
|
126
|
+
tracer: -> { config[:tracer] }
|
127
|
+
)
|
133
128
|
end
|
134
129
|
|
135
130
|
def datadog_configuration(host = :default)
|
@@ -1,5 +1,6 @@
|
|
1
1
|
require 'ddtrace/contrib/patcher'
|
2
2
|
require 'ddtrace/contrib/httprb/instrumentation'
|
3
|
+
require 'ddtrace/utils/only_once'
|
3
4
|
|
4
5
|
module Datadog
|
5
6
|
module Contrib
|
@@ -9,10 +10,12 @@ module Datadog
|
|
9
10
|
module Patcher
|
10
11
|
include Contrib::Patcher
|
11
12
|
|
13
|
+
PATCH_ONLY_ONCE = Datadog::Utils::OnlyOnce.new
|
14
|
+
|
12
15
|
module_function
|
13
16
|
|
14
17
|
def patched?
|
15
|
-
|
18
|
+
PATCH_ONLY_ONCE.ran?
|
16
19
|
end
|
17
20
|
|
18
21
|
def target_version
|
@@ -21,7 +24,7 @@ module Datadog
|
|
21
24
|
|
22
25
|
# patch applies our patch
|
23
26
|
def patch
|
24
|
-
|
27
|
+
PATCH_ONLY_ONCE.run do
|
25
28
|
begin
|
26
29
|
::HTTP::Client.send(:include, Instrumentation)
|
27
30
|
rescue StandardError => e
|
@@ -1,12 +1,10 @@
|
|
1
|
-
require 'ddtrace/
|
1
|
+
require 'ddtrace/utils/only_once'
|
2
2
|
|
3
3
|
module Datadog
|
4
4
|
module Contrib
|
5
5
|
# Common behavior for patcher modules
|
6
6
|
module Patcher
|
7
7
|
def self.included(base)
|
8
|
-
base.send(:include, Datadog::Patcher)
|
9
|
-
|
10
8
|
base.singleton_class.send(:prepend, CommonMethods)
|
11
9
|
base.send(:prepend, CommonMethods) if base.instance_of?(Class)
|
12
10
|
end
|
@@ -18,13 +16,13 @@ module Datadog
|
|
18
16
|
end
|
19
17
|
|
20
18
|
def patched?
|
21
|
-
|
19
|
+
patch_only_once.ran?
|
22
20
|
end
|
23
21
|
|
24
22
|
def patch
|
25
23
|
return unless defined?(super)
|
26
24
|
|
27
|
-
|
25
|
+
patch_only_once.run do
|
28
26
|
begin
|
29
27
|
super.tap do
|
30
28
|
# Emit a metric
|
@@ -56,6 +54,11 @@ module Datadog
|
|
56
54
|
tags << "target_version:#{target_version}" if respond_to?(:target_version) && !target_version.nil?
|
57
55
|
end
|
58
56
|
end
|
57
|
+
|
58
|
+
def patch_only_once
|
59
|
+
# NOTE: This is not thread-safe
|
60
|
+
@patch_only_once ||= Datadog::Utils::OnlyOnce.new
|
61
|
+
end
|
59
62
|
end
|
60
63
|
end
|
61
64
|
end
|
@@ -1,6 +1,7 @@
|
|
1
1
|
require 'ddtrace/contrib/patcher'
|
2
2
|
require 'ddtrace/contrib/presto/ext'
|
3
3
|
require 'ddtrace/contrib/presto/instrumentation'
|
4
|
+
require 'ddtrace/utils/only_once'
|
4
5
|
|
5
6
|
module Datadog
|
6
7
|
module Contrib
|
@@ -9,14 +10,16 @@ module Datadog
|
|
9
10
|
module Patcher
|
10
11
|
include Contrib::Patcher
|
11
12
|
|
13
|
+
PATCH_ONLY_ONCE = Datadog::Utils::OnlyOnce.new
|
14
|
+
|
12
15
|
module_function
|
13
16
|
|
14
17
|
def patched?
|
15
|
-
|
18
|
+
PATCH_ONLY_ONCE.ran?
|
16
19
|
end
|
17
20
|
|
18
21
|
def patch
|
19
|
-
|
22
|
+
PATCH_ONLY_ONCE.run do
|
20
23
|
begin
|
21
24
|
::Presto::Client::Client.send(:include, Instrumentation::Client)
|
22
25
|
rescue StandardError => e
|
@@ -3,6 +3,7 @@ require 'ddtrace/contrib/rails/framework'
|
|
3
3
|
require 'ddtrace/contrib/rails/middlewares'
|
4
4
|
require 'ddtrace/contrib/rails/log_injection'
|
5
5
|
require 'ddtrace/contrib/rack/middlewares'
|
6
|
+
require 'ddtrace/utils/only_once'
|
6
7
|
|
7
8
|
module Datadog
|
8
9
|
module Contrib
|
@@ -11,6 +12,9 @@ module Datadog
|
|
11
12
|
module Patcher
|
12
13
|
include Contrib::Patcher
|
13
14
|
|
15
|
+
BEFORE_INITIALIZE_ONLY_ONCE_PER_APP = Hash.new { |h, key| h[key] = Datadog::Utils::OnlyOnce.new }
|
16
|
+
AFTER_INITIALIZE_ONLY_ONCE_PER_APP = Hash.new { |h, key| h[key] = Datadog::Utils::OnlyOnce.new }
|
17
|
+
|
14
18
|
module_function
|
15
19
|
|
16
20
|
def target_version
|
@@ -29,7 +33,7 @@ module Datadog
|
|
29
33
|
end
|
30
34
|
|
31
35
|
def before_intialize(app)
|
32
|
-
|
36
|
+
BEFORE_INITIALIZE_ONLY_ONCE_PER_APP[app].run do
|
33
37
|
# Middleware must be added before the application is initialized.
|
34
38
|
# Otherwise the middleware stack will be frozen.
|
35
39
|
# Sometimes we don't want to activate middleware e.g. OpenTracing, etc.
|
@@ -86,7 +90,7 @@ module Datadog
|
|
86
90
|
end
|
87
91
|
|
88
92
|
def after_intialize(app)
|
89
|
-
|
93
|
+
AFTER_INITIALIZE_ONLY_ONCE_PER_APP[app].run do
|
90
94
|
# Finish configuring the tracer after the application is initialized.
|
91
95
|
# We need to wait for some things, like application name, middleware stack, etc.
|
92
96
|
setup_tracer
|
@@ -6,12 +6,19 @@ module Datadog
|
|
6
6
|
module Configuration
|
7
7
|
UNIX_SCHEME = 'unix'.freeze
|
8
8
|
|
9
|
-
# Converts
|
9
|
+
# Converts String URLs and Hashes to a normalized connection settings Hash.
|
10
10
|
class Resolver < Contrib::Configuration::Resolver
|
11
|
-
|
12
|
-
|
11
|
+
# @param [Hash,String] Redis connection information
|
12
|
+
def resolve(hash)
|
13
|
+
super(parse_matcher(hash))
|
14
|
+
end
|
15
|
+
|
16
|
+
protected
|
17
|
+
|
18
|
+
def parse_matcher(matcher)
|
19
|
+
matcher = { url: matcher } if matcher.is_a?(String)
|
13
20
|
|
14
|
-
normalize(connection_resolver.resolve(
|
21
|
+
normalize(connection_resolver.resolve(matcher))
|
15
22
|
end
|
16
23
|
|
17
24
|
def normalize(hash)
|
data/lib/ddtrace/ext/runtime.rb
CHANGED
@@ -5,7 +5,9 @@ module Datadog
|
|
5
5
|
module Runtime
|
6
6
|
# Identity
|
7
7
|
LANG = 'ruby'.freeze
|
8
|
+
LANG_ENGINE = RUBY_ENGINE
|
8
9
|
LANG_INTERPRETER = "#{RUBY_ENGINE}-#{RUBY_PLATFORM}".freeze
|
10
|
+
LANG_PLATFORM = RUBY_PLATFORM
|
9
11
|
LANG_VERSION = RUBY_VERSION
|
10
12
|
RUBY_ENGINE = ::RUBY_ENGINE # e.g. 'ruby', 'jruby', 'truffleruby'
|
11
13
|
TRACER_VERSION = Datadog::VERSION::STRING
|
data/lib/ddtrace/patcher.rb
CHANGED
@@ -1,7 +1,21 @@
|
|
1
|
+
require 'ddtrace/utils/only_once'
|
2
|
+
|
1
3
|
module Datadog
|
2
|
-
#
|
4
|
+
# Deprecated: This module should no longer be included. It's only being kept around for backwards compatibility
|
5
|
+
# concerns regarding customer usage.
|
3
6
|
module Patcher
|
7
|
+
INCLUDED_WARN_ONLY_ONCE = Datadog::Utils::OnlyOnce.new
|
8
|
+
DO_ONCE_USAGE_WARN_ONLY_ONCE = Datadog::Utils::OnlyOnce.new
|
9
|
+
|
4
10
|
def self.included(base)
|
11
|
+
INCLUDED_WARN_ONLY_ONCE.run do
|
12
|
+
Datadog.logger.warn(
|
13
|
+
'Including Datadog::Patcher is deprecated. ' \
|
14
|
+
'For the #do_once behavior, use Datadog::Utils::OnlyOnce instead. ' \
|
15
|
+
'For the #without_warnings behavior, use Datadog::Patcher.without_warnings { ... } as a module function.'
|
16
|
+
)
|
17
|
+
end
|
18
|
+
|
5
19
|
base.send(:extend, CommonMethods)
|
6
20
|
base.send(:include, CommonMethods)
|
7
21
|
end
|
@@ -22,6 +36,10 @@ module Datadog
|
|
22
36
|
end
|
23
37
|
|
24
38
|
def do_once(key = nil, options = {})
|
39
|
+
DO_ONCE_USAGE_WARN_ONLY_ONCE.run do
|
40
|
+
Datadog.logger.warn('Datadog::Patcher#do_once is deprecated. Use Datadog::Utils::OnlyOnce instead.')
|
41
|
+
end
|
42
|
+
|
25
43
|
# If already done, don't do again
|
26
44
|
@done_once ||= Hash.new { |h, k| h[k] = {} }
|
27
45
|
return @done_once[key][options[:for]] if @done_once.key?(key) && @done_once[key].key?(options[:for])
|
@@ -34,6 +52,10 @@ module Datadog
|
|
34
52
|
end
|
35
53
|
|
36
54
|
def done?(key, options = {})
|
55
|
+
DO_ONCE_USAGE_WARN_ONLY_ONCE.run do
|
56
|
+
Datadog.logger.warn('Datadog::Patcher#done? is deprecated. Use Datadog::Utils::OnlyOnce instead.')
|
57
|
+
end
|
58
|
+
|
37
59
|
return false unless instance_variable_defined?(:@done_once)
|
38
60
|
|
39
61
|
!@done_once.nil? && @done_once.key?(key) && @done_once[key].key?(options[:for])
|
data/lib/ddtrace/pin.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
require 'ddtrace/patcher'
|
2
|
+
require 'ddtrace/utils/only_once'
|
2
3
|
|
3
4
|
# \Datadog global namespace that includes all tracing functionality for Tracer and Span classes.
|
4
5
|
module Datadog
|
@@ -7,6 +8,8 @@ module Datadog
|
|
7
8
|
# This is useful if you wanted to, say, trace two different
|
8
9
|
# database clusters.
|
9
10
|
class Pin
|
11
|
+
DEPRECATION_WARN_ONLY_ONCE = Datadog::Utils::OnlyOnce.new
|
12
|
+
|
10
13
|
def self.get_from(obj)
|
11
14
|
return nil unless obj.respond_to? :datadog_pin
|
12
15
|
|
@@ -74,15 +77,8 @@ module Datadog
|
|
74
77
|
).freeze
|
75
78
|
|
76
79
|
def deprecation_warning
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
include Datadog::Patcher
|
81
|
-
|
82
|
-
def log_deprecation_warning(method_name)
|
83
|
-
# Only log each deprecation warning once (safeguard against log spam)
|
84
|
-
do_once(method_name) do
|
85
|
-
Datadog.logger.warn("#{method_name}:#{DEPRECATION_WARNING}")
|
80
|
+
DEPRECATION_WARN_ONLY_ONCE.run do
|
81
|
+
Datadog.logger.warn("Datadog::Pin.new:#{DEPRECATION_WARNING}")
|
86
82
|
end
|
87
83
|
end
|
88
84
|
end
|