ddtrace 1.14.0 → 1.16.2
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 +165 -2
- data/ext/ddtrace_profiling_native_extension/NativeExtensionDesign.md +3 -5
- data/ext/ddtrace_profiling_native_extension/clock_id.h +0 -3
- data/ext/ddtrace_profiling_native_extension/clock_id_from_pthread.c +0 -22
- data/ext/ddtrace_profiling_native_extension/clock_id_noop.c +0 -1
- data/ext/ddtrace_profiling_native_extension/collectors_cpu_and_wall_time_worker.c +41 -6
- data/ext/ddtrace_profiling_native_extension/collectors_idle_sampling_helper.c +3 -0
- data/ext/ddtrace_profiling_native_extension/collectors_stack.c +76 -24
- data/ext/ddtrace_profiling_native_extension/collectors_stack.h +1 -1
- data/ext/ddtrace_profiling_native_extension/collectors_thread_context.c +207 -32
- data/ext/ddtrace_profiling_native_extension/collectors_thread_context.h +1 -1
- data/ext/ddtrace_profiling_native_extension/extconf.rb +8 -2
- data/ext/ddtrace_profiling_native_extension/http_transport.c +26 -10
- data/ext/ddtrace_profiling_native_extension/libdatadog_helpers.c +42 -0
- data/ext/ddtrace_profiling_native_extension/libdatadog_helpers.h +6 -0
- data/ext/ddtrace_profiling_native_extension/native_extension_helpers.rb +1 -16
- data/ext/ddtrace_profiling_native_extension/pid_controller.c +57 -0
- data/ext/ddtrace_profiling_native_extension/pid_controller.h +45 -0
- data/ext/ddtrace_profiling_native_extension/private_vm_api_access.c +17 -12
- data/ext/ddtrace_profiling_native_extension/profiling.c +0 -2
- data/ext/ddtrace_profiling_native_extension/stack_recorder.c +74 -37
- data/ext/ddtrace_profiling_native_extension/stack_recorder.h +13 -3
- data/lib/datadog/appsec/assets/waf_rules/processors.json +92 -0
- data/lib/datadog/appsec/assets/waf_rules/recommended.json +698 -75
- data/lib/datadog/appsec/assets/waf_rules/scanners.json +114 -0
- data/lib/datadog/appsec/assets/waf_rules/strict.json +98 -8
- data/lib/datadog/appsec/assets.rb +8 -0
- data/lib/datadog/appsec/component.rb +9 -2
- data/lib/datadog/appsec/configuration/settings.rb +61 -2
- data/lib/datadog/appsec/contrib/rack/gateway/request.rb +6 -2
- data/lib/datadog/appsec/contrib/rack/gateway/watcher.rb +8 -6
- data/lib/datadog/appsec/contrib/rack/reactive/request.rb +2 -7
- data/lib/datadog/appsec/contrib/rack/reactive/request_body.rb +2 -5
- data/lib/datadog/appsec/contrib/rack/reactive/response.rb +2 -5
- data/lib/datadog/appsec/contrib/rack/request_body_middleware.rb +3 -2
- data/lib/datadog/appsec/contrib/rack/request_middleware.rb +24 -10
- data/lib/datadog/appsec/contrib/rails/gateway/watcher.rb +3 -2
- data/lib/datadog/appsec/contrib/rails/patcher.rb +9 -3
- data/lib/datadog/appsec/contrib/rails/reactive/action.rb +2 -5
- data/lib/datadog/appsec/contrib/sinatra/gateway/watcher.rb +6 -4
- data/lib/datadog/appsec/contrib/sinatra/patcher.rb +13 -7
- data/lib/datadog/appsec/contrib/sinatra/reactive/routed.rb +2 -5
- data/lib/datadog/appsec/event.rb +106 -50
- data/lib/datadog/appsec/monitor/gateway/watcher.rb +3 -3
- data/lib/datadog/appsec/monitor/reactive/set_user.rb +2 -5
- data/lib/datadog/appsec/processor/actions.rb +49 -0
- data/lib/datadog/appsec/processor/rule_merger.rb +22 -2
- data/lib/datadog/appsec/processor.rb +34 -6
- data/lib/datadog/appsec/remote.rb +4 -1
- data/lib/datadog/appsec/response.rb +82 -4
- data/lib/datadog/appsec/sample_rate.rb +21 -0
- data/lib/datadog/appsec.rb +2 -2
- data/lib/datadog/core/configuration/agent_settings_resolver.rb +29 -24
- data/lib/datadog/core/configuration/base.rb +1 -11
- data/lib/datadog/core/configuration/components.rb +7 -2
- data/lib/datadog/core/configuration/ext.rb +21 -0
- data/lib/datadog/core/configuration/option.rb +2 -4
- data/lib/datadog/core/configuration/option_definition.rb +17 -41
- data/lib/datadog/core/configuration/options.rb +5 -5
- data/lib/datadog/core/configuration/settings.rb +47 -45
- data/lib/datadog/core/environment/execution.rb +47 -9
- data/lib/datadog/core/environment/variable_helpers.rb +0 -69
- data/lib/datadog/core/error.rb +1 -0
- data/lib/datadog/core/git/ext.rb +2 -0
- data/lib/datadog/core/remote/client/capabilities.rb +1 -1
- data/lib/datadog/core/remote/component.rb +2 -2
- data/lib/datadog/core/remote/negotiation.rb +2 -2
- data/lib/datadog/core/remote/transport/config.rb +60 -0
- data/lib/datadog/core/remote/transport/http/api/instance.rb +39 -0
- data/lib/datadog/core/remote/transport/http/api/spec.rb +21 -0
- data/lib/datadog/core/remote/transport/http/api.rb +58 -0
- data/lib/datadog/core/remote/transport/http/builder.rb +219 -0
- data/lib/datadog/core/remote/transport/http/client.rb +48 -0
- data/lib/datadog/core/remote/transport/http/config.rb +280 -0
- data/lib/datadog/core/remote/transport/http/negotiation.rb +146 -0
- data/lib/datadog/core/remote/transport/http.rb +179 -0
- data/lib/datadog/core/{transport → remote/transport}/negotiation.rb +25 -23
- data/lib/datadog/core/remote/worker.rb +3 -1
- data/lib/datadog/core/telemetry/collector.rb +3 -2
- data/lib/datadog/core/telemetry/http/transport.rb +2 -1
- data/lib/datadog/core/transport/ext.rb +47 -0
- data/lib/datadog/core/transport/http/adapters/net.rb +168 -0
- data/lib/datadog/core/transport/http/adapters/registry.rb +29 -0
- data/lib/datadog/core/transport/http/adapters/test.rb +89 -0
- data/lib/datadog/core/transport/http/adapters/unix_socket.rb +83 -0
- data/lib/datadog/core/transport/http/api/endpoint.rb +31 -0
- data/lib/datadog/core/transport/http/api/fallbacks.rb +26 -0
- data/lib/datadog/core/transport/http/api/map.rb +18 -0
- data/lib/datadog/core/transport/http/env.rb +62 -0
- data/lib/datadog/core/transport/http/response.rb +60 -0
- data/lib/datadog/core/transport/parcel.rb +22 -0
- data/lib/datadog/core/transport/request.rb +17 -0
- data/lib/datadog/core/transport/response.rb +64 -0
- data/lib/datadog/core/workers/polling.rb +2 -2
- data/lib/datadog/opentelemetry/api/context.rb +10 -3
- data/lib/datadog/opentelemetry/sdk/propagator.rb +2 -1
- data/lib/datadog/opentelemetry/sdk/span_processor.rb +14 -2
- data/lib/datadog/opentelemetry/sdk/trace/span.rb +68 -0
- data/lib/datadog/opentelemetry/trace.rb +58 -0
- data/lib/datadog/opentelemetry.rb +1 -0
- data/lib/datadog/opentracer.rb +9 -0
- data/lib/datadog/profiling/collectors/cpu_and_wall_time_worker.rb +14 -19
- data/lib/datadog/profiling/collectors/idle_sampling_helper.rb +1 -1
- data/lib/datadog/profiling/collectors/thread_context.rb +9 -1
- data/lib/datadog/profiling/component.rb +24 -99
- data/lib/datadog/profiling/ext.rb +0 -12
- data/lib/datadog/profiling/flush.rb +0 -3
- data/lib/datadog/profiling/http_transport.rb +6 -3
- data/lib/datadog/profiling/native_extension.rb +0 -21
- data/lib/datadog/profiling/profiler.rb +36 -13
- data/lib/datadog/profiling/scheduler.rb +16 -9
- data/lib/datadog/profiling.rb +8 -81
- data/lib/datadog/tracing/component.rb +10 -4
- data/lib/datadog/tracing/configuration/agent_settings_resolver.rb +13 -0
- data/lib/datadog/tracing/configuration/ext.rb +4 -2
- data/lib/datadog/tracing/configuration/settings.rb +14 -7
- data/lib/datadog/tracing/contrib/action_pack/configuration/settings.rb +1 -1
- data/lib/datadog/tracing/contrib/active_job/configuration/settings.rb +1 -1
- data/lib/datadog/tracing/contrib/active_record/events/sql.rb +4 -0
- data/lib/datadog/tracing/contrib/active_support/cache/instrumentation.rb +106 -197
- data/lib/datadog/tracing/contrib/active_support/cache/patcher.rb +3 -0
- data/lib/datadog/tracing/contrib/aws/instrumentation.rb +7 -0
- data/lib/datadog/tracing/contrib/concurrent_ruby/context_composite_executor_service.rb +14 -14
- data/lib/datadog/tracing/contrib/concurrent_ruby/future_patch.rb +3 -10
- data/lib/datadog/tracing/contrib/concurrent_ruby/integration.rb +2 -1
- data/lib/datadog/tracing/contrib/concurrent_ruby/patcher.rb +8 -1
- data/lib/datadog/tracing/contrib/concurrent_ruby/promises_future_patch.rb +22 -0
- data/lib/datadog/tracing/contrib/configuration/settings.rb +1 -1
- data/lib/datadog/tracing/contrib/dalli/configuration/settings.rb +6 -0
- data/lib/datadog/tracing/contrib/dalli/ext.rb +7 -0
- data/lib/datadog/tracing/contrib/dalli/instrumentation.rb +9 -2
- data/lib/datadog/tracing/contrib/delayed_job/configuration/settings.rb +1 -1
- data/lib/datadog/tracing/contrib/elasticsearch/patcher.rb +5 -0
- data/lib/datadog/tracing/contrib/ethon/easy_patch.rb +5 -0
- data/lib/datadog/tracing/contrib/ethon/multi_patch.rb +8 -0
- data/lib/datadog/tracing/contrib/excon/middleware.rb +5 -0
- data/lib/datadog/tracing/contrib/ext.rb +3 -0
- data/lib/datadog/tracing/contrib/faraday/configuration/settings.rb +1 -1
- data/lib/datadog/tracing/contrib/faraday/middleware.rb +5 -0
- data/lib/datadog/tracing/contrib/grpc/configuration/settings.rb +21 -1
- data/lib/datadog/tracing/contrib/grpc/datadog_interceptor/client.rb +11 -1
- data/lib/datadog/tracing/contrib/grpc/datadog_interceptor/server.rb +18 -0
- data/lib/datadog/tracing/contrib/grpc/datadog_interceptor.rb +0 -4
- data/lib/datadog/tracing/contrib/http/circuit_breaker.rb +3 -3
- data/lib/datadog/tracing/contrib/http/instrumentation.rb +5 -0
- data/lib/datadog/tracing/contrib/httpclient/instrumentation.rb +5 -0
- data/lib/datadog/tracing/contrib/httprb/instrumentation.rb +5 -0
- data/lib/datadog/tracing/contrib/mongodb/subscribers.rb +7 -0
- data/lib/datadog/tracing/contrib/mysql2/instrumentation.rb +13 -3
- data/lib/datadog/tracing/contrib/opensearch/integration.rb +2 -2
- data/lib/datadog/tracing/contrib/opensearch/patcher.rb +7 -0
- data/lib/datadog/tracing/contrib/pg/instrumentation.rb +5 -0
- data/lib/datadog/tracing/contrib/presto/instrumentation.rb +5 -0
- data/lib/datadog/tracing/contrib/propagation/sql_comment.rb +1 -1
- data/lib/datadog/tracing/contrib/que/configuration/settings.rb +1 -1
- data/lib/datadog/tracing/contrib/racecar/event.rb +5 -0
- data/lib/datadog/tracing/contrib/rack/header_tagging.rb +14 -4
- data/lib/datadog/tracing/contrib/rails/configuration/settings.rb +4 -4
- data/lib/datadog/tracing/contrib/rake/configuration/settings.rb +1 -1
- data/lib/datadog/tracing/contrib/redis/configuration/settings.rb +1 -1
- data/lib/datadog/tracing/contrib/redis/instrumentation.rb +3 -38
- data/lib/datadog/tracing/contrib/redis/tags.rb +7 -2
- data/lib/datadog/tracing/contrib/redis/trace_middleware.rb +46 -33
- data/lib/datadog/tracing/contrib/resque/configuration/settings.rb +1 -1
- data/lib/datadog/tracing/contrib/rest_client/request_patch.rb +5 -0
- data/lib/datadog/tracing/contrib/sequel/utils.rb +5 -0
- data/lib/datadog/tracing/contrib/shoryuken/configuration/settings.rb +1 -1
- data/lib/datadog/tracing/contrib/sidekiq/configuration/settings.rb +1 -1
- data/lib/datadog/tracing/contrib/sneakers/configuration/settings.rb +1 -1
- data/lib/datadog/tracing/contrib/utils/quantization/http.rb +2 -2
- data/lib/datadog/tracing/diagnostics/environment_logger.rb +6 -0
- data/lib/datadog/tracing/distributed/propagation.rb +13 -33
- data/lib/datadog/tracing/metadata/tagging.rb +3 -3
- data/lib/datadog/tracing/sync_writer.rb +3 -3
- data/lib/datadog/tracing/tracer.rb +2 -0
- data/lib/datadog/{core → tracing}/transport/http/api/instance.rb +1 -1
- data/lib/datadog/{core → tracing}/transport/http/api/spec.rb +1 -1
- data/lib/datadog/tracing/transport/http/api.rb +43 -0
- data/lib/datadog/{core → tracing}/transport/http/builder.rb +13 -68
- data/lib/datadog/tracing/transport/http/client.rb +57 -0
- data/lib/datadog/tracing/transport/http/statistics.rb +47 -0
- data/lib/datadog/tracing/transport/http/traces.rb +152 -0
- data/lib/datadog/tracing/transport/http.rb +124 -0
- data/lib/datadog/tracing/transport/io/client.rb +89 -0
- data/lib/datadog/tracing/transport/io/response.rb +27 -0
- data/lib/datadog/tracing/transport/io/traces.rb +101 -0
- data/lib/datadog/tracing/transport/io.rb +30 -0
- data/lib/datadog/tracing/transport/serializable_trace.rb +126 -0
- data/lib/datadog/tracing/transport/statistics.rb +77 -0
- data/lib/datadog/tracing/transport/trace_formatter.rb +209 -0
- data/lib/datadog/tracing/transport/traces.rb +224 -0
- data/lib/datadog/tracing/workers/trace_writer.rb +5 -3
- data/lib/datadog/tracing/workers.rb +3 -2
- data/lib/datadog/tracing/writer.rb +5 -2
- data/lib/ddtrace/transport/ext.rb +17 -15
- data/lib/ddtrace/version.rb +2 -2
- data/lib/ddtrace.rb +1 -1
- metadata +73 -96
- data/lib/datadog/ci/configuration/components.rb +0 -32
- data/lib/datadog/ci/configuration/settings.rb +0 -51
- data/lib/datadog/ci/contrib/cucumber/configuration/settings.rb +0 -35
- data/lib/datadog/ci/contrib/cucumber/ext.rb +0 -22
- data/lib/datadog/ci/contrib/cucumber/formatter.rb +0 -94
- data/lib/datadog/ci/contrib/cucumber/instrumentation.rb +0 -28
- data/lib/datadog/ci/contrib/cucumber/integration.rb +0 -47
- data/lib/datadog/ci/contrib/cucumber/patcher.rb +0 -27
- data/lib/datadog/ci/contrib/minitest/configuration/settings.rb +0 -35
- data/lib/datadog/ci/contrib/minitest/ext.rb +0 -21
- data/lib/datadog/ci/contrib/minitest/integration.rb +0 -49
- data/lib/datadog/ci/contrib/minitest/patcher.rb +0 -27
- data/lib/datadog/ci/contrib/minitest/test_helper.rb +0 -68
- data/lib/datadog/ci/contrib/rspec/configuration/settings.rb +0 -35
- data/lib/datadog/ci/contrib/rspec/example.rb +0 -68
- data/lib/datadog/ci/contrib/rspec/ext.rb +0 -21
- data/lib/datadog/ci/contrib/rspec/integration.rb +0 -48
- data/lib/datadog/ci/contrib/rspec/patcher.rb +0 -27
- data/lib/datadog/ci/ext/app_types.rb +0 -9
- data/lib/datadog/ci/ext/environment.rb +0 -575
- data/lib/datadog/ci/ext/settings.rb +0 -10
- data/lib/datadog/ci/ext/test.rb +0 -35
- data/lib/datadog/ci/extensions.rb +0 -19
- data/lib/datadog/ci/flush.rb +0 -38
- data/lib/datadog/ci/test.rb +0 -81
- data/lib/datadog/ci.rb +0 -21
- data/lib/datadog/core/configuration/dependency_resolver.rb +0 -28
- data/lib/datadog/core/configuration/option_definition_set.rb +0 -22
- data/lib/datadog/core/configuration/option_set.rb +0 -10
- data/lib/datadog/core/transport/config.rb +0 -58
- data/lib/datadog/core/transport/http/api.rb +0 -57
- data/lib/datadog/core/transport/http/client.rb +0 -45
- data/lib/datadog/core/transport/http/config.rb +0 -278
- data/lib/datadog/core/transport/http/negotiation.rb +0 -144
- data/lib/datadog/core/transport/http.rb +0 -169
- data/lib/datadog/core/utils/object_set.rb +0 -43
- data/lib/datadog/core/utils/string_table.rb +0 -47
- data/lib/datadog/profiling/backtrace_location.rb +0 -34
- data/lib/datadog/profiling/buffer.rb +0 -43
- data/lib/datadog/profiling/collectors/old_stack.rb +0 -301
- data/lib/datadog/profiling/encoding/profile.rb +0 -41
- data/lib/datadog/profiling/event.rb +0 -15
- data/lib/datadog/profiling/events/stack.rb +0 -82
- data/lib/datadog/profiling/old_recorder.rb +0 -107
- data/lib/datadog/profiling/pprof/builder.rb +0 -125
- data/lib/datadog/profiling/pprof/converter.rb +0 -102
- data/lib/datadog/profiling/pprof/message_set.rb +0 -16
- data/lib/datadog/profiling/pprof/payload.rb +0 -20
- data/lib/datadog/profiling/pprof/pprof.proto +0 -212
- data/lib/datadog/profiling/pprof/pprof_pb.rb +0 -81
- data/lib/datadog/profiling/pprof/stack_sample.rb +0 -139
- data/lib/datadog/profiling/pprof/string_table.rb +0 -12
- data/lib/datadog/profiling/pprof/template.rb +0 -118
- data/lib/datadog/profiling/trace_identifiers/ddtrace.rb +0 -43
- data/lib/datadog/profiling/trace_identifiers/helper.rb +0 -45
- data/lib/ddtrace/transport/http/adapters/net.rb +0 -168
- data/lib/ddtrace/transport/http/adapters/registry.rb +0 -27
- data/lib/ddtrace/transport/http/adapters/test.rb +0 -85
- data/lib/ddtrace/transport/http/adapters/unix_socket.rb +0 -77
- data/lib/ddtrace/transport/http/api/endpoint.rb +0 -29
- data/lib/ddtrace/transport/http/api/fallbacks.rb +0 -24
- data/lib/ddtrace/transport/http/api/instance.rb +0 -35
- data/lib/ddtrace/transport/http/api/map.rb +0 -16
- data/lib/ddtrace/transport/http/api/spec.rb +0 -17
- data/lib/ddtrace/transport/http/api.rb +0 -39
- data/lib/ddtrace/transport/http/builder.rb +0 -176
- data/lib/ddtrace/transport/http/client.rb +0 -52
- data/lib/ddtrace/transport/http/env.rb +0 -58
- data/lib/ddtrace/transport/http/response.rb +0 -58
- data/lib/ddtrace/transport/http/statistics.rb +0 -43
- data/lib/ddtrace/transport/http/traces.rb +0 -144
- data/lib/ddtrace/transport/http.rb +0 -117
- data/lib/ddtrace/transport/io/client.rb +0 -85
- data/lib/ddtrace/transport/io/response.rb +0 -25
- data/lib/ddtrace/transport/io/traces.rb +0 -99
- data/lib/ddtrace/transport/io.rb +0 -28
- data/lib/ddtrace/transport/parcel.rb +0 -20
- data/lib/ddtrace/transport/request.rb +0 -15
- data/lib/ddtrace/transport/response.rb +0 -60
- data/lib/ddtrace/transport/serializable_trace.rb +0 -122
- data/lib/ddtrace/transport/statistics.rb +0 -75
- data/lib/ddtrace/transport/trace_formatter.rb +0 -207
- data/lib/ddtrace/transport/traces.rb +0 -216
|
@@ -11,18 +11,12 @@ module Datadog
|
|
|
11
11
|
|
|
12
12
|
attr_reader \
|
|
13
13
|
:default,
|
|
14
|
-
|
|
15
|
-
# Since this new option is experimental and we might not need it in the near future, I gave it a name that is
|
|
16
|
-
# clear to the reader that they should not rely on it and that is subject to change.
|
|
17
|
-
# Currently is only use internally.
|
|
18
|
-
:experimental_default_proc,
|
|
14
|
+
:default_proc,
|
|
19
15
|
:env,
|
|
20
16
|
:deprecated_env,
|
|
21
17
|
:env_parser,
|
|
22
|
-
:delegate_to,
|
|
23
|
-
:depends_on,
|
|
24
18
|
:name,
|
|
25
|
-
:
|
|
19
|
+
:after_set,
|
|
26
20
|
:resetter,
|
|
27
21
|
:setter,
|
|
28
22
|
:type,
|
|
@@ -30,14 +24,12 @@ module Datadog
|
|
|
30
24
|
|
|
31
25
|
def initialize(name, meta = {}, &block)
|
|
32
26
|
@default = meta[:default]
|
|
33
|
-
@
|
|
27
|
+
@default_proc = meta[:default_proc]
|
|
34
28
|
@env = meta[:env]
|
|
35
29
|
@deprecated_env = meta[:deprecated_env]
|
|
36
30
|
@env_parser = meta[:env_parser]
|
|
37
|
-
@delegate_to = meta[:delegate_to]
|
|
38
|
-
@depends_on = meta[:depends_on] || []
|
|
39
31
|
@name = name.to_sym
|
|
40
|
-
@
|
|
32
|
+
@after_set = meta[:after_set]
|
|
41
33
|
@resetter = meta[:resetter]
|
|
42
34
|
@setter = meta[:setter] || block || IDENTITY
|
|
43
35
|
@type = meta[:type]
|
|
@@ -62,12 +54,10 @@ module Datadog
|
|
|
62
54
|
@deprecated_env = nil
|
|
63
55
|
@env_parser = nil
|
|
64
56
|
@default = nil
|
|
65
|
-
@
|
|
66
|
-
@delegate_to = nil
|
|
67
|
-
@depends_on = []
|
|
57
|
+
@default_proc = nil
|
|
68
58
|
@helpers = {}
|
|
69
59
|
@name = name.to_sym
|
|
70
|
-
@
|
|
60
|
+
@after_set = nil
|
|
71
61
|
@resetter = nil
|
|
72
62
|
@setter = OptionDefinition::IDENTITY
|
|
73
63
|
@type = nil
|
|
@@ -81,10 +71,6 @@ module Datadog
|
|
|
81
71
|
validate_options!
|
|
82
72
|
end
|
|
83
73
|
|
|
84
|
-
def depends_on(*values)
|
|
85
|
-
@depends_on = values.flatten
|
|
86
|
-
end
|
|
87
|
-
|
|
88
74
|
def env(value)
|
|
89
75
|
@env = value
|
|
90
76
|
end
|
|
@@ -101,12 +87,8 @@ module Datadog
|
|
|
101
87
|
@default = block || value
|
|
102
88
|
end
|
|
103
89
|
|
|
104
|
-
def
|
|
105
|
-
@
|
|
106
|
-
end
|
|
107
|
-
|
|
108
|
-
def delegate_to(&block)
|
|
109
|
-
@delegate_to = block
|
|
90
|
+
def default_proc(&block)
|
|
91
|
+
@default_proc = block
|
|
110
92
|
end
|
|
111
93
|
|
|
112
94
|
def helper(name, *_args, &block)
|
|
@@ -123,8 +105,8 @@ module Datadog
|
|
|
123
105
|
end
|
|
124
106
|
end
|
|
125
107
|
|
|
126
|
-
def
|
|
127
|
-
@
|
|
108
|
+
def after_set(&block)
|
|
109
|
+
@after_set = block
|
|
128
110
|
end
|
|
129
111
|
|
|
130
112
|
def resetter(&block)
|
|
@@ -143,24 +125,20 @@ module Datadog
|
|
|
143
125
|
end
|
|
144
126
|
|
|
145
127
|
# For applying options for OptionDefinition
|
|
146
|
-
# rubocop:disable Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
|
|
147
128
|
def apply_options!(options = {})
|
|
148
129
|
return if options.nil? || options.empty?
|
|
149
130
|
|
|
150
131
|
default(options[:default]) if options.key?(:default)
|
|
151
|
-
|
|
132
|
+
default_proc(&options[:default_proc]) if options.key?(:default_proc)
|
|
152
133
|
env(options[:env]) if options.key?(:env)
|
|
153
134
|
deprecated_env(options[:deprecated_env]) if options.key?(:deprecated_env)
|
|
154
135
|
env_parser(&options[:env_parser]) if options.key?(:env_parser)
|
|
155
|
-
delegate_to(&options[:delegate_to]) if options.key?(:delegate_to)
|
|
156
|
-
depends_on(*options[:depends_on]) if options.key?(:depends_on)
|
|
157
136
|
lazy(options[:lazy]) if options.key?(:lazy)
|
|
158
|
-
|
|
137
|
+
after_set(&options[:after_set]) if options.key?(:after_set)
|
|
159
138
|
resetter(&options[:resetter]) if options.key?(:resetter)
|
|
160
139
|
setter(&options[:setter]) if options.key?(:setter)
|
|
161
140
|
type(options[:type], **(options[:type_options] || {})) if options.key?(:type)
|
|
162
141
|
end
|
|
163
|
-
# rubocop:enable Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
|
|
164
142
|
|
|
165
143
|
def to_definition
|
|
166
144
|
OptionDefinition.new(@name, meta)
|
|
@@ -169,13 +147,11 @@ module Datadog
|
|
|
169
147
|
def meta
|
|
170
148
|
{
|
|
171
149
|
default: @default,
|
|
172
|
-
|
|
150
|
+
default_proc: @default_proc,
|
|
173
151
|
env: @env,
|
|
174
152
|
deprecated_env: @deprecated_env,
|
|
175
153
|
env_parser: @env_parser,
|
|
176
|
-
|
|
177
|
-
depends_on: @depends_on,
|
|
178
|
-
on_set: @on_set,
|
|
154
|
+
after_set: @after_set,
|
|
179
155
|
resetter: @resetter,
|
|
180
156
|
setter: @setter,
|
|
181
157
|
type: @type,
|
|
@@ -186,10 +162,10 @@ module Datadog
|
|
|
186
162
|
private
|
|
187
163
|
|
|
188
164
|
def validate_options!
|
|
189
|
-
if !@default.nil? && @
|
|
165
|
+
if !@default.nil? && @default_proc
|
|
190
166
|
raise InvalidOptionError,
|
|
191
|
-
'Using `default` and `
|
|
192
|
-
'If you want to store a block as the default value use `
|
|
167
|
+
'Using `default` and `default_proc` is not allowed. Please use one or the other.' \
|
|
168
|
+
'If you want to store a block as the default value use `default_proc`'\
|
|
193
169
|
' otherwise use `default`'
|
|
194
170
|
end
|
|
195
171
|
end
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
2
3
|
require_relative 'option_definition'
|
|
3
|
-
require_relative 'option_definition_set'
|
|
4
4
|
|
|
5
5
|
module Datadog
|
|
6
6
|
module Core
|
|
@@ -18,7 +18,7 @@ module Datadog
|
|
|
18
18
|
module ClassMethods
|
|
19
19
|
def options
|
|
20
20
|
# Allows for class inheritance of option definitions
|
|
21
|
-
@options ||= superclass <= Options ? superclass.options.dup :
|
|
21
|
+
@options ||= superclass <= Options ? superclass.options.dup : {}
|
|
22
22
|
end
|
|
23
23
|
|
|
24
24
|
protected
|
|
@@ -64,7 +64,7 @@ module Datadog
|
|
|
64
64
|
# @public_api
|
|
65
65
|
module InstanceMethods
|
|
66
66
|
def options
|
|
67
|
-
@options ||=
|
|
67
|
+
@options ||= {}
|
|
68
68
|
end
|
|
69
69
|
|
|
70
70
|
def set_option(name, value, precedence: Configuration::Option::Precedence::PROGRAMMATIC)
|
|
@@ -101,7 +101,7 @@ module Datadog
|
|
|
101
101
|
end
|
|
102
102
|
|
|
103
103
|
def reset_options!
|
|
104
|
-
options.
|
|
104
|
+
options.each_value(&:reset)
|
|
105
105
|
end
|
|
106
106
|
|
|
107
107
|
private
|
|
@@ -103,13 +103,12 @@ module Datadog
|
|
|
103
103
|
o.env Datadog::Core::Configuration::Ext::Diagnostics::ENV_DEBUG_ENABLED
|
|
104
104
|
o.default false
|
|
105
105
|
o.type :bool
|
|
106
|
-
o.
|
|
106
|
+
o.after_set do |enabled|
|
|
107
107
|
# Enable rich debug print statements.
|
|
108
108
|
# We do not need to unnecessarily load 'pp' unless in debugging mode.
|
|
109
109
|
require 'pp' if enabled
|
|
110
110
|
end
|
|
111
111
|
end
|
|
112
|
-
|
|
113
112
|
# Internal {Datadog::Statsd} metrics collection.
|
|
114
113
|
#
|
|
115
114
|
# @public_api
|
|
@@ -177,7 +176,7 @@ module Datadog
|
|
|
177
176
|
#
|
|
178
177
|
# @return Logger::Severity
|
|
179
178
|
option :instance do |o|
|
|
180
|
-
o.
|
|
179
|
+
o.after_set { |value| set_option(:level, value.level) unless value.nil? }
|
|
181
180
|
end
|
|
182
181
|
|
|
183
182
|
# Log level for `Datadog.logger`.
|
|
@@ -208,21 +207,16 @@ module Datadog
|
|
|
208
207
|
|
|
209
208
|
# @public_api
|
|
210
209
|
settings :advanced do
|
|
211
|
-
# @deprecated
|
|
210
|
+
# @deprecated No longer does anything, and will be removed on dd-trace-rb 2.0.
|
|
212
211
|
#
|
|
213
|
-
# This
|
|
214
|
-
#
|
|
215
|
-
# per second for a 60 second period.
|
|
212
|
+
# This was used prior to the GA of the new CPU Profiling 2.0 profiler. The CPU Profiling 2.0 profiler does not
|
|
213
|
+
# use or need this setting and thus it doesn't do anything.
|
|
216
214
|
option :max_events do |o|
|
|
217
|
-
o.
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
Datadog.
|
|
221
|
-
|
|
222
|
-
'anything unless you the `force_enable_legacy_profiler` option is in use. ' \
|
|
223
|
-
'Please remove it from your Datadog.configure block.'
|
|
224
|
-
)
|
|
225
|
-
end
|
|
215
|
+
o.after_set do
|
|
216
|
+
Datadog.logger.warn(
|
|
217
|
+
'The profiling.advanced.max_events setting has been deprecated for removal and no ' \
|
|
218
|
+
'longer does anything. Please remove it from your Datadog.configure block.'
|
|
219
|
+
)
|
|
226
220
|
end
|
|
227
221
|
end
|
|
228
222
|
|
|
@@ -261,7 +255,7 @@ module Datadog
|
|
|
261
255
|
# This was added as a temporary support option in case of issues with the new `Profiling::HttpTransport` class
|
|
262
256
|
# but we're now confident it's working nicely so we've removed the old code path.
|
|
263
257
|
option :legacy_transport_enabled do |o|
|
|
264
|
-
o.
|
|
258
|
+
o.after_set do
|
|
265
259
|
Datadog.logger.warn(
|
|
266
260
|
'The profiling.advanced.legacy_transport_enabled setting has been deprecated for removal and no ' \
|
|
267
261
|
'longer does anything. Please remove it from your Datadog.configure block.'
|
|
@@ -274,7 +268,7 @@ module Datadog
|
|
|
274
268
|
# This was used prior to the GA of the new CPU Profiling 2.0 profiler. Using CPU Profiling 2.0 is now the
|
|
275
269
|
# default and this doesn't do anything.
|
|
276
270
|
option :force_enable_new_profiler do |o|
|
|
277
|
-
o.
|
|
271
|
+
o.after_set do
|
|
278
272
|
Datadog.logger.warn(
|
|
279
273
|
'The profiling.advanced.force_enable_new_profiler setting has been deprecated for removal and no ' \
|
|
280
274
|
'longer does anything. Please remove it from your Datadog.configure block.'
|
|
@@ -282,26 +276,16 @@ module Datadog
|
|
|
282
276
|
end
|
|
283
277
|
end
|
|
284
278
|
|
|
285
|
-
# @deprecated
|
|
286
|
-
#
|
|
287
|
-
# Forces enabling the *legacy* non-CPU Profiling 2.0 profiler.
|
|
288
|
-
# Do not use unless instructed to by support.
|
|
279
|
+
# @deprecated No longer does anything, and will be removed on dd-trace-rb 2.0.
|
|
289
280
|
#
|
|
290
|
-
#
|
|
281
|
+
# This was used prior to the GA of the new CPU Profiling 2.0 profiler. Using CPU Profiling 2.0 is now the
|
|
282
|
+
# default and this doesn't do anything.
|
|
291
283
|
option :force_enable_legacy_profiler do |o|
|
|
292
|
-
o.
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
Datadog.logger.warn(
|
|
298
|
-
'The profiling.advanced.force_enable_legacy_profiler setting has been deprecated for removal. ' \
|
|
299
|
-
'Do not use unless instructed to by support. ' \
|
|
300
|
-
'If you needed to use it due to incompatibilities with the CPU Profiling 2.0 profiler, consider ' \
|
|
301
|
-
'using the profiling.advanced.no_signals_workaround_enabled setting instead. ' \
|
|
302
|
-
'See <https://dtdg.co/ruby-profiler-troubleshooting> for details.'
|
|
303
|
-
)
|
|
304
|
-
end
|
|
284
|
+
o.after_set do
|
|
285
|
+
Datadog.logger.warn(
|
|
286
|
+
'The profiling.advanced.force_enable_legacy_profiler setting has been deprecated for removal and no ' \
|
|
287
|
+
'longer does anything. Please remove it from your Datadog.configure block.'
|
|
288
|
+
)
|
|
305
289
|
end
|
|
306
290
|
end
|
|
307
291
|
|
|
@@ -330,15 +314,33 @@ module Datadog
|
|
|
330
314
|
|
|
331
315
|
# Can be used to enable/disable the Datadog::Profiling.allocation_count feature.
|
|
332
316
|
#
|
|
333
|
-
# This feature is safe and enabled by default on Ruby 2.x, but
|
|
334
|
-
#
|
|
335
|
-
#
|
|
317
|
+
# This feature is safe and enabled by default on Ruby 2.x, but has a few caveats on Ruby 3.x.
|
|
318
|
+
#
|
|
319
|
+
# Caveat 1 (severe):
|
|
320
|
+
# On Ruby versions 3.0 (all), 3.1.0 to 3.1.3, and 3.2.0 to 3.2.2 this is disabled by default because it
|
|
321
|
+
# can trigger a VM bug that causes a segmentation fault during garbage collection of Ractors
|
|
322
|
+
# (https://bugs.ruby-lang.org/issues/18464). We don't recommend using this feature on such Rubies.
|
|
323
|
+
# This bug is fixed on Ruby versions 3.1.4, 3.2.3 and 3.3.0.
|
|
324
|
+
#
|
|
325
|
+
# Caveat 2 (annoyance):
|
|
326
|
+
# On all known versions of Ruby 3.x, due to https://bugs.ruby-lang.org/issues/19112, when a ractor gets
|
|
327
|
+
# garbage collected, Ruby will disable all active tracepoints, which this feature internally relies on.
|
|
328
|
+
# Thus this feature is only usable if you're not using Ractors.
|
|
336
329
|
#
|
|
337
|
-
#
|
|
338
|
-
#
|
|
330
|
+
# Caveat 3 (severe):
|
|
331
|
+
# Ruby 3.2.0 to 3.2.2 have a bug in the newobj tracepoint (https://bugs.ruby-lang.org/issues/19482,
|
|
332
|
+
# https://github.com/ruby/ruby/pull/7464) so that's an extra reason why it's not safe on those Rubies.
|
|
333
|
+
# This bug is fixed on Ruby versions 3.2.3 and 3.3.0.
|
|
339
334
|
#
|
|
340
|
-
# @default `true` on Ruby 2.x
|
|
341
|
-
option :allocation_counting_enabled
|
|
335
|
+
# @default `true` on Ruby 2.x and 3.1.4+, 3.2.3+ and 3.3.0+; `false` for Ruby 3.0 and unpatched Rubies.
|
|
336
|
+
option :allocation_counting_enabled do |o|
|
|
337
|
+
o.default do
|
|
338
|
+
RUBY_VERSION.start_with?('2.') ||
|
|
339
|
+
(RUBY_VERSION.start_with?('3.1.') && RUBY_VERSION >= '3.1.4') ||
|
|
340
|
+
(RUBY_VERSION.start_with?('3.2.') && RUBY_VERSION >= '3.2.3') ||
|
|
341
|
+
RUBY_VERSION >= '3.3.'
|
|
342
|
+
end
|
|
343
|
+
end
|
|
342
344
|
|
|
343
345
|
# Can be used to disable checking which version of `libmysqlclient` is being used by the `mysql2` gem.
|
|
344
346
|
#
|
|
@@ -527,10 +529,10 @@ module Datadog
|
|
|
527
529
|
# @default `->{ Time.now }`
|
|
528
530
|
# @return [Proc<Time>]
|
|
529
531
|
option :time_now_provider do |o|
|
|
530
|
-
o.
|
|
532
|
+
o.default_proc { ::Time.now }
|
|
531
533
|
o.type :proc
|
|
532
534
|
|
|
533
|
-
o.
|
|
535
|
+
o.after_set do |time_provider|
|
|
534
536
|
Core::Utils::Time.now_provider = time_provider
|
|
535
537
|
end
|
|
536
538
|
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
+
require 'set'
|
|
4
|
+
|
|
3
5
|
module Datadog
|
|
4
6
|
module Core
|
|
5
7
|
module Environment
|
|
@@ -10,14 +12,29 @@ module Datadog
|
|
|
10
12
|
# This can be used to make decisions about when to enable
|
|
11
13
|
# background systems like worker threads or telemetry.
|
|
12
14
|
def development?
|
|
13
|
-
!!(repl? || test? || rails_development?)
|
|
15
|
+
!!(webmock_enabled? || repl? || test? || rails_development?)
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
# WebMock stores the reference to `Net::HTTP` with constant `OriginalNetHTTP`, and when WebMock enables,
|
|
19
|
+
# the adapter swaps `Net::HTTP` reference to its mock object, @webMockNetHTTP.
|
|
20
|
+
#
|
|
21
|
+
# Hence, we can detect by
|
|
22
|
+
# 1. Checking if `Net::HTTP` is referring to mock object
|
|
23
|
+
# => ::Net::HTTP.equal?(::WebMock::HttpLibAdapters::NetHttpAdapter.instance_variable_get(:@webMockNetHTTP))
|
|
24
|
+
#
|
|
25
|
+
# 2. Checking if `Net::HTTP` is referring to the original one
|
|
26
|
+
# => ::Net::HTTP.equal?(::WebMock::HttpLibAdapters::NetHttpAdapter::OriginalNetHTTP)
|
|
27
|
+
def webmock_enabled?
|
|
28
|
+
defined?(::WebMock::HttpLibAdapters::NetHttpAdapter) &&
|
|
29
|
+
defined?(::Net::HTTP) &&
|
|
30
|
+
::Net::HTTP.equal?(::WebMock::HttpLibAdapters::NetHttpAdapter.instance_variable_get(:@webMockNetHTTP))
|
|
14
31
|
end
|
|
15
32
|
|
|
16
33
|
private
|
|
17
34
|
|
|
18
35
|
# Is this process running a test?
|
|
19
36
|
def test?
|
|
20
|
-
rspec? || minitest?
|
|
37
|
+
rspec? || minitest? || cucumber?
|
|
21
38
|
end
|
|
22
39
|
|
|
23
40
|
# Is this process running inside on a Read–eval–print loop?
|
|
@@ -49,14 +66,35 @@ module Datadog
|
|
|
49
66
|
::Minitest::Unit.class_variable_get(:@@installed_at_exit))
|
|
50
67
|
end
|
|
51
68
|
|
|
52
|
-
#
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
#
|
|
69
|
+
# Check if we are running from `bin/cucumber` or `cucumber/rake/task`.
|
|
70
|
+
def cucumber?
|
|
71
|
+
defined?(::Cucumber::Cli)
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
# If this is a Rails application, use different heuristics to detect
|
|
75
|
+
# whether this is a development environment or not.
|
|
58
76
|
def rails_development?
|
|
59
|
-
|
|
77
|
+
# A Rails Spring Ruby process is a bit peculiar: the process is agnostic
|
|
78
|
+
# whether the application is running as a console or server.
|
|
79
|
+
# Luckily, the Spring gem *must not* be installed in a production environment so
|
|
80
|
+
# detecting its presence is enough to deduct if this is a development environment.
|
|
81
|
+
#
|
|
82
|
+
# @see https://github.com/rails/spring/blob/48b299348ace2188444489a0c216a6f3e9687281/README.md?plain=1#L204-L207
|
|
83
|
+
defined?(::Spring) || rails_env_development?
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
RAILS_ENV_DEVELOPMENT = Set['development', 'test'].freeze
|
|
87
|
+
private_constant :RAILS_ENV_DEVELOPMENT
|
|
88
|
+
|
|
89
|
+
# By default, every Rails application has three environments: `development`, `test`, and `production`.
|
|
90
|
+
# This has been the case since Rails 3.0.0:
|
|
91
|
+
# https://github.com/rails/rails/blob/3e48484ff16ea07ffe5db232bf43c14992e273c1/railties/doc/guides/getting_started_with_rails/getting_started_with_rails.txt#L144
|
|
92
|
+
#
|
|
93
|
+
# Instead of checking for "not production", we instead check for "development" and "test" because
|
|
94
|
+
# it's common to have a custom "staging" environment, and such environment normally want to run as close
|
|
95
|
+
# to production as possible.
|
|
96
|
+
def rails_env_development?
|
|
97
|
+
defined?(::Rails.env) && RAILS_ENV_DEVELOPMENT.include?(::Rails.env)
|
|
60
98
|
end
|
|
61
99
|
end
|
|
62
100
|
end
|
|
@@ -29,75 +29,6 @@ module Datadog
|
|
|
29
29
|
end
|
|
30
30
|
end
|
|
31
31
|
|
|
32
|
-
# Reads an environment variable as an Integer.
|
|
33
|
-
#
|
|
34
|
-
# @param [String] var environment variable
|
|
35
|
-
# @param [Array<String>] var list of environment variables
|
|
36
|
-
# @param [Integer] default the default value if the keys in `var` are not present in the environment
|
|
37
|
-
# @param [Boolean] deprecation_warning when `var` is a list, record a deprecation log when
|
|
38
|
-
# the first key in `var` is not used.
|
|
39
|
-
# @return [Integer] if the environment value is a valid Integer
|
|
40
|
-
# @return [default] if the environment value is not found
|
|
41
|
-
def env_to_int(var, default = nil, deprecation_warning: true)
|
|
42
|
-
var = decode_array(var, deprecation_warning)
|
|
43
|
-
var && ENV.key?(var) ? ENV[var].to_i : default
|
|
44
|
-
end
|
|
45
|
-
|
|
46
|
-
# Reads an environment variable as a Float.
|
|
47
|
-
#
|
|
48
|
-
# @param [String] var environment variable
|
|
49
|
-
# @param [Array<String>] var list of environment variables
|
|
50
|
-
# @param [Float] default the default value if the keys in `var` are not present in the environment
|
|
51
|
-
# @param [Boolean] deprecation_warning when `var` is a list, record a deprecation log when
|
|
52
|
-
# the first key in `var` is not used.
|
|
53
|
-
# @return [Float] if the environment value is a valid Float
|
|
54
|
-
# @return [default] if the environment value is not found
|
|
55
|
-
def env_to_float(var, default = nil, deprecation_warning: true)
|
|
56
|
-
var = decode_array(var, deprecation_warning)
|
|
57
|
-
var && ENV.key?(var) ? ENV[var].to_f : default
|
|
58
|
-
end
|
|
59
|
-
|
|
60
|
-
# Parses comma- or space-separated lists.
|
|
61
|
-
#
|
|
62
|
-
# If a comma is present, then the list is considered comma-separated.
|
|
63
|
-
# Otherwise, it is considered space-separated.
|
|
64
|
-
#
|
|
65
|
-
# After the entries are separated, commas and whitespaces that are
|
|
66
|
-
# either trailing or leading are trimmed.
|
|
67
|
-
#
|
|
68
|
-
# Empty entries, after trimmed, are also removed from the result.
|
|
69
|
-
#
|
|
70
|
-
# @param [String] var environment variable
|
|
71
|
-
# @param [Array<String>] var list of environment variables
|
|
72
|
-
# @param [Array<Object>] default the default value if the keys in `var` are not present in the environment
|
|
73
|
-
# @param [Boolean] deprecation_warning when `var` is a list, record a deprecation log when
|
|
74
|
-
# the first key in `var` is not used.
|
|
75
|
-
# @return [Array<Object>] if the environment value is a valid list
|
|
76
|
-
# @return [default] if the environment value is not found
|
|
77
|
-
def env_to_list(var, default = [], comma_separated_only:, deprecation_warning: true)
|
|
78
|
-
var = decode_array(var, deprecation_warning)
|
|
79
|
-
if var && ENV.key?(var)
|
|
80
|
-
value = ENV[var]
|
|
81
|
-
|
|
82
|
-
values = if value.include?(',') || comma_separated_only
|
|
83
|
-
value.split(',')
|
|
84
|
-
else
|
|
85
|
-
value.split(' ') # rubocop:disable Style/RedundantArgument
|
|
86
|
-
end
|
|
87
|
-
|
|
88
|
-
values.map! do |v|
|
|
89
|
-
v.gsub!(/\A[\s,]*|[\s,]*\Z/, '')
|
|
90
|
-
|
|
91
|
-
v.empty? ? nil : v
|
|
92
|
-
end
|
|
93
|
-
|
|
94
|
-
values.compact!
|
|
95
|
-
values
|
|
96
|
-
else
|
|
97
|
-
default
|
|
98
|
-
end
|
|
99
|
-
end
|
|
100
|
-
|
|
101
32
|
private
|
|
102
33
|
|
|
103
34
|
def decode_array(var, deprecation_warning)
|
data/lib/datadog/core/error.rb
CHANGED
data/lib/datadog/core/git/ext.rb
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
require_relative 'worker'
|
|
4
4
|
require_relative 'client/capabilities'
|
|
5
5
|
require_relative 'client'
|
|
6
|
-
require_relative '
|
|
6
|
+
require_relative 'transport/http'
|
|
7
7
|
require_relative '../remote'
|
|
8
8
|
require_relative 'negotiation'
|
|
9
9
|
|
|
@@ -22,7 +22,7 @@ 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::Transport::HTTP.v7(**transport_options.dup)
|
|
25
|
+
transport_v7 = Datadog::Core::Remote::Transport::HTTP.v7(**transport_options.dup)
|
|
26
26
|
|
|
27
27
|
@barrier = Barrier.new(BARRIER_TIMEOUT)
|
|
28
28
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
require_relative '
|
|
3
|
+
require_relative 'transport/http'
|
|
4
4
|
|
|
5
5
|
module Datadog
|
|
6
6
|
module Core
|
|
@@ -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::Transport::HTTP.root(**transport_options.dup)
|
|
14
|
+
@transport_root = Datadog::Core::Remote::Transport::HTTP.root(**transport_options.dup)
|
|
15
15
|
@logged = {}
|
|
16
16
|
end
|
|
17
17
|
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative '../../../core/transport/request'
|
|
4
|
+
require_relative '../../../core/transport/parcel'
|
|
5
|
+
|
|
6
|
+
module Datadog
|
|
7
|
+
module Core
|
|
8
|
+
module Remote
|
|
9
|
+
module Transport
|
|
10
|
+
module Config
|
|
11
|
+
# Data transfer object for encoded traces
|
|
12
|
+
class EncodedParcel
|
|
13
|
+
include Datadog::Core::Transport::Parcel
|
|
14
|
+
|
|
15
|
+
def count
|
|
16
|
+
data.length
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
# Config request
|
|
21
|
+
class Request < Datadog::Core::Transport::Request
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
# Config response
|
|
25
|
+
module Response
|
|
26
|
+
attr_reader :roots, :targets, :target_files, :client_configs
|
|
27
|
+
|
|
28
|
+
def empty?
|
|
29
|
+
@empty
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
# Config transport
|
|
34
|
+
class Transport
|
|
35
|
+
attr_reader :client, :apis, :default_api, :current_api_id
|
|
36
|
+
|
|
37
|
+
def initialize(apis, default_api)
|
|
38
|
+
@apis = apis
|
|
39
|
+
|
|
40
|
+
@client = HTTP::Client.new(current_api)
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
##### there is only one transport! it's negotiation!
|
|
44
|
+
def send_config(payload)
|
|
45
|
+
json = JSON.dump(payload)
|
|
46
|
+
parcel = EncodedParcel.new(json)
|
|
47
|
+
request = Request.new(parcel)
|
|
48
|
+
|
|
49
|
+
@client.send_config_payload(request)
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
def current_api
|
|
53
|
+
@apis[HTTP::API::V7]
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
end
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Datadog
|
|
4
|
+
module Core
|
|
5
|
+
module Remote
|
|
6
|
+
module Transport
|
|
7
|
+
module HTTP
|
|
8
|
+
module API
|
|
9
|
+
# An API configured with adapter and routes
|
|
10
|
+
class Instance
|
|
11
|
+
attr_reader \
|
|
12
|
+
:adapter,
|
|
13
|
+
:headers,
|
|
14
|
+
:spec
|
|
15
|
+
|
|
16
|
+
def initialize(spec, adapter, options = {})
|
|
17
|
+
@spec = spec
|
|
18
|
+
@adapter = adapter
|
|
19
|
+
@headers = options.fetch(:headers, {})
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def encoder
|
|
23
|
+
spec.encoder
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def call(env)
|
|
27
|
+
# Add headers to request env, unless empty.
|
|
28
|
+
env.headers.merge!(headers) unless headers.empty?
|
|
29
|
+
|
|
30
|
+
# Send request env to the adapter.
|
|
31
|
+
adapter.call(env)
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
end
|