datadog 2.12.0 → 2.12.1
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 +4 -4
- data/CHANGELOG.md +10 -2
- data/lib/datadog/appsec/contrib/active_record/instrumentation.rb +23 -6
- data/lib/datadog/appsec/contrib/active_record/patcher.rb +63 -12
- data/lib/datadog/core/configuration/components.rb +9 -8
- data/lib/datadog/core/metrics/client.rb +9 -8
- data/lib/datadog/core/remote/client.rb +5 -4
- data/lib/datadog/core/remote/component.rb +3 -3
- data/lib/datadog/core/remote/negotiation.rb +1 -1
- data/lib/datadog/core/remote/transport/http.rb +4 -33
- data/lib/datadog/core/transport/http.rb +38 -0
- data/lib/datadog/core/workers/runtime_metrics.rb +1 -1
- data/lib/datadog/di/transport/http.rb +2 -16
- data/lib/datadog/tracing/sync_writer.rb +4 -2
- data/lib/datadog/tracing/tracer.rb +6 -1
- data/lib/datadog/tracing/transport/http.rb +3 -32
- data/lib/datadog/tracing/workers/trace_writer.rb +6 -2
- data/lib/datadog/tracing/writer.rb +6 -2
- data/lib/datadog/version.rb +1 -1
- metadata +5 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d150a054dd119a853c1f7c0653a2ea2dedb1b20ce4b538168ead98ed3abc8720
|
4
|
+
data.tar.gz: 69ff582e245644c0c867d48ecd20fd2b493fc97b778235d163bef193aa8ea298
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8845d2c09585196054cdf50b353dbf1a226a58d468c3ed9c99b8a12bfa12e659b41c4e67abf6e20288fa740692c9bd4ea874004e523bbe29b1a30b6bc997a53b
|
7
|
+
data.tar.gz: c4e4b6a42acc8af8675287440b437db002201d5eb5a1371e141b6ffdef82c752f063f8c4fd679fdaa4196530612bdc066e81897a1c14c41ec62ac77e65afafe2
|
data/CHANGELOG.md
CHANGED
@@ -2,6 +2,12 @@
|
|
2
2
|
|
3
3
|
## [Unreleased]
|
4
4
|
|
5
|
+
## [2.12.1] - 2025-03-05
|
6
|
+
|
7
|
+
### Fixed
|
8
|
+
|
9
|
+
* AppSec: Fix `ArgumentError` from ActiveRecord for Ruby < 2.7 ([#4437][])
|
10
|
+
|
5
11
|
## [2.12.0] - 2025-02-27
|
6
12
|
|
7
13
|
### Added
|
@@ -3133,7 +3139,8 @@ Release notes: https://github.com/DataDog/dd-trace-rb/releases/tag/v0.3.1
|
|
3133
3139
|
Git diff: https://github.com/DataDog/dd-trace-rb/compare/v0.3.0...v0.3.1
|
3134
3140
|
|
3135
3141
|
|
3136
|
-
[Unreleased]: https://github.com/DataDog/dd-trace-rb/compare/v2.12.
|
3142
|
+
[Unreleased]: https://github.com/DataDog/dd-trace-rb/compare/v2.12.1...master
|
3143
|
+
[2.12.1]: https://github.com/DataDog/dd-trace-rb/compare/v2.12.0...v2.12.1
|
3137
3144
|
[2.12.0]: https://github.com/DataDog/dd-trace-rb/compare/v2.11.0...v2.12.0
|
3138
3145
|
[2.11.0]: https://github.com/DataDog/dd-trace-rb/compare/v2.10.0...v2.11.0
|
3139
3146
|
[2.10.0]: https://github.com/DataDog/dd-trace-rb/compare/v2.9.0...v2.10.0
|
@@ -4635,6 +4642,7 @@ Git diff: https://github.com/DataDog/dd-trace-rb/compare/v0.3.0...v0.3.1
|
|
4635
4642
|
[#4424]: https://github.com/DataDog/dd-trace-rb/issues/4424
|
4636
4643
|
[#4425]: https://github.com/DataDog/dd-trace-rb/issues/4425
|
4637
4644
|
[#4426]: https://github.com/DataDog/dd-trace-rb/issues/4426
|
4645
|
+
[#4437]: https://github.com/DataDog/dd-trace-rb/issues/4437
|
4638
4646
|
[@AdrianLC]: https://github.com/AdrianLC
|
4639
4647
|
[@Azure7111]: https://github.com/Azure7111
|
4640
4648
|
[@BabyGroot]: https://github.com/BabyGroot
|
@@ -4786,4 +4794,4 @@ Git diff: https://github.com/DataDog/dd-trace-rb/compare/v0.3.0...v0.3.1
|
|
4786
4794
|
[@y-yagi]: https://github.com/y-yagi
|
4787
4795
|
[@yujideveloper]: https://github.com/yujideveloper
|
4788
4796
|
[@yukimurasawa]: https://github.com/yukimurasawa
|
4789
|
-
[@zachmccormick]: https://github.com/zachmccormick
|
4797
|
+
[@zachmccormick]: https://github.com/zachmccormick
|
@@ -43,7 +43,7 @@ module Datadog
|
|
43
43
|
end
|
44
44
|
end
|
45
45
|
|
46
|
-
# patch for
|
46
|
+
# patch for mysql2, sqlite3, and postgres+jdbc adapters in ActiveRecord >= 7.1
|
47
47
|
module InternalExecQueryAdapterPatch
|
48
48
|
def internal_exec_query(sql, *args, **rest)
|
49
49
|
Instrumentation.detect_sql_injection(sql, adapter_name)
|
@@ -52,7 +52,25 @@ module Datadog
|
|
52
52
|
end
|
53
53
|
end
|
54
54
|
|
55
|
-
# patch for postgres
|
55
|
+
# patch for mysql2, sqlite3, and postgres+jdbc adapters in ActiveRecord < 7.1
|
56
|
+
module ExecQueryAdapterPatch
|
57
|
+
def exec_query(sql, *args, **rest)
|
58
|
+
Instrumentation.detect_sql_injection(sql, adapter_name)
|
59
|
+
|
60
|
+
super
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
# patch for mysql2, sqlite3, and postgres+jdbc db adapters in ActiveRecord 4
|
65
|
+
module Rails4ExecQueryAdapterPatch
|
66
|
+
def exec_query(sql, *args)
|
67
|
+
Instrumentation.detect_sql_injection(sql, adapter_name)
|
68
|
+
|
69
|
+
super
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
# patch for non-jdbc postgres adapter in ActiveRecord > 4
|
56
74
|
module ExecuteAndClearAdapterPatch
|
57
75
|
def execute_and_clear(sql, *args, **rest)
|
58
76
|
Instrumentation.detect_sql_injection(sql, adapter_name)
|
@@ -61,10 +79,9 @@ module Datadog
|
|
61
79
|
end
|
62
80
|
end
|
63
81
|
|
64
|
-
# patch for
|
65
|
-
|
66
|
-
|
67
|
-
def exec_query(sql, *args, **rest)
|
82
|
+
# patch for non-jdbc postgres adapter in ActiveRecord 4
|
83
|
+
module Rails4ExecuteAndClearAdapterPatch
|
84
|
+
def execute_and_clear(sql, name, binds)
|
68
85
|
Instrumentation.detect_sql_injection(sql, adapter_name)
|
69
86
|
|
70
87
|
super
|
@@ -19,30 +19,81 @@ module Datadog
|
|
19
19
|
end
|
20
20
|
|
21
21
|
def patch
|
22
|
+
# Rails 7.0 intruduced new on-load hooks for sqlite3 and postgresql adapters
|
23
|
+
# The load hook for mysql2 adapter was introduced in Rails 7.1
|
24
|
+
#
|
25
|
+
# If the adapter is not loaded when the :active_record load hook is called,
|
26
|
+
# we need to add a load hook for the adapter
|
22
27
|
ActiveSupport.on_load :active_record do
|
23
|
-
instrumentation_module = if ::ActiveRecord.gem_version >= Gem::Version.new('7.1')
|
24
|
-
Instrumentation::InternalExecQueryAdapterPatch
|
25
|
-
else
|
26
|
-
Instrumentation::ExecQueryAdapterPatch
|
27
|
-
end
|
28
|
-
|
29
28
|
if defined?(::ActiveRecord::ConnectionAdapters::SQLite3Adapter)
|
30
|
-
::ActiveRecord::
|
29
|
+
::Datadog::AppSec::Contrib::ActiveRecord::Patcher.patch_sqlite3_adapter
|
30
|
+
else
|
31
|
+
ActiveSupport.on_load :active_record_sqlite3adapter do
|
32
|
+
::Datadog::AppSec::Contrib::ActiveRecord::Patcher.patch_sqlite3_adapter
|
33
|
+
end
|
31
34
|
end
|
32
35
|
|
33
36
|
if defined?(::ActiveRecord::ConnectionAdapters::Mysql2Adapter)
|
34
|
-
::ActiveRecord::
|
37
|
+
::Datadog::AppSec::Contrib::ActiveRecord::Patcher.patch_mysql2_adapter
|
38
|
+
else
|
39
|
+
ActiveSupport.on_load :active_record_mysql2adapter do
|
40
|
+
::Datadog::AppSec::Contrib::ActiveRecord::Patcher.patch_mysql2_adapter
|
41
|
+
end
|
35
42
|
end
|
36
43
|
|
37
44
|
if defined?(::ActiveRecord::ConnectionAdapters::PostgreSQLAdapter)
|
38
|
-
|
39
|
-
|
45
|
+
::Datadog::AppSec::Contrib::ActiveRecord::Patcher.patch_postgresql_adapter
|
46
|
+
else
|
47
|
+
ActiveSupport.on_load :active_record_postgresqladapter do
|
48
|
+
::Datadog::AppSec::Contrib::ActiveRecord::Patcher.patch_postgresql_adapter
|
40
49
|
end
|
41
|
-
|
42
|
-
::ActiveRecord::ConnectionAdapters::PostgreSQLAdapter.prepend(instrumentation_module)
|
43
50
|
end
|
44
51
|
end
|
45
52
|
end
|
53
|
+
|
54
|
+
def patch_sqlite3_adapter
|
55
|
+
instrumentation_module = if ::ActiveRecord.gem_version >= Gem::Version.new('7.1')
|
56
|
+
Instrumentation::InternalExecQueryAdapterPatch
|
57
|
+
elsif ::ActiveRecord.gem_version.segments.first == 4
|
58
|
+
Instrumentation::Rails4ExecQueryAdapterPatch
|
59
|
+
else
|
60
|
+
Instrumentation::ExecQueryAdapterPatch
|
61
|
+
end
|
62
|
+
|
63
|
+
::ActiveRecord::ConnectionAdapters::SQLite3Adapter.prepend(instrumentation_module)
|
64
|
+
end
|
65
|
+
|
66
|
+
def patch_mysql2_adapter
|
67
|
+
instrumentation_module = if ::ActiveRecord.gem_version >= Gem::Version.new('7.1')
|
68
|
+
Instrumentation::InternalExecQueryAdapterPatch
|
69
|
+
elsif ::ActiveRecord.gem_version.segments.first == 4
|
70
|
+
Instrumentation::Rails4ExecQueryAdapterPatch
|
71
|
+
else
|
72
|
+
Instrumentation::ExecQueryAdapterPatch
|
73
|
+
end
|
74
|
+
|
75
|
+
::ActiveRecord::ConnectionAdapters::Mysql2Adapter.prepend(instrumentation_module)
|
76
|
+
end
|
77
|
+
|
78
|
+
def patch_postgresql_adapter
|
79
|
+
instrumentation_module = if ::ActiveRecord.gem_version.segments.first == 4
|
80
|
+
Instrumentation::Rails4ExecuteAndClearAdapterPatch
|
81
|
+
else
|
82
|
+
Instrumentation::ExecuteAndClearAdapterPatch
|
83
|
+
end
|
84
|
+
|
85
|
+
if defined?(::ActiveRecord::ConnectionAdapters::JdbcAdapter)
|
86
|
+
instrumentation_module = if ::ActiveRecord.gem_version >= Gem::Version.new('7.1')
|
87
|
+
Instrumentation::InternalExecQueryAdapterPatch
|
88
|
+
elsif ::ActiveRecord.gem_version.segments.first == 4
|
89
|
+
Instrumentation::Rails4ExecQueryAdapterPatch
|
90
|
+
else
|
91
|
+
Instrumentation::ExecQueryAdapterPatch
|
92
|
+
end
|
93
|
+
end
|
94
|
+
|
95
|
+
::ActiveRecord::ConnectionAdapters::PostgreSQLAdapter.prepend(instrumentation_module)
|
96
|
+
end
|
46
97
|
end
|
47
98
|
end
|
48
99
|
end
|
@@ -26,12 +26,12 @@ module Datadog
|
|
26
26
|
class << self
|
27
27
|
include Datadog::Tracing::Component
|
28
28
|
|
29
|
-
def build_health_metrics(settings)
|
29
|
+
def build_health_metrics(settings, logger)
|
30
30
|
settings = settings.health_metrics
|
31
31
|
options = { enabled: settings.enabled }
|
32
32
|
options[:statsd] = settings.statsd unless settings.statsd.nil?
|
33
33
|
|
34
|
-
Core::Diagnostics::Health::Metrics.new(**options)
|
34
|
+
Core::Diagnostics::Health::Metrics.new(logger: logger, **options)
|
35
35
|
end
|
36
36
|
|
37
37
|
def build_logger(settings)
|
@@ -41,19 +41,20 @@ module Datadog
|
|
41
41
|
logger
|
42
42
|
end
|
43
43
|
|
44
|
-
def build_runtime_metrics(settings)
|
44
|
+
def build_runtime_metrics(settings, logger)
|
45
45
|
options = { enabled: settings.runtime_metrics.enabled }
|
46
46
|
options[:statsd] = settings.runtime_metrics.statsd unless settings.runtime_metrics.statsd.nil?
|
47
47
|
options[:services] = [settings.service] unless settings.service.nil?
|
48
48
|
|
49
|
-
Core::Runtime::Metrics.new(**options)
|
49
|
+
Core::Runtime::Metrics.new(logger: logger, **options)
|
50
50
|
end
|
51
51
|
|
52
|
-
def build_runtime_metrics_worker(settings)
|
52
|
+
def build_runtime_metrics_worker(settings, logger)
|
53
53
|
# NOTE: Should we just ignore building the worker if its not enabled?
|
54
54
|
options = settings.runtime_metrics.opts.merge(
|
55
55
|
enabled: settings.runtime_metrics.enabled,
|
56
|
-
metrics: build_runtime_metrics(settings)
|
56
|
+
metrics: build_runtime_metrics(settings, logger),
|
57
|
+
logger: logger,
|
57
58
|
)
|
58
59
|
|
59
60
|
Core::Workers::RuntimeMetrics.new(options)
|
@@ -116,8 +117,8 @@ module Datadog
|
|
116
117
|
)
|
117
118
|
@environment_logger_extra.merge!(profiler_logger_extra) if profiler_logger_extra
|
118
119
|
|
119
|
-
@runtime_metrics = self.class.build_runtime_metrics_worker(settings)
|
120
|
-
@health_metrics = self.class.build_health_metrics(settings)
|
120
|
+
@runtime_metrics = self.class.build_runtime_metrics_worker(settings, @logger)
|
121
|
+
@health_metrics = self.class.build_health_metrics(settings, @logger)
|
121
122
|
@appsec = Datadog::AppSec::Component.build_appsec_component(settings, telemetry: telemetry)
|
122
123
|
@dynamic_instrumentation = Datadog::DI::Component.build(settings, agent_settings, @logger, telemetry: telemetry)
|
123
124
|
@environment_logger_extra[:dynamic_instrumentation_enabled] = !!@dynamic_instrumentation
|
@@ -21,9 +21,10 @@ module Datadog
|
|
21
21
|
extend Options
|
22
22
|
extend Helpers
|
23
23
|
|
24
|
-
attr_reader :statsd
|
24
|
+
attr_reader :statsd, :logger
|
25
25
|
|
26
|
-
def initialize(statsd: nil, enabled: true, **_)
|
26
|
+
def initialize(logger:, statsd: nil, enabled: true, **_)
|
27
|
+
@logger = logger
|
27
28
|
@statsd =
|
28
29
|
if supported?
|
29
30
|
statsd || default_statsd_client
|
@@ -98,7 +99,7 @@ module Datadog
|
|
98
99
|
|
99
100
|
statsd.count(stat, value, metric_options(options))
|
100
101
|
rescue StandardError => e
|
101
|
-
|
102
|
+
logger.error(
|
102
103
|
"Failed to send count stat. Cause: #{e.class.name} #{e.message} Source: #{Array(e.backtrace).first}"
|
103
104
|
)
|
104
105
|
Telemetry::Logger.report(e, description: 'Failed to send count stat')
|
@@ -112,7 +113,7 @@ module Datadog
|
|
112
113
|
|
113
114
|
statsd.distribution(stat, value, metric_options(options))
|
114
115
|
rescue StandardError => e
|
115
|
-
|
116
|
+
logger.error(
|
116
117
|
"Failed to send distribution stat. Cause: #{e.class.name} #{e.message} Source: #{Array(e.backtrace).first}"
|
117
118
|
)
|
118
119
|
Telemetry::Logger.report(e, description: 'Failed to send distribution stat')
|
@@ -125,7 +126,7 @@ module Datadog
|
|
125
126
|
|
126
127
|
statsd.increment(stat, metric_options(options))
|
127
128
|
rescue StandardError => e
|
128
|
-
|
129
|
+
logger.error(
|
129
130
|
"Failed to send increment stat. Cause: #{e.class.name} #{e.message} Source: #{Array(e.backtrace).first}"
|
130
131
|
)
|
131
132
|
Telemetry::Logger.report(e, description: 'Failed to send increment stat')
|
@@ -139,7 +140,7 @@ module Datadog
|
|
139
140
|
|
140
141
|
statsd.gauge(stat, value, metric_options(options))
|
141
142
|
rescue StandardError => e
|
142
|
-
|
143
|
+
logger.error(
|
143
144
|
"Failed to send gauge stat. Cause: #{e.class.name} #{e.message} Source: #{Array(e.backtrace).first}"
|
144
145
|
)
|
145
146
|
Telemetry::Logger.report(e, description: 'Failed to send gauge stat')
|
@@ -159,7 +160,7 @@ module Datadog
|
|
159
160
|
end
|
160
161
|
rescue StandardError => e
|
161
162
|
# TODO: Likely to be redundant, since `distribution` handles its own errors.
|
162
|
-
|
163
|
+
logger.error(
|
163
164
|
"Failed to send time stat. Cause: #{e.class.name} #{e.message} Source: #{Array(e.backtrace).first}"
|
164
165
|
)
|
165
166
|
Telemetry::Logger.report(e, description: 'Failed to send time stat')
|
@@ -194,7 +195,7 @@ module Datadog
|
|
194
195
|
|
195
196
|
def ignored_statsd_warning
|
196
197
|
IGNORED_STATSD_ONLY_ONCE.run do
|
197
|
-
|
198
|
+
logger.warn(
|
198
199
|
'Ignoring user-supplied statsd instance as currently-installed version of dogstastd-ruby is incompatible. ' \
|
199
200
|
"To fix this, ensure that you have `gem 'dogstatsd-ruby', '~> 5.3'` on your Gemfile or gems.rb file."
|
200
201
|
)
|
@@ -13,10 +13,11 @@ module Datadog
|
|
13
13
|
class TransportError < StandardError; end
|
14
14
|
class SyncError < StandardError; end
|
15
15
|
|
16
|
-
attr_reader :transport, :repository, :id, :dispatcher
|
16
|
+
attr_reader :transport, :repository, :id, :dispatcher, :logger
|
17
17
|
|
18
|
-
def initialize(transport, capabilities, repository: Configuration::Repository.new)
|
18
|
+
def initialize(transport, capabilities, logger:, repository: Configuration::Repository.new)
|
19
19
|
@transport = transport
|
20
|
+
@logger = logger
|
20
21
|
|
21
22
|
@repository = repository
|
22
23
|
@id = SecureRandom.uuid
|
@@ -40,7 +41,7 @@ module Datadog
|
|
40
41
|
def process_response(response)
|
41
42
|
# when response is completely empty, do nothing as in: leave as is
|
42
43
|
if response.empty?
|
43
|
-
|
44
|
+
logger.debug { 'remote: empty response => NOOP' }
|
44
45
|
|
45
46
|
return
|
46
47
|
end
|
@@ -112,7 +113,7 @@ module Datadog
|
|
112
113
|
end
|
113
114
|
|
114
115
|
if changes.empty?
|
115
|
-
|
116
|
+
logger.debug { 'remote: no changes' }
|
116
117
|
else
|
117
118
|
dispatcher.dispatch(changes, repository)
|
118
119
|
end
|
@@ -22,11 +22,11 @@ module Datadog
|
|
22
22
|
transport_options[:agent_settings] = agent_settings if agent_settings
|
23
23
|
|
24
24
|
negotiation = Negotiation.new(settings, agent_settings)
|
25
|
-
transport_v7 = Datadog::Core::Remote::Transport::HTTP.v7(**transport_options
|
25
|
+
transport_v7 = Datadog::Core::Remote::Transport::HTTP.v7(**transport_options) # steep:ignore
|
26
26
|
|
27
27
|
@barrier = Barrier.new(settings.remote.boot_timeout_seconds)
|
28
28
|
|
29
|
-
@client = Client.new(transport_v7, capabilities)
|
29
|
+
@client = Client.new(transport_v7, capabilities, logger: logger)
|
30
30
|
@healthy = false
|
31
31
|
logger.debug { "new remote configuration client: #{@client.id}" }
|
32
32
|
|
@@ -58,7 +58,7 @@ module Datadog
|
|
58
58
|
end
|
59
59
|
|
60
60
|
# client state is unknown, state might be corrupted
|
61
|
-
@client = Client.new(transport_v7, capabilities)
|
61
|
+
@client = Client.new(transport_v7, capabilities, logger: logger)
|
62
62
|
@healthy = false
|
63
63
|
logger.debug { "new remote configuration client: #{@client.id}" }
|
64
64
|
|
@@ -11,7 +11,7 @@ module Datadog
|
|
11
11
|
transport_options = {}
|
12
12
|
transport_options[:agent_settings] = agent_settings if agent_settings
|
13
13
|
|
14
|
-
@transport_root = Datadog::Core::Remote::Transport::HTTP.root(**transport_options
|
14
|
+
@transport_root = Datadog::Core::Remote::Transport::HTTP.root(**transport_options) # steep:ignore
|
15
15
|
@logged = suppress_logging
|
16
16
|
end
|
17
17
|
|
@@ -1,14 +1,9 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require 'uri'
|
4
|
-
|
5
3
|
require_relative '../../environment/container'
|
6
4
|
require_relative '../../environment/ext'
|
7
5
|
require_relative '../../transport/ext'
|
8
|
-
require_relative '../../transport/http
|
9
|
-
require_relative '../../transport/http/adapters/net'
|
10
|
-
require_relative '../../transport/http/adapters/unix_socket'
|
11
|
-
require_relative '../../transport/http/adapters/test'
|
6
|
+
require_relative '../../transport/http'
|
12
7
|
|
13
8
|
# TODO: Improve negotiation to allow per endpoint selection
|
14
9
|
#
|
@@ -32,21 +27,11 @@ module Datadog
|
|
32
27
|
module Transport
|
33
28
|
# Namespace for HTTP transport components
|
34
29
|
module HTTP
|
35
|
-
# NOTE: Due to... legacy reasons... This class likes having a default `AgentSettings` instance to fall back to.
|
36
|
-
# Because we generate this instance with an empty instance of `Settings`, the resulting `AgentSettings` below
|
37
|
-
# represents only settings specified via environment variables + the usual defaults.
|
38
|
-
#
|
39
|
-
# DO NOT USE THIS IN NEW CODE, as it ignores any settings specified by users via `Datadog.configure`.
|
40
|
-
DO_NOT_USE_ENVIRONMENT_AGENT_SETTINGS = Datadog::Core::Configuration::AgentSettingsResolver.call(
|
41
|
-
Datadog::Core::Configuration::Settings.new,
|
42
|
-
logger: nil,
|
43
|
-
)
|
44
|
-
|
45
30
|
module_function
|
46
31
|
|
47
32
|
# Builds a new Transport::HTTP::Client
|
48
33
|
def new(klass, &block)
|
49
|
-
Core::Transport::HTTP
|
34
|
+
Core::Transport::HTTP.build(
|
50
35
|
api_instance_class: API::Instance, &block
|
51
36
|
).to_transport(klass)
|
52
37
|
end
|
@@ -54,7 +39,7 @@ module Datadog
|
|
54
39
|
# Builds a new Transport::HTTP::Client with default settings
|
55
40
|
# Pass a block to override any settings.
|
56
41
|
def root(
|
57
|
-
agent_settings
|
42
|
+
agent_settings:,
|
58
43
|
**options
|
59
44
|
)
|
60
45
|
new(Core::Remote::Transport::Negotiation::Transport) do |transport|
|
@@ -79,7 +64,7 @@ module Datadog
|
|
79
64
|
# Builds a new Transport::HTTP::Client with default settings
|
80
65
|
# Pass a block to override any settings.
|
81
66
|
def v7(
|
82
|
-
agent_settings
|
67
|
+
agent_settings:,
|
83
68
|
**options
|
84
69
|
)
|
85
70
|
new(Core::Remote::Transport::Config::Transport) do |transport|
|
@@ -126,20 +111,6 @@ module Datadog
|
|
126
111
|
def default_adapter
|
127
112
|
Datadog::Core::Configuration::Ext::Agent::HTTP::ADAPTER
|
128
113
|
end
|
129
|
-
|
130
|
-
# Add adapters to registry
|
131
|
-
Core::Transport::HTTP::Builder::REGISTRY.set(
|
132
|
-
Datadog::Core::Transport::HTTP::Adapters::Net,
|
133
|
-
Datadog::Core::Configuration::Ext::Agent::HTTP::ADAPTER
|
134
|
-
)
|
135
|
-
Core::Transport::HTTP::Builder::REGISTRY.set(
|
136
|
-
Datadog::Core::Transport::HTTP::Adapters::Test,
|
137
|
-
Datadog::Core::Transport::Ext::Test::ADAPTER
|
138
|
-
)
|
139
|
-
Core::Transport::HTTP::Builder::REGISTRY.set(
|
140
|
-
Datadog::Core::Transport::HTTP::Adapters::UnixSocket,
|
141
|
-
Datadog::Core::Configuration::Ext::Agent::UnixSocket::ADAPTER
|
142
|
-
)
|
143
114
|
end
|
144
115
|
end
|
145
116
|
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative 'http/builder'
|
4
|
+
require_relative 'http/adapters/net'
|
5
|
+
require_relative 'http/adapters/unix_socket'
|
6
|
+
require_relative 'http/adapters/test'
|
7
|
+
|
8
|
+
module Datadog
|
9
|
+
module Core
|
10
|
+
module Transport
|
11
|
+
# HTTP transport
|
12
|
+
module HTTP
|
13
|
+
# Add adapters to registry
|
14
|
+
Builder::REGISTRY.set(
|
15
|
+
Transport::HTTP::Adapters::Net,
|
16
|
+
Core::Configuration::Ext::Agent::HTTP::ADAPTER
|
17
|
+
)
|
18
|
+
Builder::REGISTRY.set(
|
19
|
+
Transport::HTTP::Adapters::Test,
|
20
|
+
Transport::Ext::Test::ADAPTER
|
21
|
+
)
|
22
|
+
Builder::REGISTRY.set(
|
23
|
+
Transport::HTTP::Adapters::UnixSocket,
|
24
|
+
Transport::Ext::UnixSocket::ADAPTER
|
25
|
+
)
|
26
|
+
|
27
|
+
module_function
|
28
|
+
|
29
|
+
# Helper function that delegates to Builder.new
|
30
|
+
# but is under HTTP namespace so that client code requires this file
|
31
|
+
# to get the adapters configured, and not the builder directly.
|
32
|
+
def build(api_instance_class:, &block)
|
33
|
+
Builder.new(api_instance_class: api_instance_class, &block)
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
@@ -21,7 +21,7 @@ module Datadog
|
|
21
21
|
:metrics
|
22
22
|
|
23
23
|
def initialize(options = {})
|
24
|
-
@metrics = options.fetch(:metrics) { Core::Runtime::Metrics.new }
|
24
|
+
@metrics = options.fetch(:metrics) { Core::Runtime::Metrics.new(logger: options[:logger]) }
|
25
25
|
|
26
26
|
# Workers::Async::Thread settings
|
27
27
|
self.fork_policy = options.fetch(:fork_policy, Workers::Async::Thread::FORK_POLICY_STOP)
|
@@ -5,13 +5,10 @@ require 'uri'
|
|
5
5
|
require_relative '../../core/environment/container'
|
6
6
|
require_relative '../../core/environment/ext'
|
7
7
|
require_relative '../../core/transport/ext'
|
8
|
-
require_relative '../../core/transport/http/adapters/net'
|
9
|
-
require_relative '../../core/transport/http/adapters/test'
|
10
|
-
require_relative '../../core/transport/http/adapters/unix_socket'
|
11
8
|
require_relative 'diagnostics'
|
12
9
|
require_relative 'input'
|
13
10
|
require_relative 'http/api'
|
14
|
-
require_relative '../../core/transport/http
|
11
|
+
require_relative '../../core/transport/http'
|
15
12
|
require_relative '../../../datadog/version'
|
16
13
|
|
17
14
|
module Datadog
|
@@ -23,7 +20,7 @@ module Datadog
|
|
23
20
|
|
24
21
|
# Builds a new Transport::HTTP::Client
|
25
22
|
def new(klass, &block)
|
26
|
-
Core::Transport::HTTP
|
23
|
+
Core::Transport::HTTP.build(
|
27
24
|
api_instance_class: API::Instance, &block
|
28
25
|
).to_transport(klass)
|
29
26
|
end
|
@@ -102,17 +99,6 @@ module Datadog
|
|
102
99
|
def default_adapter
|
103
100
|
Datadog::Core::Configuration::Ext::Agent::HTTP::ADAPTER
|
104
101
|
end
|
105
|
-
|
106
|
-
# Add adapters to registry
|
107
|
-
Datadog::Core::Transport::HTTP::Builder::REGISTRY.set(
|
108
|
-
Datadog::Core::Transport::HTTP::Adapters::Net,
|
109
|
-
Datadog::Core::Configuration::Ext::Agent::HTTP::ADAPTER
|
110
|
-
)
|
111
|
-
Datadog::Core::Transport::HTTP::Builder::REGISTRY.set(Datadog::Core::Transport::HTTP::Adapters::Test, Datadog::Core::Transport::Ext::Test::ADAPTER)
|
112
|
-
Datadog::Core::Transport::HTTP::Builder::REGISTRY.set(
|
113
|
-
Datadog::Core::Transport::HTTP::Adapters::UnixSocket,
|
114
|
-
Datadog::Core::Transport::Ext::UnixSocket::ADAPTER
|
115
|
-
)
|
116
102
|
end
|
117
103
|
end
|
118
104
|
end
|
@@ -19,7 +19,8 @@ module Datadog
|
|
19
19
|
attr_reader \
|
20
20
|
:logger,
|
21
21
|
:events,
|
22
|
-
:transport
|
22
|
+
:transport,
|
23
|
+
:agent_settings
|
23
24
|
|
24
25
|
# @param [Datadog::Tracing::Transport::Traces::Transport] transport a custom transport instance.
|
25
26
|
# If provided, overrides `transport_options` and `agent_settings`.
|
@@ -28,9 +29,10 @@ module Datadog
|
|
28
29
|
# the default transport instance.
|
29
30
|
def initialize(transport: nil, transport_options: {}, agent_settings: nil, logger: Datadog.logger)
|
30
31
|
@logger = logger
|
32
|
+
@agent_settings = agent_settings
|
31
33
|
|
32
34
|
@transport = transport || begin
|
33
|
-
transport_options
|
35
|
+
transport_options = transport_options.merge(agent_settings: agent_settings) if agent_settings
|
34
36
|
Transport::HTTP.default(**transport_options)
|
35
37
|
end
|
36
38
|
|
@@ -49,6 +49,8 @@ module Datadog
|
|
49
49
|
# @param tags [Hash] default tags added to all spans
|
50
50
|
# @param writer [Datadog::Tracing::Writer] consumes traces returned by the provided +trace_flush+
|
51
51
|
def initialize(
|
52
|
+
# rubocop:disable Style/KeywordParametersOrder
|
53
|
+
# https://github.com/rubocop/rubocop/issues/13933
|
52
54
|
trace_flush: Flush::Finished.new,
|
53
55
|
context_provider: DefaultContextProvider.new,
|
54
56
|
default_service: Core::Environment::Ext::FALLBACK_SERVICE_NAME,
|
@@ -60,7 +62,10 @@ module Datadog
|
|
60
62
|
),
|
61
63
|
span_sampler: Sampling::Span::Sampler.new,
|
62
64
|
tags: {},
|
63
|
-
writer
|
65
|
+
# writer is not defaulted because creating it requires agent_settings,
|
66
|
+
# which we do not have here and otherwise do not need.
|
67
|
+
writer:
|
68
|
+
# rubocop:enable Style/KeywordParametersOrder
|
64
69
|
)
|
65
70
|
@trace_flush = trace_flush
|
66
71
|
@default_service = default_service
|
@@ -1,14 +1,9 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require 'uri'
|
4
|
-
|
5
3
|
require_relative '../../core/environment/container'
|
6
4
|
require_relative '../../core/environment/ext'
|
7
5
|
require_relative '../../core/transport/ext'
|
8
|
-
require_relative '../../core/transport/http
|
9
|
-
require_relative '../../core/transport/http/adapters/test'
|
10
|
-
require_relative '../../core/transport/http/adapters/unix_socket'
|
11
|
-
require_relative '../../core/transport/http/builder'
|
6
|
+
require_relative '../../core/transport/http'
|
12
7
|
require_relative 'http/api'
|
13
8
|
require_relative '../../../datadog/version'
|
14
9
|
|
@@ -17,21 +12,11 @@ module Datadog
|
|
17
12
|
module Transport
|
18
13
|
# Namespace for HTTP transport components
|
19
14
|
module HTTP
|
20
|
-
# NOTE: Due to... legacy reasons... This class likes having a default `AgentSettings` instance to fall back to.
|
21
|
-
# Because we generate this instance with an empty instance of `Settings`, the resulting `AgentSettings` below
|
22
|
-
# represents only settings specified via environment variables + the usual defaults.
|
23
|
-
#
|
24
|
-
# DO NOT USE THIS IN NEW CODE, as it ignores any settings specified by users via `Datadog.configure`.
|
25
|
-
DO_NOT_USE_ENVIRONMENT_AGENT_SETTINGS = Datadog::Core::Configuration::AgentSettingsResolver.call(
|
26
|
-
Datadog::Core::Configuration::Settings.new,
|
27
|
-
logger: nil,
|
28
|
-
)
|
29
|
-
|
30
15
|
module_function
|
31
16
|
|
32
17
|
# Builds a new Transport::HTTP::Client
|
33
18
|
def new(klass, &block)
|
34
|
-
Core::Transport::HTTP
|
19
|
+
Core::Transport::HTTP.build(
|
35
20
|
api_instance_class: API::Instance, &block
|
36
21
|
).to_transport(klass)
|
37
22
|
end
|
@@ -39,7 +24,7 @@ module Datadog
|
|
39
24
|
# Builds a new Transport::HTTP::Client with default settings
|
40
25
|
# Pass a block to override any settings.
|
41
26
|
def default(
|
42
|
-
agent_settings
|
27
|
+
agent_settings:,
|
43
28
|
**options
|
44
29
|
)
|
45
30
|
new(Transport::Traces::Transport) do |transport|
|
@@ -86,20 +71,6 @@ module Datadog
|
|
86
71
|
def default_adapter
|
87
72
|
Datadog::Core::Configuration::Ext::Agent::HTTP::ADAPTER
|
88
73
|
end
|
89
|
-
|
90
|
-
# Add adapters to registry
|
91
|
-
Core::Transport::HTTP::Builder::REGISTRY.set(
|
92
|
-
Datadog::Core::Transport::HTTP::Adapters::Net,
|
93
|
-
Datadog::Core::Configuration::Ext::Agent::HTTP::ADAPTER
|
94
|
-
)
|
95
|
-
Core::Transport::HTTP::Builder::REGISTRY.set(
|
96
|
-
Datadog::Core::Transport::HTTP::Adapters::Test,
|
97
|
-
Datadog::Core::Transport::Ext::Test::ADAPTER
|
98
|
-
)
|
99
|
-
Core::Transport::HTTP::Builder::REGISTRY.set(
|
100
|
-
Datadog::Core::Transport::HTTP::Adapters::UnixSocket,
|
101
|
-
Datadog::Core::Transport::Ext::UnixSocket::ADAPTER
|
102
|
-
)
|
103
74
|
end
|
104
75
|
end
|
105
76
|
end
|
@@ -18,7 +18,8 @@ module Datadog
|
|
18
18
|
class TraceWriter < Core::Worker
|
19
19
|
attr_reader \
|
20
20
|
:logger,
|
21
|
-
:transport
|
21
|
+
:transport,
|
22
|
+
:agent_settings
|
22
23
|
|
23
24
|
# rubocop:disable Lint/MissingSuper
|
24
25
|
def initialize(options = {})
|
@@ -26,7 +27,10 @@ module Datadog
|
|
26
27
|
|
27
28
|
transport_options = options.fetch(:transport_options, {})
|
28
29
|
|
29
|
-
|
30
|
+
if options.key?(:agent_settings)
|
31
|
+
@agent_settings = options[:agent_settings]
|
32
|
+
transport_options = transport_options.merge(agent_settings: @agent_settings)
|
33
|
+
end
|
30
34
|
|
31
35
|
@transport = options.fetch(:transport) do
|
32
36
|
Datadog::Tracing::Transport::HTTP.default(**transport_options)
|
@@ -16,7 +16,8 @@ module Datadog
|
|
16
16
|
:logger,
|
17
17
|
:transport,
|
18
18
|
:worker,
|
19
|
-
:events
|
19
|
+
:events,
|
20
|
+
:agent_settings
|
20
21
|
|
21
22
|
def initialize(options = {})
|
22
23
|
@logger = options[:logger] || Datadog.logger
|
@@ -26,7 +27,10 @@ module Datadog
|
|
26
27
|
@flush_interval = options.fetch(:flush_interval, Workers::AsyncTransport::DEFAULT_FLUSH_INTERVAL)
|
27
28
|
transport_options = options.fetch(:transport_options, {})
|
28
29
|
|
29
|
-
|
30
|
+
if options.key?(:agent_settings)
|
31
|
+
@agent_settings = options[:agent_settings]
|
32
|
+
transport_options = transport_options.merge(agent_settings: @agent_settings)
|
33
|
+
end
|
30
34
|
|
31
35
|
# transport and buffers
|
32
36
|
@transport = options.fetch(:transport) do
|
data/lib/datadog/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: datadog
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.12.
|
4
|
+
version: 2.12.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Datadog, Inc.
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2025-
|
11
|
+
date: 2025-03-06 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: msgpack
|
@@ -342,6 +342,7 @@ files:
|
|
342
342
|
- lib/datadog/core/telemetry/request.rb
|
343
343
|
- lib/datadog/core/telemetry/worker.rb
|
344
344
|
- lib/datadog/core/transport/ext.rb
|
345
|
+
- lib/datadog/core/transport/http.rb
|
345
346
|
- lib/datadog/core/transport/http/adapters/net.rb
|
346
347
|
- lib/datadog/core/transport/http/adapters/registry.rb
|
347
348
|
- lib/datadog/core/transport/http/adapters/test.rb
|
@@ -929,8 +930,8 @@ licenses:
|
|
929
930
|
- Apache-2.0
|
930
931
|
metadata:
|
931
932
|
allowed_push_host: https://rubygems.org
|
932
|
-
changelog_uri: https://github.com/DataDog/dd-trace-rb/blob/v2.12.
|
933
|
-
source_code_uri: https://github.com/DataDog/dd-trace-rb/tree/v2.12.
|
933
|
+
changelog_uri: https://github.com/DataDog/dd-trace-rb/blob/v2.12.1/CHANGELOG.md
|
934
|
+
source_code_uri: https://github.com/DataDog/dd-trace-rb/tree/v2.12.1
|
934
935
|
post_install_message:
|
935
936
|
rdoc_options: []
|
936
937
|
require_paths:
|