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
|
@@ -3,6 +3,7 @@ require_relative 'configuration/resolver'
|
|
|
3
3
|
require_relative 'ext'
|
|
4
4
|
require_relative 'quantize'
|
|
5
5
|
require_relative 'tags'
|
|
6
|
+
require_relative 'trace_middleware'
|
|
6
7
|
|
|
7
8
|
module Datadog
|
|
8
9
|
module Tracing
|
|
@@ -17,31 +18,11 @@ module Datadog
|
|
|
17
18
|
# InstanceMethods - implementing instrumentation
|
|
18
19
|
module InstanceMethods
|
|
19
20
|
def call(*args, &block)
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
Tracing.trace(Contrib::Redis::Ext::SPAN_COMMAND) do |span|
|
|
23
|
-
span.service = service_name
|
|
24
|
-
span.span_type = Contrib::Redis::Ext::TYPE
|
|
25
|
-
span.resource = get_command(args, show_command_args)
|
|
26
|
-
Contrib::Redis::Tags.set_common_tags(self, span, show_command_args)
|
|
27
|
-
|
|
28
|
-
super
|
|
29
|
-
end
|
|
21
|
+
TraceMiddleware.call(self, args[0], service_name, command_args?) { super }
|
|
30
22
|
end
|
|
31
23
|
|
|
32
24
|
def call_pipeline(*args, &block)
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
Tracing.trace(Contrib::Redis::Ext::SPAN_COMMAND) do |span|
|
|
36
|
-
span.service = service_name
|
|
37
|
-
span.span_type = Contrib::Redis::Ext::TYPE
|
|
38
|
-
commands = get_pipeline_commands(args, show_command_args)
|
|
39
|
-
span.resource = commands.any? ? commands.join("\n") : '(none)'
|
|
40
|
-
span.set_metric Contrib::Redis::Ext::METRIC_PIPELINE_LEN, commands.length
|
|
41
|
-
Contrib::Redis::Tags.set_common_tags(self, span, show_command_args)
|
|
42
|
-
|
|
43
|
-
super
|
|
44
|
-
end
|
|
25
|
+
TraceMiddleware.call_pipelined(self, args[0].commands, service_name, command_args?) { super }
|
|
45
26
|
end
|
|
46
27
|
|
|
47
28
|
private
|
|
@@ -59,22 +40,6 @@ module Datadog
|
|
|
59
40
|
datadog_configuration[:service_name]
|
|
60
41
|
end
|
|
61
42
|
|
|
62
|
-
def get_command(args, show_command_args)
|
|
63
|
-
if show_command_args
|
|
64
|
-
Contrib::Redis::Quantize.format_command_args(*args)
|
|
65
|
-
else
|
|
66
|
-
Contrib::Redis::Quantize.get_verb(*args)
|
|
67
|
-
end
|
|
68
|
-
end
|
|
69
|
-
|
|
70
|
-
def get_pipeline_commands(args, show_command_args)
|
|
71
|
-
if show_command_args
|
|
72
|
-
args[0].commands.map { |c| Contrib::Redis::Quantize.format_command_args(c) }
|
|
73
|
-
else
|
|
74
|
-
args[0].commands.map { |c| Contrib::Redis::Quantize.get_verb(c) }
|
|
75
|
-
end
|
|
76
|
-
end
|
|
77
|
-
|
|
78
43
|
def datadog_configuration
|
|
79
44
|
Datadog.configuration.tracing[:redis, options]
|
|
80
45
|
end
|
|
@@ -12,7 +12,7 @@ module Datadog
|
|
|
12
12
|
# Tags handles generic common tags assignment.
|
|
13
13
|
module Tags
|
|
14
14
|
class << self
|
|
15
|
-
def set_common_tags(client, span,
|
|
15
|
+
def set_common_tags(client, span, raw_command)
|
|
16
16
|
if datadog_configuration[:peer_service]
|
|
17
17
|
span.set_tag(
|
|
18
18
|
Tracing::Metadata::Ext::TAG_PEER_SERVICE,
|
|
@@ -20,6 +20,11 @@ module Datadog
|
|
|
20
20
|
)
|
|
21
21
|
end
|
|
22
22
|
|
|
23
|
+
# Tag original global service name if not used
|
|
24
|
+
if span.service != Datadog.configuration.service
|
|
25
|
+
span.set_tag(Tracing::Contrib::Ext::Metadata::TAG_BASE_SERVICE, Datadog.configuration.service)
|
|
26
|
+
end
|
|
27
|
+
|
|
23
28
|
span.set_tag(Tracing::Metadata::Ext::TAG_COMPONENT, Ext::TAG_COMPONENT)
|
|
24
29
|
span.set_tag(Tracing::Metadata::Ext::TAG_OPERATION, Ext::TAG_OPERATION_COMMAND)
|
|
25
30
|
|
|
@@ -37,7 +42,7 @@ module Datadog
|
|
|
37
42
|
|
|
38
43
|
span.set_tag Ext::TAG_DATABASE_INDEX, client.db.to_s
|
|
39
44
|
span.set_tag Ext::TAG_DB, client.db
|
|
40
|
-
span.set_tag Ext::TAG_RAW_COMMAND,
|
|
45
|
+
span.set_tag Ext::TAG_RAW_COMMAND, raw_command
|
|
41
46
|
|
|
42
47
|
Contrib::SpanAttributeSchema.set_peer_service!(span, Ext::PEER_SERVICE_SOURCES)
|
|
43
48
|
end
|
|
@@ -9,55 +9,68 @@ module Datadog
|
|
|
9
9
|
module Redis
|
|
10
10
|
# Instrumentation for Redis 5+
|
|
11
11
|
module TraceMiddleware
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
12
|
+
# Instruments {RedisClient::ConnectionMixin#call}.
|
|
13
|
+
def call(command, redis_config)
|
|
14
|
+
config = resolve(redis_config)
|
|
15
|
+
TraceMiddleware.call(redis_config, command, config[:service_name], config[:command_args]) { super }
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
# Instruments {RedisClient::ConnectionMixin#call_pipelined}.
|
|
19
|
+
def call_pipelined(commands, redis_config)
|
|
20
|
+
config = resolve(redis_config)
|
|
21
|
+
TraceMiddleware.call_pipelined(redis_config, commands, config[:service_name], config[:command_args]) { super }
|
|
22
|
+
end
|
|
16
23
|
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
24
|
+
class << self
|
|
25
|
+
def call(client, command, service_name, command_args)
|
|
26
|
+
Tracing.trace(Redis::Ext::SPAN_COMMAND, type: Redis::Ext::TYPE, service: service_name) do |span|
|
|
27
|
+
raw_command = get_command(command, true)
|
|
28
|
+
span.resource = command_args ? raw_command : get_command(command, false)
|
|
20
29
|
|
|
21
|
-
|
|
30
|
+
Contrib::Redis::Tags.set_common_tags(client, span, raw_command)
|
|
22
31
|
|
|
23
|
-
|
|
32
|
+
yield
|
|
33
|
+
end
|
|
24
34
|
end
|
|
25
|
-
end
|
|
26
35
|
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
36
|
+
def call_pipelined(client, commands, service_name, command_args)
|
|
37
|
+
Tracing.trace(Redis::Ext::SPAN_COMMAND, type: Redis::Ext::TYPE, service: service_name) do |span|
|
|
38
|
+
raw_command = get_pipeline_commands(commands, true)
|
|
39
|
+
span.resource = command_args ? raw_command : get_pipeline_commands(commands, false)
|
|
31
40
|
|
|
32
|
-
|
|
33
|
-
span.span_type = Contrib::Redis::Ext::TYPE
|
|
34
|
-
span.resource = pipelined_commands.join("\n")
|
|
35
|
-
span.set_metric Contrib::Redis::Ext::METRIC_PIPELINE_LEN, pipelined_commands.length
|
|
41
|
+
span.set_metric Contrib::Redis::Ext::METRIC_PIPELINE_LEN, commands.length
|
|
36
42
|
|
|
37
|
-
|
|
43
|
+
Contrib::Redis::Tags.set_common_tags(client, span, raw_command)
|
|
38
44
|
|
|
39
|
-
|
|
45
|
+
yield
|
|
46
|
+
end
|
|
40
47
|
end
|
|
41
|
-
end
|
|
42
48
|
|
|
43
|
-
|
|
49
|
+
private
|
|
44
50
|
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
51
|
+
# Quantizes a single Redis command
|
|
52
|
+
def get_command(command, command_args)
|
|
53
|
+
if command_args
|
|
54
|
+
Contrib::Redis::Quantize.format_command_args(command)
|
|
55
|
+
else
|
|
56
|
+
Contrib::Redis::Quantize.get_verb(command)
|
|
57
|
+
end
|
|
50
58
|
end
|
|
51
|
-
end
|
|
52
59
|
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
60
|
+
# Quantizes a multi-command Redis pipeline execution
|
|
61
|
+
def get_pipeline_commands(commands, command_args)
|
|
62
|
+
list = if command_args
|
|
63
|
+
commands.map { |c| Contrib::Redis::Quantize.format_command_args(c) }
|
|
64
|
+
else
|
|
65
|
+
commands.map { |c| Contrib::Redis::Quantize.get_verb(c) }
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
list.empty? ? '(none)' : list.join("\n")
|
|
58
69
|
end
|
|
59
70
|
end
|
|
60
71
|
|
|
72
|
+
private
|
|
73
|
+
|
|
61
74
|
def resolve(redis_config)
|
|
62
75
|
custom = redis_config.custom[:datadog] || {}
|
|
63
76
|
|
|
@@ -41,6 +41,11 @@ module Datadog
|
|
|
41
41
|
)
|
|
42
42
|
end
|
|
43
43
|
|
|
44
|
+
# Tag original global service name if not used
|
|
45
|
+
if span.service != Datadog.configuration.service
|
|
46
|
+
span.set_tag(Tracing::Contrib::Ext::Metadata::TAG_BASE_SERVICE, Datadog.configuration.service)
|
|
47
|
+
end
|
|
48
|
+
|
|
44
49
|
span.set_tag(Tracing::Metadata::Ext::TAG_KIND, Tracing::Metadata::Ext::SpanKind::TAG_CLIENT)
|
|
45
50
|
|
|
46
51
|
span.set_tag(Tracing::Metadata::Ext::TAG_COMPONENT, Ext::TAG_COMPONENT)
|
|
@@ -49,6 +49,11 @@ module Datadog
|
|
|
49
49
|
end
|
|
50
50
|
|
|
51
51
|
def set_common_tags(span, db)
|
|
52
|
+
# Tag original global service name if not used
|
|
53
|
+
if span.service != Datadog.configuration.service
|
|
54
|
+
span.set_tag(Tracing::Contrib::Ext::Metadata::TAG_BASE_SERVICE, Datadog.configuration.service)
|
|
55
|
+
end
|
|
56
|
+
|
|
52
57
|
span.set_tag(Tracing::Metadata::Ext::TAG_COMPONENT, Ext::TAG_COMPONENT)
|
|
53
58
|
span.set_tag(Tracing::Metadata::Ext::TAG_OPERATION, Ext::TAG_OPERATION_QUERY)
|
|
54
59
|
|
|
@@ -33,7 +33,7 @@ module Datadog
|
|
|
33
33
|
option :service_name
|
|
34
34
|
option :error_handler do |o|
|
|
35
35
|
o.type :proc
|
|
36
|
-
o.
|
|
36
|
+
o.default_proc(&Tracing::SpanOperation::Events::DEFAULT_ON_ERROR)
|
|
37
37
|
end
|
|
38
38
|
option :tag_body, default: false, type: :bool
|
|
39
39
|
end
|
|
@@ -40,7 +40,7 @@ module Datadog
|
|
|
40
40
|
option :client_service_name
|
|
41
41
|
option :error_handler do |o|
|
|
42
42
|
o.type :proc
|
|
43
|
-
o.
|
|
43
|
+
o.default_proc(&Tracing::SpanOperation::Events::DEFAULT_ON_ERROR)
|
|
44
44
|
end
|
|
45
45
|
option :quantize, default: {}, type: :hash
|
|
46
46
|
option :distributed_tracing, default: false, type: :bool
|
|
@@ -31,7 +31,7 @@ module Datadog
|
|
|
31
31
|
option :service_name
|
|
32
32
|
option :error_handler do |o|
|
|
33
33
|
o.type :proc
|
|
34
|
-
o.
|
|
34
|
+
o.default_proc(&Tracing::SpanOperation::Events::DEFAULT_ON_ERROR)
|
|
35
35
|
end
|
|
36
36
|
option :tag_body, default: false, type: :bool
|
|
37
37
|
end
|
|
@@ -160,11 +160,11 @@ module Datadog
|
|
|
160
160
|
(?:"|%22) # closing '"' at end of value
|
|
161
161
|
)
|
|
162
162
|
|(?: # other common secret values
|
|
163
|
-
bearer(?:\s|%20)+[a-z0-9._
|
|
163
|
+
bearer(?:\s|%20)+[a-z0-9._-]+
|
|
164
164
|
|token(?::|%3A)[a-z0-9]{13}
|
|
165
165
|
|gh[opsu]_[0-9a-zA-Z]{36}
|
|
166
166
|
|ey[I-L](?:[\w=-]|%3D)+\.ey[I-L](?:[\w=-]|%3D)+(?:\.(?:[\w.+/=-]|%3D|%2F|%2B)+)?
|
|
167
|
-
|-{5}BEGIN(?:[a-z\s]|%20)+PRIVATE(?:\s|%20)KEY-{5}[
|
|
167
|
+
|-{5}BEGIN(?:[a-z\s]|%20)+PRIVATE(?:\s|%20)KEY-{5}[^-]+-{5}END(?:[a-z\s]|%20)+PRIVATE(?:\s|%20)KEY(?:-{5})?(?:\n|%0A)?
|
|
168
168
|
|(?:ssh-(?:rsa|dss)|ecdsa-[a-z0-9]+-[a-z0-9]+)(?:\s|%20)*(?:[a-z0-9/.+]|%2F|%5C|%2B){100,}(?:=|%3D)*(?:(?:\s+)[a-z0-9._-]+)?
|
|
169
169
|
)
|
|
170
170
|
}ix.freeze
|
|
@@ -137,6 +137,12 @@ module Datadog
|
|
|
137
137
|
private
|
|
138
138
|
|
|
139
139
|
def instrumented_integrations
|
|
140
|
+
# `instrumented_integrations` method is added only if tracing contrib extensions are required.
|
|
141
|
+
# If tracing is used in manual mode without integrations enabled this method does not exist.
|
|
142
|
+
# CI visibility gem datadog-ci uses Datadog::Tracer without requiring datadog/tracing/contrib folder
|
|
143
|
+
# nor enabling any integrations by default which causes EnvironmentCollector to fail.
|
|
144
|
+
return {} unless Datadog.configuration.tracing.respond_to?(:instrumented_integrations)
|
|
145
|
+
|
|
140
146
|
Datadog.configuration.tracing.instrumented_integrations
|
|
141
147
|
end
|
|
142
148
|
|
|
@@ -18,6 +18,12 @@ module Datadog
|
|
|
18
18
|
# @param propagation_styles [Hash<String,Object>]
|
|
19
19
|
def initialize(propagation_styles:)
|
|
20
20
|
@propagation_styles = propagation_styles
|
|
21
|
+
# We need to make sure propagation_style option is evaluated.
|
|
22
|
+
# Our options are lazy evaluated and it happens that propagation_style has the after_set callback
|
|
23
|
+
# that affect Datadog.configuration.tracing.distributed_tracing.propagation_inject_style and
|
|
24
|
+
# Datadog.configuration.tracing.distributed_tracing.propagation_extract_style
|
|
25
|
+
# By calling it here, we make sure if the customers has set any value either via code or ENV variable is applied.
|
|
26
|
+
::Datadog.configuration.tracing.distributed_tracing.propagation_style
|
|
21
27
|
end
|
|
22
28
|
|
|
23
29
|
# inject! populates the env with span ID, trace ID and sampling priority
|
|
@@ -72,8 +78,10 @@ module Datadog
|
|
|
72
78
|
#
|
|
73
79
|
# @param data [Hash]
|
|
74
80
|
def extract(data)
|
|
75
|
-
|
|
76
|
-
|
|
81
|
+
return unless data
|
|
82
|
+
return if data.empty?
|
|
83
|
+
|
|
84
|
+
extracted_trace_digest = nil
|
|
77
85
|
|
|
78
86
|
::Datadog.configuration.tracing.distributed_tracing.propagation_extract_style.each do |style|
|
|
79
87
|
propagator = @propagation_styles[style]
|
|
@@ -83,42 +91,14 @@ module Datadog
|
|
|
83
91
|
extracted_trace_digest = propagator.extract(data)
|
|
84
92
|
rescue => e
|
|
85
93
|
::Datadog.logger.error(
|
|
86
|
-
|
|
87
|
-
"Cause: #{e} Location: #{Array(e.backtrace).first}"
|
|
94
|
+
"Error extracting distributed trace data. Cause: #{e} Location: #{Array(e.backtrace).first}"
|
|
88
95
|
)
|
|
89
96
|
end
|
|
90
97
|
|
|
91
|
-
|
|
92
|
-
next if extracted_trace_digest.nil?
|
|
93
|
-
|
|
94
|
-
# Keep track of the Datadog extracted digest, we want to return it if we have it.
|
|
95
|
-
if extracted_trace_digest && style == Tracing::Configuration::Ext::Distributed::PROPAGATION_STYLE_DATADOG
|
|
96
|
-
dd_trace_digest = extracted_trace_digest
|
|
97
|
-
end
|
|
98
|
-
|
|
99
|
-
# No previously extracted trace data, use the one we just extracted
|
|
100
|
-
if trace_digest.nil?
|
|
101
|
-
trace_digest = extracted_trace_digest
|
|
102
|
-
else
|
|
103
|
-
unless trace_digest.trace_id == extracted_trace_digest.trace_id \
|
|
104
|
-
&& trace_digest.span_id == extracted_trace_digest.span_id
|
|
105
|
-
# We have two mismatched propagation contexts
|
|
106
|
-
::Datadog.logger.debug do
|
|
107
|
-
'Cannot extract distributed trace data: extracted styles differ, ' \
|
|
108
|
-
"#{trace_digest.trace_id} != #{extracted_trace_digest.trace_id} && " \
|
|
109
|
-
"#{trace_digest.span_id} != #{extracted_trace_digest.span_id}"
|
|
110
|
-
end
|
|
111
|
-
|
|
112
|
-
# It's safer to create a new context than to attach ourselves to the wrong context
|
|
113
|
-
return TraceDigest.new # Early return from the whole method
|
|
114
|
-
end
|
|
115
|
-
end
|
|
98
|
+
break if extracted_trace_digest
|
|
116
99
|
end
|
|
117
100
|
|
|
118
|
-
|
|
119
|
-
# Always return the Datadog trace digest if one exists since it has more
|
|
120
|
-
# information than the B3 digest, e.g. origin, priority sampling values.
|
|
121
|
-
dd_trace_digest || trace_digest || nil
|
|
101
|
+
extracted_trace_digest
|
|
122
102
|
end
|
|
123
103
|
end
|
|
124
104
|
end
|
|
@@ -59,8 +59,8 @@ module Datadog
|
|
|
59
59
|
# A valid example is:
|
|
60
60
|
#
|
|
61
61
|
# span.set_tags({ "http.method" => "GET", "user.id" => "234" })
|
|
62
|
-
def set_tags(
|
|
63
|
-
|
|
62
|
+
def set_tags(hash)
|
|
63
|
+
hash.each { |k, v| set_tag(k, v) }
|
|
64
64
|
end
|
|
65
65
|
|
|
66
66
|
# Returns true if the provided `tag` was set to a non-nil value.
|
|
@@ -111,7 +111,7 @@ module Datadog
|
|
|
111
111
|
# Returns a copy of all metadata.
|
|
112
112
|
# Keys for `@meta` and `@metrics` don't collide, by construction.
|
|
113
113
|
def tags
|
|
114
|
-
|
|
114
|
+
meta.merge(metrics)
|
|
115
115
|
end
|
|
116
116
|
|
|
117
117
|
protected
|
|
@@ -4,7 +4,7 @@ require_relative 'pipeline'
|
|
|
4
4
|
require_relative 'runtime/metrics'
|
|
5
5
|
require_relative 'writer'
|
|
6
6
|
|
|
7
|
-
require_relative '
|
|
7
|
+
require_relative 'transport/http'
|
|
8
8
|
|
|
9
9
|
module Datadog
|
|
10
10
|
module Tracing
|
|
@@ -20,10 +20,10 @@ module Datadog
|
|
|
20
20
|
:events,
|
|
21
21
|
:transport
|
|
22
22
|
|
|
23
|
-
# @param [Datadog::Transport::Traces::Transport] transport a custom transport instance.
|
|
23
|
+
# @param [Datadog::Tracing::Transport::Traces::Transport] transport a custom transport instance.
|
|
24
24
|
# If provided, overrides `transport_options` and `agent_settings`.
|
|
25
25
|
# @param [Hash<Symbol,Object>] transport_options options for the default transport instance.
|
|
26
|
-
# @param [Datadog::
|
|
26
|
+
# @param [Datadog::Tracing::Configuration::AgentSettingsResolver::AgentSettings] agent_settings agent options for
|
|
27
27
|
# the default transport instance.
|
|
28
28
|
def initialize(transport: nil, transport_options: {}, agent_settings: nil)
|
|
29
29
|
@transport = transport || begin
|
|
@@ -353,6 +353,8 @@ module Datadog
|
|
|
353
353
|
end
|
|
354
354
|
end
|
|
355
355
|
|
|
356
|
+
# Creates a new TraceOperation, with events bounds to this Tracer instance.
|
|
357
|
+
# @return [TraceOperation]
|
|
356
358
|
def start_trace(continue_from: nil)
|
|
357
359
|
# Build a new trace using digest if provided.
|
|
358
360
|
trace = build_trace(continue_from)
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative '../../../core/encoding'
|
|
4
|
+
|
|
5
|
+
require_relative '../../../core/transport/http/api/map'
|
|
6
|
+
require_relative 'api/spec'
|
|
7
|
+
|
|
8
|
+
require_relative 'traces'
|
|
9
|
+
|
|
10
|
+
module Datadog
|
|
11
|
+
module Tracing
|
|
12
|
+
module Transport
|
|
13
|
+
module HTTP
|
|
14
|
+
# Namespace for API components
|
|
15
|
+
module API
|
|
16
|
+
# Default API versions
|
|
17
|
+
V4 = 'v0.4'
|
|
18
|
+
V3 = 'v0.3'
|
|
19
|
+
|
|
20
|
+
module_function
|
|
21
|
+
|
|
22
|
+
def defaults
|
|
23
|
+
Datadog::Core::Transport::HTTP::API::Map[
|
|
24
|
+
V4 => Spec.new do |s|
|
|
25
|
+
s.traces = Traces::API::Endpoint.new(
|
|
26
|
+
'/v0.4/traces',
|
|
27
|
+
Core::Encoding::MsgpackEncoder,
|
|
28
|
+
service_rates: true
|
|
29
|
+
)
|
|
30
|
+
end,
|
|
31
|
+
V3 => Spec.new do |s|
|
|
32
|
+
s.traces = Traces::API::Endpoint.new(
|
|
33
|
+
'/v0.3/traces',
|
|
34
|
+
Core::Encoding::MsgpackEncoder
|
|
35
|
+
)
|
|
36
|
+
end,
|
|
37
|
+
].with_fallbacks(V4 => V3)
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
end
|
|
@@ -1,50 +1,18 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
require_relative '
|
|
4
|
-
require_relative '
|
|
5
|
-
require_relative '
|
|
6
|
-
|
|
7
|
-
# TODO: Decouple standard transport/http/api/instance
|
|
8
|
-
#
|
|
9
|
-
# Separate classes are needed because transport/http/trace includes
|
|
10
|
-
# Trace::API::Instance which closes over and uses a single spec, which is
|
|
11
|
-
# negotiated as either /v3 or /v4 for the whole API at the spec level, but we
|
|
12
|
-
# need an independent toplevel path at the endpoint level.
|
|
13
|
-
#
|
|
14
|
-
# Separate classes are needed because of `include Trace::API::Instance`.
|
|
15
|
-
#
|
|
16
|
-
# Below should be:
|
|
17
|
-
# require_relative '../../../../ddtrace/transport/http/api/instance'
|
|
3
|
+
require_relative '../../../core/configuration/agent_settings_resolver'
|
|
4
|
+
require_relative '../../../core/transport/http/adapters/registry'
|
|
5
|
+
require_relative '../../../core/transport/http/api/map'
|
|
18
6
|
require_relative 'api/instance'
|
|
19
|
-
|
|
20
|
-
# TODO: Decouple transport/http/client
|
|
21
|
-
#
|
|
22
|
-
# The standard one does `include Transport::HTTP::Statistics` and performs
|
|
23
|
-
# stats updates, which may or may not be desirable in general.
|
|
24
|
-
#
|
|
25
|
-
# Below should be:
|
|
26
|
-
# require_relative '../../../../ddtrace/transport/http/client'
|
|
27
7
|
require_relative 'client'
|
|
28
8
|
|
|
29
|
-
# TODO: Decouple transport/http/builder
|
|
30
|
-
#
|
|
31
|
-
# This class is duplicated even though it is tantalisingly close to the
|
|
32
|
-
# one in ddtrace/transport mostly because it refers to a different
|
|
33
|
-
# `API::Instance` in `#api_instance_class` but also because it operates on a
|
|
34
|
-
# different `HTTP::Client`, as well as de-hardcoding the transport class
|
|
35
|
-
# `Transport::Traces::Transport` in `#to_transport`
|
|
36
|
-
#
|
|
37
|
-
# Additionally, its design makes it so there can be only one (API, Client,
|
|
38
|
-
# Transport) triplet, requiring a new transport instance for any varying
|
|
39
|
-
# element of the triplet.
|
|
40
|
-
|
|
41
9
|
module Datadog
|
|
42
|
-
module
|
|
10
|
+
module Tracing
|
|
43
11
|
module Transport
|
|
44
12
|
module HTTP
|
|
45
13
|
# Builds new instances of Transport::HTTP::Client
|
|
46
14
|
class Builder
|
|
47
|
-
REGISTRY = Datadog::Transport::HTTP::Adapters::Registry.new
|
|
15
|
+
REGISTRY = Datadog::Core::Transport::HTTP::Adapters::Registry.new
|
|
48
16
|
|
|
49
17
|
attr_reader \
|
|
50
18
|
:apis,
|
|
@@ -59,7 +27,7 @@ module Datadog
|
|
|
59
27
|
@default_headers = {}
|
|
60
28
|
|
|
61
29
|
# Client settings
|
|
62
|
-
@apis = Datadog::Transport::HTTP::API::Map.new
|
|
30
|
+
@apis = Datadog::Core::Transport::HTTP::API::Map.new
|
|
63
31
|
@default_api = nil
|
|
64
32
|
|
|
65
33
|
# API settings
|
|
@@ -114,16 +82,17 @@ module Datadog
|
|
|
114
82
|
@default_api = key
|
|
115
83
|
end
|
|
116
84
|
|
|
117
|
-
def to_transport
|
|
85
|
+
def to_transport
|
|
118
86
|
raise NoDefaultApiError if @default_api.nil?
|
|
119
87
|
|
|
120
|
-
|
|
88
|
+
# DEV: Should not be specific to traces
|
|
89
|
+
Transport::Traces::Transport.new(to_api_instances, @default_api)
|
|
121
90
|
end
|
|
122
91
|
|
|
123
92
|
def to_api_instances
|
|
124
93
|
raise NoApisError if @apis.empty?
|
|
125
94
|
|
|
126
|
-
@apis.inject(Datadog::Transport::HTTP::API::Map.new) do |instances, (key, spec)|
|
|
95
|
+
@apis.inject(Datadog::Core::Transport::HTTP::API::Map.new) do |instances, (key, spec)|
|
|
127
96
|
instances.tap do
|
|
128
97
|
api_options = @api_options[key].dup
|
|
129
98
|
|
|
@@ -154,46 +123,22 @@ module Datadog
|
|
|
154
123
|
|
|
155
124
|
# Raised when the API key does not match known APIs.
|
|
156
125
|
class UnknownApiError < StandardError
|
|
157
|
-
attr_reader :key
|
|
158
|
-
|
|
159
126
|
def initialize(key)
|
|
160
|
-
super()
|
|
161
|
-
|
|
162
|
-
@key = key
|
|
163
|
-
end
|
|
164
|
-
|
|
165
|
-
def message
|
|
166
|
-
"Unknown transport API '#{key}'!"
|
|
127
|
+
super("Unknown transport API '#{key}'!")
|
|
167
128
|
end
|
|
168
129
|
end
|
|
169
130
|
|
|
170
131
|
# Raised when the identifier cannot be matched to an adapter.
|
|
171
132
|
class UnknownAdapterError < StandardError
|
|
172
|
-
attr_reader :type
|
|
173
|
-
|
|
174
133
|
def initialize(type)
|
|
175
|
-
super()
|
|
176
|
-
|
|
177
|
-
@type = type
|
|
178
|
-
end
|
|
179
|
-
|
|
180
|
-
def message
|
|
181
|
-
"Unknown transport adapter '#{type}'!"
|
|
134
|
+
super("Unknown transport adapter '#{type}'!")
|
|
182
135
|
end
|
|
183
136
|
end
|
|
184
137
|
|
|
185
138
|
# Raised when an adapter cannot be resolved for an API instance.
|
|
186
139
|
class NoAdapterForApiError < StandardError
|
|
187
|
-
attr_reader :key
|
|
188
|
-
|
|
189
140
|
def initialize(key)
|
|
190
|
-
super()
|
|
191
|
-
|
|
192
|
-
@key = key
|
|
193
|
-
end
|
|
194
|
-
|
|
195
|
-
def message
|
|
196
|
-
"No adapter resolved for transport API '#{key}'!"
|
|
141
|
+
super("No adapter resolved for transport API '#{key}'!")
|
|
197
142
|
end
|
|
198
143
|
end
|
|
199
144
|
|