ddtrace 1.12.1 → 1.23.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 +613 -9
- data/LICENSE-3rdparty.csv +1 -1
- data/bin/ddprofrb +15 -0
- data/bin/ddtracerb +3 -1
- data/ext/{ddtrace_profiling_loader/ddtrace_profiling_loader.c → datadog_profiling_loader/datadog_profiling_loader.c} +2 -2
- data/ext/{ddtrace_profiling_loader → datadog_profiling_loader}/extconf.rb +3 -3
- data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/NativeExtensionDesign.md +3 -5
- data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/clock_id.h +0 -3
- data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/clock_id_from_pthread.c +3 -22
- data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/clock_id_noop.c +0 -1
- data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/collectors_cpu_and_wall_time_worker.c +338 -108
- data/ext/datadog_profiling_native_extension/collectors_discrete_dynamic_sampler.c +422 -0
- data/ext/datadog_profiling_native_extension/collectors_discrete_dynamic_sampler.h +101 -0
- data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/collectors_dynamic_sampling_rate.c +22 -14
- data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/collectors_dynamic_sampling_rate.h +4 -0
- data/ext/datadog_profiling_native_extension/collectors_gc_profiling_helper.c +156 -0
- data/ext/datadog_profiling_native_extension/collectors_gc_profiling_helper.h +5 -0
- data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/collectors_idle_sampling_helper.c +3 -0
- data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/collectors_stack.c +111 -118
- data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/collectors_stack.h +11 -4
- data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/collectors_thread_context.c +545 -144
- data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/collectors_thread_context.h +3 -2
- data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/extconf.rb +68 -17
- data/ext/datadog_profiling_native_extension/heap_recorder.c +1047 -0
- data/ext/datadog_profiling_native_extension/heap_recorder.h +166 -0
- data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/helpers.h +6 -0
- data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/http_transport.c +60 -32
- data/ext/datadog_profiling_native_extension/libdatadog_helpers.c +62 -0
- data/ext/datadog_profiling_native_extension/libdatadog_helpers.h +42 -0
- data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/native_extension_helpers.rb +50 -4
- data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/private_vm_api_access.c +155 -32
- data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/private_vm_api_access.h +16 -0
- data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/profiling.c +19 -3
- data/ext/datadog_profiling_native_extension/ruby_helpers.c +267 -0
- data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/ruby_helpers.h +33 -0
- data/ext/datadog_profiling_native_extension/stack_recorder.c +1040 -0
- data/ext/datadog_profiling_native_extension/stack_recorder.h +27 -0
- data/ext/datadog_profiling_native_extension/time_helpers.c +53 -0
- data/ext/datadog_profiling_native_extension/time_helpers.h +26 -0
- 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 +21 -2
- data/lib/datadog/appsec/configuration/settings.rb +167 -189
- data/lib/datadog/appsec/configuration.rb +0 -79
- data/lib/datadog/appsec/contrib/auto_instrument.rb +2 -4
- data/lib/datadog/appsec/contrib/devise/event.rb +57 -0
- data/lib/datadog/appsec/contrib/devise/ext.rb +13 -0
- data/lib/datadog/appsec/contrib/devise/integration.rb +42 -0
- data/lib/datadog/appsec/contrib/devise/patcher/authenticatable_patch.rb +76 -0
- data/lib/datadog/appsec/contrib/devise/patcher/registration_controller_patch.rb +54 -0
- data/lib/datadog/appsec/contrib/devise/patcher.rb +45 -0
- data/lib/datadog/appsec/contrib/devise/resource.rb +35 -0
- data/lib/datadog/appsec/contrib/devise/tracking.rb +57 -0
- data/lib/datadog/appsec/contrib/rack/ext.rb +2 -1
- 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 +3 -8
- data/lib/datadog/appsec/contrib/rack/reactive/request_body.rb +3 -6
- data/lib/datadog/appsec/contrib/rack/reactive/response.rb +3 -6
- data/lib/datadog/appsec/contrib/rack/request_body_middleware.rb +3 -2
- data/lib/datadog/appsec/contrib/rack/request_middleware.rb +77 -27
- data/lib/datadog/appsec/contrib/rails/ext.rb +3 -2
- data/lib/datadog/appsec/contrib/rails/framework.rb +1 -3
- data/lib/datadog/appsec/contrib/rails/gateway/watcher.rb +3 -2
- data/lib/datadog/appsec/contrib/rails/patcher.rb +17 -11
- data/lib/datadog/appsec/contrib/rails/reactive/action.rb +3 -6
- data/lib/datadog/appsec/contrib/sinatra/ext.rb +2 -1
- data/lib/datadog/appsec/contrib/sinatra/framework.rb +1 -3
- 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 +3 -6
- data/lib/datadog/appsec/event.rb +106 -50
- data/lib/datadog/appsec/extensions.rb +1 -130
- data/lib/datadog/appsec/monitor/gateway/watcher.rb +3 -3
- data/lib/datadog/appsec/monitor/reactive/set_user.rb +3 -6
- data/lib/datadog/appsec/processor/actions.rb +49 -0
- data/lib/datadog/appsec/processor/rule_loader.rb +60 -0
- data/lib/datadog/appsec/processor/rule_merger.rb +22 -2
- data/lib/datadog/appsec/processor.rb +35 -7
- data/lib/datadog/appsec/rate_limiter.rb +1 -1
- data/lib/datadog/appsec/remote.rb +17 -11
- data/lib/datadog/appsec/response.rb +82 -4
- data/lib/datadog/appsec/sample_rate.rb +21 -0
- data/lib/datadog/appsec.rb +3 -4
- data/lib/datadog/auto_instrument.rb +3 -0
- data/lib/datadog/core/backport.rb +51 -0
- data/lib/datadog/core/configuration/agent_settings_resolver.rb +38 -29
- data/lib/datadog/core/configuration/base.rb +6 -16
- data/lib/datadog/core/configuration/components.rb +20 -7
- data/lib/datadog/core/configuration/ext.rb +28 -5
- data/lib/datadog/core/configuration/option.rb +271 -21
- data/lib/datadog/core/configuration/option_definition.rb +73 -32
- data/lib/datadog/core/configuration/options.rb +27 -15
- data/lib/datadog/core/configuration/settings.rb +398 -119
- data/lib/datadog/core/configuration.rb +24 -4
- data/lib/datadog/core/diagnostics/environment_logger.rb +132 -235
- data/lib/datadog/core/environment/class_count.rb +6 -6
- data/lib/datadog/core/environment/execution.rb +103 -0
- data/lib/datadog/core/environment/ext.rb +13 -11
- data/lib/datadog/core/environment/git.rb +25 -0
- data/lib/datadog/core/environment/identity.rb +18 -48
- data/lib/datadog/core/environment/platform.rb +7 -1
- data/lib/datadog/core/environment/variable_helpers.rb +0 -69
- data/lib/datadog/core/environment/yjit.rb +58 -0
- data/lib/datadog/core/error.rb +1 -0
- data/lib/datadog/core/git/ext.rb +6 -23
- data/lib/datadog/core/logging/ext.rb +3 -1
- data/lib/datadog/core/metrics/ext.rb +7 -5
- data/lib/datadog/core/remote/client/capabilities.rb +7 -2
- data/lib/datadog/core/remote/client.rb +3 -0
- data/lib/datadog/core/remote/component.rb +52 -48
- data/lib/datadog/core/remote/configuration/content.rb +28 -1
- data/lib/datadog/core/remote/configuration/repository.rb +3 -1
- data/lib/datadog/core/remote/ext.rb +2 -1
- data/lib/datadog/core/remote/negotiation.rb +20 -7
- data/lib/datadog/core/remote/tie/tracing.rb +39 -0
- data/lib/datadog/core/remote/tie.rb +27 -0
- 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 +11 -5
- data/lib/datadog/core/runtime/ext.rb +22 -12
- data/lib/datadog/core/runtime/metrics.rb +43 -0
- data/lib/datadog/core/telemetry/client.rb +28 -10
- data/lib/datadog/core/telemetry/emitter.rb +9 -11
- data/lib/datadog/core/telemetry/event.rb +250 -44
- data/lib/datadog/core/telemetry/ext.rb +8 -1
- data/lib/datadog/core/telemetry/heartbeat.rb +3 -7
- data/lib/datadog/core/telemetry/http/ext.rb +13 -8
- data/lib/datadog/core/telemetry/http/response.rb +4 -0
- data/lib/datadog/core/telemetry/http/transport.rb +10 -3
- data/lib/datadog/core/telemetry/request.rb +59 -0
- data/lib/datadog/core/transport/ext.rb +49 -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/utils/duration.rb +52 -0
- data/lib/datadog/core/utils/hash.rb +47 -0
- data/lib/datadog/core/utils/network.rb +1 -1
- data/lib/datadog/core/utils/safe_dup.rb +27 -20
- data/lib/datadog/core/utils/url.rb +25 -0
- data/lib/datadog/core/utils.rb +1 -1
- data/lib/datadog/core/workers/async.rb +3 -2
- data/lib/datadog/core/workers/polling.rb +2 -2
- data/lib/datadog/kit/appsec/events.rb +139 -89
- data/lib/datadog/kit/enable_core_dumps.rb +5 -6
- data/lib/datadog/kit/identity.rb +80 -65
- data/lib/datadog/opentelemetry/api/context.rb +10 -3
- data/lib/datadog/opentelemetry/sdk/propagator.rb +5 -3
- data/lib/datadog/opentelemetry/sdk/span_processor.rb +48 -5
- data/lib/datadog/opentelemetry/sdk/trace/span.rb +167 -0
- data/lib/datadog/opentelemetry/trace.rb +58 -0
- data/lib/datadog/opentelemetry.rb +4 -0
- data/lib/datadog/opentracer/text_map_propagator.rb +2 -1
- data/lib/datadog/opentracer.rb +9 -0
- data/lib/datadog/profiling/collectors/code_provenance.rb +10 -4
- data/lib/datadog/profiling/collectors/cpu_and_wall_time_worker.rb +43 -20
- data/lib/datadog/profiling/collectors/idle_sampling_helper.rb +3 -1
- data/lib/datadog/profiling/collectors/info.rb +101 -0
- data/lib/datadog/profiling/collectors/thread_context.rb +17 -2
- data/lib/datadog/profiling/component.rb +248 -97
- data/lib/datadog/profiling/exporter.rb +26 -5
- data/lib/datadog/profiling/ext.rb +2 -12
- data/lib/datadog/profiling/flush.rb +10 -5
- data/lib/datadog/profiling/http_transport.rb +23 -6
- data/lib/datadog/profiling/load_native_extension.rb +25 -6
- data/lib/datadog/profiling/native_extension.rb +1 -22
- data/lib/datadog/profiling/profiler.rb +36 -13
- data/lib/datadog/profiling/scheduler.rb +20 -15
- data/lib/datadog/profiling/stack_recorder.rb +19 -4
- data/lib/datadog/profiling/tag_builder.rb +5 -0
- data/lib/datadog/profiling/tasks/exec.rb +3 -3
- data/lib/datadog/profiling/tasks/help.rb +3 -3
- data/lib/datadog/profiling.rb +28 -79
- data/lib/datadog/tracing/component.rb +70 -11
- data/lib/datadog/tracing/configuration/agent_settings_resolver.rb +13 -0
- data/lib/datadog/tracing/configuration/dynamic/option.rb +71 -0
- data/lib/datadog/tracing/configuration/dynamic.rb +64 -0
- data/lib/datadog/tracing/configuration/ext.rb +40 -33
- data/lib/datadog/tracing/configuration/http.rb +74 -0
- data/lib/datadog/tracing/configuration/settings.rb +136 -99
- data/lib/datadog/tracing/contrib/action_cable/configuration/settings.rb +10 -6
- data/lib/datadog/tracing/contrib/action_cable/ext.rb +21 -18
- data/lib/datadog/tracing/contrib/action_mailer/configuration/settings.rb +10 -6
- data/lib/datadog/tracing/contrib/action_mailer/events/deliver.rb +1 -1
- data/lib/datadog/tracing/contrib/action_mailer/ext.rb +21 -18
- data/lib/datadog/tracing/contrib/action_pack/configuration/settings.rb +10 -7
- data/lib/datadog/tracing/contrib/action_pack/ext.rb +11 -8
- data/lib/datadog/tracing/contrib/action_view/configuration/settings.rb +10 -6
- data/lib/datadog/tracing/contrib/action_view/ext.rb +13 -10
- data/lib/datadog/tracing/contrib/active_job/configuration/settings.rb +14 -7
- data/lib/datadog/tracing/contrib/active_job/ext.rb +26 -23
- data/lib/datadog/tracing/contrib/active_job/log_injection.rb +1 -1
- data/lib/datadog/tracing/contrib/active_job/patcher.rb +1 -1
- data/lib/datadog/tracing/contrib/active_model_serializers/configuration/settings.rb +10 -6
- data/lib/datadog/tracing/contrib/active_model_serializers/ext.rb +13 -10
- data/lib/datadog/tracing/contrib/active_record/configuration/resolver.rb +29 -15
- data/lib/datadog/tracing/contrib/active_record/configuration/settings.rb +10 -7
- data/lib/datadog/tracing/contrib/active_record/events/sql.rb +2 -6
- data/lib/datadog/tracing/contrib/active_record/ext.rb +18 -15
- data/lib/datadog/tracing/contrib/active_record/utils.rb +1 -1
- data/lib/datadog/tracing/contrib/active_support/cache/instrumentation.rb +106 -202
- data/lib/datadog/tracing/contrib/active_support/cache/patcher.rb +3 -0
- data/lib/datadog/tracing/contrib/active_support/configuration/settings.rb +10 -7
- data/lib/datadog/tracing/contrib/active_support/ext.rb +19 -16
- data/lib/datadog/tracing/contrib/analytics.rb +0 -1
- data/lib/datadog/tracing/contrib/aws/configuration/settings.rb +15 -7
- data/lib/datadog/tracing/contrib/aws/ext.rb +38 -24
- data/lib/datadog/tracing/contrib/aws/instrumentation.rb +16 -5
- data/lib/datadog/tracing/contrib/concurrent_ruby/async_patch.rb +20 -0
- data/lib/datadog/tracing/contrib/concurrent_ruby/configuration/settings.rb +3 -2
- data/lib/datadog/tracing/contrib/concurrent_ruby/context_composite_executor_service.rb +14 -14
- data/lib/datadog/tracing/contrib/concurrent_ruby/ext.rb +4 -2
- 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 +19 -2
- data/lib/datadog/tracing/contrib/concurrent_ruby/promises_future_patch.rb +22 -0
- data/lib/datadog/tracing/contrib/configurable.rb +1 -1
- data/lib/datadog/tracing/contrib/configuration/settings.rb +1 -1
- data/lib/datadog/tracing/contrib/dalli/configuration/settings.rb +21 -7
- data/lib/datadog/tracing/contrib/dalli/ext.rb +27 -11
- data/lib/datadog/tracing/contrib/dalli/instrumentation.rb +17 -8
- data/lib/datadog/tracing/contrib/delayed_job/configuration/settings.rb +14 -7
- data/lib/datadog/tracing/contrib/delayed_job/ext.rb +17 -14
- data/lib/datadog/tracing/contrib/elasticsearch/configuration/settings.rb +15 -7
- data/lib/datadog/tracing/contrib/elasticsearch/ext.rb +22 -15
- data/lib/datadog/tracing/contrib/elasticsearch/patcher.rb +104 -99
- data/lib/datadog/tracing/contrib/ethon/configuration/settings.rb +17 -9
- data/lib/datadog/tracing/contrib/ethon/easy_patch.rb +48 -3
- data/lib/datadog/tracing/contrib/ethon/ext.rb +20 -11
- data/lib/datadog/tracing/contrib/ethon/multi_patch.rb +6 -3
- data/lib/datadog/tracing/contrib/excon/configuration/settings.rb +20 -10
- data/lib/datadog/tracing/contrib/excon/ext.rb +17 -8
- data/lib/datadog/tracing/contrib/excon/middleware.rb +25 -5
- data/lib/datadog/tracing/contrib/ext.rb +26 -1
- data/lib/datadog/tracing/contrib/extensions.rb +38 -2
- data/lib/datadog/tracing/contrib/faraday/configuration/settings.rb +27 -10
- data/lib/datadog/tracing/contrib/faraday/ext.rb +17 -8
- data/lib/datadog/tracing/contrib/faraday/middleware.rb +22 -6
- data/lib/datadog/tracing/contrib/grape/configuration/settings.rb +9 -6
- data/lib/datadog/tracing/contrib/grape/ext.rb +17 -14
- data/lib/datadog/tracing/contrib/graphql/configuration/settings.rb +9 -6
- data/lib/datadog/tracing/contrib/graphql/ext.rb +8 -5
- data/lib/datadog/tracing/contrib/grpc/configuration/settings.rb +40 -9
- data/lib/datadog/tracing/contrib/grpc/datadog_interceptor/client.rb +39 -20
- data/lib/datadog/tracing/contrib/grpc/datadog_interceptor/server.rb +37 -18
- data/lib/datadog/tracing/contrib/grpc/datadog_interceptor.rb +0 -4
- data/lib/datadog/tracing/contrib/grpc/ext.rb +17 -13
- data/lib/datadog/tracing/contrib/grpc/formatting.rb +127 -0
- data/lib/datadog/tracing/contrib/hanami/configuration/settings.rb +3 -2
- data/lib/datadog/tracing/contrib/hanami/ext.rb +10 -8
- data/lib/datadog/tracing/contrib/http/circuit_breaker.rb +5 -8
- data/lib/datadog/tracing/contrib/http/configuration/settings.rb +34 -11
- data/lib/datadog/tracing/contrib/http/distributed/fetcher.rb +2 -2
- data/lib/datadog/tracing/contrib/http/ext.rb +17 -9
- data/lib/datadog/tracing/contrib/http/instrumentation.rb +27 -7
- data/lib/datadog/tracing/contrib/httpclient/configuration/settings.rb +34 -11
- data/lib/datadog/tracing/contrib/httpclient/ext.rb +18 -9
- data/lib/datadog/tracing/contrib/httpclient/instrumentation.rb +22 -5
- data/lib/datadog/tracing/contrib/httprb/configuration/settings.rb +34 -11
- data/lib/datadog/tracing/contrib/httprb/ext.rb +17 -9
- data/lib/datadog/tracing/contrib/httprb/instrumentation.rb +22 -5
- data/lib/datadog/tracing/contrib/kafka/configuration/settings.rb +10 -6
- data/lib/datadog/tracing/contrib/kafka/ext.rb +43 -39
- data/lib/datadog/tracing/contrib/lograge/configuration/settings.rb +3 -2
- data/lib/datadog/tracing/contrib/lograge/ext.rb +3 -1
- data/lib/datadog/tracing/contrib/lograge/instrumentation.rb +2 -17
- data/lib/datadog/tracing/contrib/mongodb/configuration/settings.rb +15 -7
- data/lib/datadog/tracing/contrib/mongodb/ext.rb +21 -16
- data/lib/datadog/tracing/contrib/mongodb/subscribers.rb +16 -5
- data/lib/datadog/tracing/contrib/mysql2/configuration/settings.rb +22 -14
- data/lib/datadog/tracing/contrib/mysql2/ext.rb +16 -10
- data/lib/datadog/tracing/contrib/mysql2/instrumentation.rb +22 -7
- data/lib/datadog/tracing/contrib/opensearch/configuration/settings.rb +53 -0
- data/lib/datadog/tracing/contrib/opensearch/ext.rb +38 -0
- data/lib/datadog/tracing/contrib/opensearch/integration.rb +44 -0
- data/lib/datadog/tracing/contrib/opensearch/patcher.rb +135 -0
- data/lib/datadog/tracing/contrib/opensearch/quantize.rb +81 -0
- data/lib/datadog/tracing/contrib/pg/configuration/settings.rb +23 -14
- data/lib/datadog/tracing/contrib/pg/ext.rb +23 -19
- data/lib/datadog/tracing/contrib/pg/instrumentation.rb +49 -9
- data/lib/datadog/tracing/contrib/presto/configuration/settings.rb +15 -7
- data/lib/datadog/tracing/contrib/presto/ext.rb +26 -20
- data/lib/datadog/tracing/contrib/presto/instrumentation.rb +14 -5
- data/lib/datadog/tracing/contrib/propagation/sql_comment/ext.rb +12 -10
- data/lib/datadog/tracing/contrib/propagation/sql_comment.rb +1 -1
- data/lib/datadog/tracing/contrib/qless/configuration/settings.rb +13 -8
- data/lib/datadog/tracing/contrib/qless/ext.rb +15 -12
- data/lib/datadog/tracing/contrib/que/configuration/settings.rb +22 -12
- data/lib/datadog/tracing/contrib/que/ext.rb +1 -0
- data/lib/datadog/tracing/contrib/racecar/configuration/settings.rb +10 -7
- data/lib/datadog/tracing/contrib/racecar/event.rb +5 -5
- data/lib/datadog/tracing/contrib/racecar/ext.rb +21 -18
- data/lib/datadog/tracing/contrib/rack/configuration/settings.rb +17 -12
- data/lib/datadog/tracing/contrib/rack/ext.rb +19 -16
- data/lib/datadog/tracing/contrib/rack/header_collection.rb +3 -0
- data/lib/datadog/tracing/contrib/rack/header_tagging.rb +63 -0
- data/lib/datadog/tracing/contrib/rack/middlewares.rb +16 -50
- data/lib/datadog/tracing/contrib/rails/auto_instrument_railtie.rb +0 -2
- data/lib/datadog/tracing/contrib/rails/configuration/settings.rb +20 -15
- data/lib/datadog/tracing/contrib/rails/ext.rb +8 -5
- data/lib/datadog/tracing/contrib/rails/log_injection.rb +7 -10
- data/lib/datadog/tracing/contrib/rails/patcher.rb +10 -41
- data/lib/datadog/tracing/contrib/rails/railtie.rb +3 -3
- data/lib/datadog/tracing/contrib/rake/configuration/settings.rb +14 -10
- data/lib/datadog/tracing/contrib/rake/ext.rb +15 -12
- data/lib/datadog/tracing/contrib/redis/configuration/settings.rb +18 -9
- data/lib/datadog/tracing/contrib/redis/ext.rb +23 -15
- data/lib/datadog/tracing/contrib/redis/instrumentation.rb +5 -40
- data/lib/datadog/tracing/contrib/redis/patcher.rb +34 -21
- data/lib/datadog/tracing/contrib/redis/tags.rb +16 -7
- data/lib/datadog/tracing/contrib/redis/trace_middleware.rb +46 -33
- data/lib/datadog/tracing/contrib/resque/configuration/settings.rb +14 -7
- data/lib/datadog/tracing/contrib/resque/ext.rb +10 -7
- data/lib/datadog/tracing/contrib/rest_client/configuration/settings.rb +17 -9
- data/lib/datadog/tracing/contrib/rest_client/ext.rb +16 -8
- data/lib/datadog/tracing/contrib/rest_client/request_patch.rb +25 -5
- data/lib/datadog/tracing/contrib/roda/configuration/settings.rb +10 -6
- data/lib/datadog/tracing/contrib/roda/ext.rb +1 -0
- data/lib/datadog/tracing/contrib/semantic_logger/configuration/settings.rb +3 -2
- data/lib/datadog/tracing/contrib/semantic_logger/ext.rb +3 -1
- data/lib/datadog/tracing/contrib/semantic_logger/instrumentation.rb +4 -20
- data/lib/datadog/tracing/contrib/sequel/configuration/settings.rb +10 -6
- data/lib/datadog/tracing/contrib/sequel/ext.rb +11 -8
- data/lib/datadog/tracing/contrib/sequel/utils.rb +7 -7
- data/lib/datadog/tracing/contrib/shoryuken/configuration/settings.rb +15 -8
- data/lib/datadog/tracing/contrib/shoryuken/ext.rb +15 -12
- data/lib/datadog/tracing/contrib/sidekiq/configuration/settings.rb +19 -11
- data/lib/datadog/tracing/contrib/sidekiq/ext.rb +33 -30
- data/lib/datadog/tracing/contrib/sinatra/configuration/settings.rb +12 -9
- data/lib/datadog/tracing/contrib/sinatra/env.rb +0 -17
- data/lib/datadog/tracing/contrib/sinatra/ext.rb +22 -19
- data/lib/datadog/tracing/contrib/sinatra/tracer_middleware.rb +3 -14
- data/lib/datadog/tracing/contrib/sneakers/configuration/settings.rb +15 -8
- data/lib/datadog/tracing/contrib/sneakers/ext.rb +2 -0
- data/lib/datadog/tracing/contrib/sneakers/tracer.rb +1 -1
- data/lib/datadog/tracing/contrib/span_attribute_schema.rb +74 -10
- data/lib/datadog/tracing/contrib/stripe/configuration/settings.rb +10 -6
- data/lib/datadog/tracing/contrib/stripe/ext.rb +1 -0
- data/lib/datadog/tracing/contrib/sucker_punch/configuration/settings.rb +10 -6
- data/lib/datadog/tracing/contrib/sucker_punch/ext.rb +16 -13
- data/lib/datadog/tracing/contrib/trilogy/configuration/settings.rb +58 -0
- data/lib/datadog/tracing/contrib/trilogy/ext.rb +27 -0
- data/lib/datadog/tracing/contrib/trilogy/instrumentation.rb +94 -0
- data/lib/datadog/tracing/contrib/trilogy/integration.rb +43 -0
- data/lib/datadog/{ci/contrib/cucumber → tracing/contrib/trilogy}/patcher.rb +10 -6
- data/lib/datadog/tracing/contrib/utils/database.rb +5 -3
- data/lib/datadog/tracing/contrib/utils/quantization/http.rb +11 -11
- data/lib/datadog/tracing/contrib.rb +2 -0
- data/lib/datadog/tracing/correlation.rb +29 -12
- data/lib/datadog/tracing/diagnostics/environment_logger.rb +165 -0
- data/lib/datadog/tracing/diagnostics/ext.rb +21 -19
- data/lib/datadog/tracing/distributed/b3_multi.rb +2 -2
- data/lib/datadog/tracing/distributed/b3_single.rb +1 -1
- data/lib/datadog/tracing/distributed/datadog.rb +0 -1
- data/lib/datadog/tracing/distributed/propagation.rb +35 -34
- data/lib/datadog/tracing/distributed/trace_context.rb +52 -17
- data/lib/datadog/tracing/metadata/ext.rb +9 -6
- data/lib/datadog/tracing/metadata/tagging.rb +3 -3
- data/lib/datadog/tracing/remote.rb +78 -0
- data/lib/datadog/tracing/sampling/matcher.rb +23 -3
- data/lib/datadog/tracing/sampling/rule.rb +7 -2
- data/lib/datadog/tracing/sampling/rule_sampler.rb +31 -0
- data/lib/datadog/tracing/span_operation.rb +3 -15
- data/lib/datadog/tracing/sync_writer.rb +3 -3
- data/lib/datadog/tracing/trace_digest.rb +31 -0
- data/lib/datadog/tracing/trace_operation.rb +17 -5
- data/lib/datadog/tracing/trace_segment.rb +5 -2
- data/lib/datadog/tracing/tracer.rb +12 -1
- 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 +125 -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 +240 -0
- data/lib/datadog/tracing/transport/traces.rb +224 -0
- data/lib/datadog/tracing/workers/trace_writer.rb +6 -4
- data/lib/datadog/tracing/workers.rb +4 -2
- data/lib/datadog/tracing/writer.rb +5 -2
- data/lib/datadog/tracing.rb +8 -2
- data/lib/ddtrace/transport/ext.rb +22 -14
- data/lib/ddtrace/version.rb +9 -12
- data/lib/ddtrace.rb +1 -1
- metadata +157 -139
- data/ext/ddtrace_profiling_native_extension/libdatadog_helpers.h +0 -25
- data/ext/ddtrace_profiling_native_extension/ruby_helpers.c +0 -110
- data/ext/ddtrace_profiling_native_extension/stack_recorder.c +0 -591
- data/ext/ddtrace_profiling_native_extension/stack_recorder.h +0 -14
- data/ext/ddtrace_profiling_native_extension/time_helpers.c +0 -17
- data/ext/ddtrace_profiling_native_extension/time_helpers.h +0 -10
- data/lib/datadog/ci/configuration/components.rb +0 -32
- data/lib/datadog/ci/configuration/settings.rb +0 -53
- data/lib/datadog/ci/contrib/cucumber/configuration/settings.rb +0 -33
- data/lib/datadog/ci/contrib/cucumber/ext.rb +0 -20
- 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/rspec/configuration/settings.rb +0 -33
- data/lib/datadog/ci/contrib/rspec/example.rb +0 -68
- data/lib/datadog/ci/contrib/rspec/ext.rb +0 -19
- 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 -20
- 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/telemetry/collector.rb +0 -231
- data/lib/datadog/core/telemetry/v1/app_event.rb +0 -52
- data/lib/datadog/core/telemetry/v1/application.rb +0 -92
- data/lib/datadog/core/telemetry/v1/configuration.rb +0 -25
- data/lib/datadog/core/telemetry/v1/dependency.rb +0 -43
- data/lib/datadog/core/telemetry/v1/host.rb +0 -59
- data/lib/datadog/core/telemetry/v1/integration.rb +0 -64
- data/lib/datadog/core/telemetry/v1/product.rb +0 -36
- data/lib/datadog/core/telemetry/v1/telemetry_request.rb +0 -106
- 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 -268
- 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/datadog/tracing/contrib/sinatra/headers.rb +0 -35
- 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 -198
- data/lib/ddtrace/transport/traces.rb +0 -216
- /data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/collectors_idle_sampling_helper.h +0 -0
- /data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/setup_signal_handler.c +0 -0
- /data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/setup_signal_handler.h +0 -0
|
@@ -81,18 +81,23 @@ module Datadog
|
|
|
81
81
|
configuration = self.configuration
|
|
82
82
|
yield(configuration)
|
|
83
83
|
|
|
84
|
-
|
|
84
|
+
built_components = false
|
|
85
|
+
|
|
86
|
+
components = safely_synchronize do |write_components|
|
|
85
87
|
write_components.call(
|
|
86
88
|
if components?
|
|
87
89
|
replace_components!(configuration, @components)
|
|
88
90
|
else
|
|
89
91
|
components = build_components(configuration)
|
|
90
|
-
|
|
92
|
+
built_components = true
|
|
91
93
|
components
|
|
92
94
|
end
|
|
93
95
|
)
|
|
94
96
|
end
|
|
95
97
|
|
|
98
|
+
# Should only be called the first time components are built
|
|
99
|
+
components.telemetry.started! if built_components
|
|
100
|
+
|
|
96
101
|
configuration
|
|
97
102
|
end
|
|
98
103
|
|
|
@@ -192,9 +197,20 @@ module Datadog
|
|
|
192
197
|
current_components = COMPONENTS_READ_LOCK.synchronize { defined?(@components) && @components }
|
|
193
198
|
return current_components if current_components || !allow_initialization
|
|
194
199
|
|
|
195
|
-
|
|
196
|
-
|
|
200
|
+
built_components = false
|
|
201
|
+
|
|
202
|
+
components = safely_synchronize do |write_components|
|
|
203
|
+
if defined?(@components) && @components
|
|
204
|
+
@components
|
|
205
|
+
else
|
|
206
|
+
built_components = true
|
|
207
|
+
write_components.call(build_components(configuration))
|
|
208
|
+
end
|
|
197
209
|
end
|
|
210
|
+
|
|
211
|
+
# Should only be called the first time components are built
|
|
212
|
+
components.telemetry.started! if built_components && components && components.telemetry
|
|
213
|
+
components
|
|
198
214
|
end
|
|
199
215
|
|
|
200
216
|
private
|
|
@@ -273,6 +289,10 @@ module Datadog
|
|
|
273
289
|
def handle_interrupt_shutdown!
|
|
274
290
|
logger = Datadog.logger
|
|
275
291
|
shutdown_thread = Thread.new { shutdown! }
|
|
292
|
+
unless Gem::Version.new(RUBY_VERSION) < Gem::Version.new('2.3')
|
|
293
|
+
shutdown_thread.name = Datadog::Core::Configuration.name
|
|
294
|
+
end
|
|
295
|
+
|
|
276
296
|
print_message_treshold_seconds = 0.2
|
|
277
297
|
|
|
278
298
|
slow_shutdown = shutdown_thread.join(print_message_treshold_seconds).nil?
|
|
@@ -1,284 +1,181 @@
|
|
|
1
|
-
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
2
3
|
require 'json'
|
|
3
4
|
require 'rbconfig'
|
|
5
|
+
require 'time'
|
|
4
6
|
|
|
5
7
|
module Datadog
|
|
6
8
|
module Core
|
|
7
9
|
module Diagnostics
|
|
8
|
-
#
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
class << self
|
|
13
|
-
# Outputs environment information to {Datadog.logger}.
|
|
14
|
-
# Executes only once for the lifetime of the program.
|
|
15
|
-
def log!(transport_responses)
|
|
16
|
-
return if (defined?(@executed) && @executed) || !log?
|
|
17
|
-
|
|
18
|
-
@executed = true
|
|
19
|
-
|
|
20
|
-
data = EnvironmentCollector.new.collect!(transport_responses)
|
|
21
|
-
data.reject! { |_, v| v.nil? } # Remove empty values from hash output
|
|
22
|
-
|
|
23
|
-
log_environment!(data.to_json)
|
|
24
|
-
log_error!('Agent Error'.freeze, data[:agent_error]) if data[:agent_error]
|
|
25
|
-
rescue => e
|
|
26
|
-
Datadog.logger.warn("Failed to collect environment information: #{e} Location: #{Array(e.backtrace).first}")
|
|
27
|
-
end
|
|
28
|
-
|
|
29
|
-
private
|
|
30
|
-
|
|
31
|
-
def log_environment!(line)
|
|
32
|
-
Datadog.logger.info("DATADOG CONFIGURATION - #{line}")
|
|
33
|
-
end
|
|
34
|
-
|
|
35
|
-
def log_error!(type, error)
|
|
36
|
-
Datadog.logger.warn("DATADOG DIAGNOSTIC - #{type}: #{error}")
|
|
37
|
-
end
|
|
38
|
-
|
|
39
|
-
# Are we logging the environment data?
|
|
40
|
-
def log?
|
|
41
|
-
startup_logs_enabled = Datadog.configuration.diagnostics.startup_logs.enabled
|
|
42
|
-
if startup_logs_enabled.nil?
|
|
43
|
-
!repl? # Suppress logs if we running in a REPL
|
|
44
|
-
else
|
|
45
|
-
startup_logs_enabled
|
|
46
|
-
end
|
|
47
|
-
end
|
|
48
|
-
|
|
49
|
-
REPL_PROGRAM_NAMES = %w[irb pry].freeze
|
|
50
|
-
|
|
51
|
-
def repl?
|
|
52
|
-
REPL_PROGRAM_NAMES.include?($PROGRAM_NAME)
|
|
53
|
-
end
|
|
54
|
-
end
|
|
55
|
-
end
|
|
56
|
-
|
|
57
|
-
# Collects environment information for diagnostic logging
|
|
58
|
-
class EnvironmentCollector
|
|
59
|
-
# @return [String] current time in ISO8601 format
|
|
60
|
-
def date
|
|
61
|
-
DateTime.now.iso8601
|
|
62
|
-
end
|
|
63
|
-
|
|
64
|
-
# Best portable guess of OS information.
|
|
65
|
-
# @return [String] platform string
|
|
66
|
-
def os_name
|
|
67
|
-
RbConfig::CONFIG['host'.freeze]
|
|
10
|
+
# Base class for EnvironmentLoggers - should allow for easy reporting by users to Datadog support.
|
|
11
|
+
module EnvironmentLogging
|
|
12
|
+
def log_configuration!(prefix, data)
|
|
13
|
+
logger.info("DATADOG CONFIGURATION - #{prefix} - #{data}")
|
|
68
14
|
end
|
|
69
15
|
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
DDTrace::VERSION::STRING
|
|
16
|
+
def log_error!(prefix, type, error)
|
|
17
|
+
logger.warn("DATADOG ERROR - #{prefix} - #{type}: #{error}")
|
|
73
18
|
end
|
|
74
19
|
|
|
75
|
-
|
|
76
|
-
def lang
|
|
77
|
-
Core::Environment::Ext::LANG
|
|
78
|
-
end
|
|
20
|
+
protected
|
|
79
21
|
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
# @return [String]
|
|
83
|
-
def lang_version
|
|
84
|
-
Core::Environment::Ext::LANG_VERSION
|
|
22
|
+
def logger
|
|
23
|
+
Datadog.logger
|
|
85
24
|
end
|
|
86
25
|
|
|
87
|
-
#
|
|
88
|
-
def
|
|
89
|
-
|
|
90
|
-
|
|
26
|
+
# If logger should log and hasn't logged already, then output environment configuration and possible errors.
|
|
27
|
+
def log_once!
|
|
28
|
+
# Check if already been executed
|
|
29
|
+
return false if (defined?(@executed) && @executed) || !log?
|
|
91
30
|
|
|
92
|
-
|
|
93
|
-
def enabled
|
|
94
|
-
Datadog.configuration.tracing.enabled
|
|
95
|
-
end
|
|
31
|
+
yield if block_given?
|
|
96
32
|
|
|
97
|
-
|
|
98
|
-
def service
|
|
99
|
-
Datadog.configuration.service
|
|
33
|
+
@executed = true
|
|
100
34
|
end
|
|
101
35
|
|
|
102
|
-
#
|
|
103
|
-
def
|
|
104
|
-
Datadog.configuration.
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
transport = Tracing.send(:tracer).writer.transport
|
|
111
|
-
|
|
112
|
-
# return `nil` with IO transport
|
|
113
|
-
return unless transport.respond_to?(:client)
|
|
114
|
-
|
|
115
|
-
adapter = transport.client.api.adapter
|
|
116
|
-
adapter.url
|
|
36
|
+
# Are we logging the environment data?
|
|
37
|
+
def log?
|
|
38
|
+
startup_logs_enabled = Datadog.configuration.diagnostics.startup_logs.enabled
|
|
39
|
+
if startup_logs_enabled.nil?
|
|
40
|
+
!repl? && !rspec? # Suppress logs if we are running in a REPL or rspec
|
|
41
|
+
else
|
|
42
|
+
startup_logs_enabled
|
|
43
|
+
end
|
|
117
44
|
end
|
|
118
45
|
|
|
119
|
-
|
|
120
|
-
# @return [String] concatenated list of transport errors
|
|
121
|
-
def agent_error(transport_responses)
|
|
122
|
-
error_responses = transport_responses.reject(&:ok?)
|
|
46
|
+
REPL_PROGRAM_NAMES = %w[irb pry].freeze
|
|
123
47
|
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
error_responses.map(&:inspect).join(','.freeze)
|
|
127
|
-
end
|
|
128
|
-
|
|
129
|
-
# @return [Boolean, nil] debug mode enabled in configuration
|
|
130
|
-
def debug
|
|
131
|
-
!!Datadog.configuration.diagnostics.debug
|
|
48
|
+
def repl?
|
|
49
|
+
REPL_PROGRAM_NAMES.include?($PROGRAM_NAME)
|
|
132
50
|
end
|
|
133
51
|
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
!!Datadog.configuration.tracing.analytics.enabled
|
|
52
|
+
def rspec?
|
|
53
|
+
$PROGRAM_NAME.end_with?('rspec')
|
|
137
54
|
end
|
|
55
|
+
end
|
|
138
56
|
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
return nil unless sampler
|
|
57
|
+
# Collects and logs Core diagnostic information
|
|
58
|
+
module EnvironmentLogger
|
|
59
|
+
extend EnvironmentLogging
|
|
143
60
|
|
|
144
|
-
|
|
61
|
+
def self.collect_and_log!(extra_fields = nil)
|
|
62
|
+
log_once! do
|
|
63
|
+
data = EnvironmentCollector.collect_config!
|
|
64
|
+
data = data.merge(extra_fields) if extra_fields
|
|
65
|
+
log_configuration!('CORE', data.to_json)
|
|
66
|
+
end
|
|
67
|
+
rescue => e
|
|
68
|
+
logger.warn("Failed to collect core environment information: #{e} Location: #{Array(e.backtrace).first}")
|
|
145
69
|
end
|
|
70
|
+
end
|
|
146
71
|
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
#
|
|
152
|
-
# @return [Hash, nil] sample rules configured
|
|
153
|
-
def sampling_rules
|
|
154
|
-
sampler = Datadog.configuration.tracing.sampler
|
|
155
|
-
return nil unless sampler.is_a?(Tracing::Sampling::PrioritySampler) &&
|
|
156
|
-
sampler.priority_sampler.is_a?(Tracing::Sampling::RuleSampler)
|
|
157
|
-
|
|
158
|
-
sampler.priority_sampler.rules.map do |rule|
|
|
159
|
-
next unless rule.is_a?(Tracing::Sampling::SimpleRule)
|
|
160
|
-
|
|
72
|
+
# Collects environment information for Core diagnostic logging
|
|
73
|
+
module EnvironmentCollector
|
|
74
|
+
class << self
|
|
75
|
+
def collect_config!
|
|
161
76
|
{
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
77
|
+
date: date,
|
|
78
|
+
os_name: os_name,
|
|
79
|
+
version: version,
|
|
80
|
+
lang: lang,
|
|
81
|
+
lang_version: lang_version,
|
|
82
|
+
env: env,
|
|
83
|
+
service: service,
|
|
84
|
+
dd_version: dd_version,
|
|
85
|
+
debug: debug,
|
|
86
|
+
tags: tags,
|
|
87
|
+
runtime_metrics_enabled: runtime_metrics_enabled,
|
|
88
|
+
vm: vm,
|
|
89
|
+
health_metrics_enabled: health_metrics_enabled
|
|
165
90
|
}
|
|
166
|
-
end
|
|
167
|
-
end
|
|
168
|
-
|
|
169
|
-
# @return [Hash, nil] concatenated list of global tracer tags configured
|
|
170
|
-
def tags
|
|
171
|
-
tags = Datadog.configuration.tags
|
|
172
|
-
return nil if tags.empty?
|
|
91
|
+
end
|
|
173
92
|
|
|
174
|
-
|
|
175
|
-
|
|
93
|
+
# @return [String] current time in ISO8601 format
|
|
94
|
+
def date
|
|
95
|
+
Time.now.utc.iso8601
|
|
96
|
+
end
|
|
176
97
|
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
98
|
+
# Best portable guess of OS information.
|
|
99
|
+
# @return [String] platform string
|
|
100
|
+
def os_name
|
|
101
|
+
RbConfig::CONFIG['host']
|
|
102
|
+
end
|
|
181
103
|
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
def integrations_loaded
|
|
187
|
-
integrations = instrumented_integrations
|
|
188
|
-
return if integrations.empty?
|
|
104
|
+
# @return [String] ddtrace version
|
|
105
|
+
def version
|
|
106
|
+
DDTrace::VERSION::STRING
|
|
107
|
+
end
|
|
189
108
|
|
|
190
|
-
|
|
191
|
-
|
|
109
|
+
# @return [String] "ruby"
|
|
110
|
+
def lang
|
|
111
|
+
Core::Environment::Ext::LANG
|
|
112
|
+
end
|
|
192
113
|
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
# will differ from RUBY_VERSION for non-mri VMs.
|
|
199
|
-
if defined?(RUBY_ENGINE_VERSION)
|
|
200
|
-
"#{RUBY_ENGINE}-#{RUBY_ENGINE_VERSION}"
|
|
201
|
-
else
|
|
202
|
-
# Ruby < 2.3 doesn't support RUBY_ENGINE_VERSION
|
|
203
|
-
"#{RUBY_ENGINE}-#{RUBY_VERSION}"
|
|
114
|
+
# Supported Ruby language version.
|
|
115
|
+
# Will be distinct from VM version for non-MRI environments.
|
|
116
|
+
# @return [String]
|
|
117
|
+
def lang_version
|
|
118
|
+
Core::Environment::Ext::LANG_VERSION
|
|
204
119
|
end
|
|
205
|
-
end
|
|
206
120
|
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
121
|
+
# @return [String] configured application environment
|
|
122
|
+
def env
|
|
123
|
+
Datadog.configuration.env
|
|
124
|
+
end
|
|
211
125
|
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
126
|
+
# @return [String] configured application service name
|
|
127
|
+
def service
|
|
128
|
+
Datadog.configuration.service
|
|
129
|
+
end
|
|
216
130
|
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
131
|
+
# @return [String] configured application version
|
|
132
|
+
def dd_version
|
|
133
|
+
Datadog.configuration.version
|
|
134
|
+
end
|
|
221
135
|
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
136
|
+
# @return [Boolean, nil] debug mode enabled in configuration
|
|
137
|
+
def debug
|
|
138
|
+
!!Datadog.configuration.diagnostics.debug
|
|
139
|
+
end
|
|
225
140
|
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
141
|
+
# @return [Hash, nil] concatenated list of global tracer tags configured
|
|
142
|
+
def tags
|
|
143
|
+
tags = Datadog.configuration.tags
|
|
144
|
+
return nil if tags.empty?
|
|
229
145
|
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
{
|
|
233
|
-
date: date,
|
|
234
|
-
os_name: os_name,
|
|
235
|
-
version: version,
|
|
236
|
-
lang: lang,
|
|
237
|
-
lang_version: lang_version,
|
|
238
|
-
env: env,
|
|
239
|
-
enabled: enabled,
|
|
240
|
-
service: service,
|
|
241
|
-
dd_version: dd_version,
|
|
242
|
-
agent_url: agent_url,
|
|
243
|
-
agent_error: agent_error(transport_responses),
|
|
244
|
-
debug: debug,
|
|
245
|
-
analytics_enabled: analytics_enabled,
|
|
246
|
-
sample_rate: sample_rate,
|
|
247
|
-
sampling_rules: sampling_rules,
|
|
248
|
-
tags: tags,
|
|
249
|
-
runtime_metrics_enabled: runtime_metrics_enabled,
|
|
250
|
-
integrations_loaded: integrations_loaded,
|
|
251
|
-
vm: vm,
|
|
252
|
-
partial_flushing_enabled: partial_flushing_enabled,
|
|
253
|
-
priority_sampling_enabled: priority_sampling_enabled,
|
|
254
|
-
health_metrics_enabled: health_metrics_enabled,
|
|
255
|
-
profiling_enabled: profiling_enabled,
|
|
256
|
-
**instrumented_integrations_settings
|
|
257
|
-
}
|
|
258
|
-
end
|
|
146
|
+
hash_serializer(tags)
|
|
147
|
+
end
|
|
259
148
|
|
|
260
|
-
|
|
149
|
+
# @return [Boolean, nil] runtime metrics enabled in configuration
|
|
150
|
+
def runtime_metrics_enabled
|
|
151
|
+
Datadog.configuration.runtime_metrics.enabled
|
|
152
|
+
end
|
|
261
153
|
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
154
|
+
# Ruby VM name and version.
|
|
155
|
+
# Examples: "ruby-2.7.1", "jruby-9.2.11.1", "truffleruby-20.1.0"
|
|
156
|
+
# @return [String, nil]
|
|
157
|
+
def vm
|
|
158
|
+
# RUBY_ENGINE_VERSION returns the VM version, which
|
|
159
|
+
# will differ from RUBY_VERSION for non-mri VMs.
|
|
160
|
+
if defined?(RUBY_ENGINE_VERSION)
|
|
161
|
+
"#{RUBY_ENGINE}-#{RUBY_ENGINE_VERSION}"
|
|
162
|
+
else
|
|
163
|
+
# Ruby < 2.3 doesn't support RUBY_ENGINE_VERSION
|
|
164
|
+
"#{RUBY_ENGINE}-#{RUBY_VERSION}"
|
|
165
|
+
end
|
|
166
|
+
end
|
|
265
167
|
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
next [] if setting == :tracer # Skip internal Ruby objects
|
|
168
|
+
# @return [Boolean, nil] health metrics enabled in configuration
|
|
169
|
+
def health_metrics_enabled
|
|
170
|
+
!!Datadog.configuration.diagnostics.health_metrics.enabled
|
|
171
|
+
end
|
|
271
172
|
|
|
272
|
-
|
|
273
|
-
# handlers possibly causing errors.
|
|
274
|
-
[[:"integration_#{name}_#{setting}", value.to_s]]
|
|
275
|
-
end
|
|
276
|
-
end.to_h
|
|
277
|
-
end
|
|
173
|
+
private
|
|
278
174
|
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
175
|
+
# Outputs "k1:v1,k2:v2,..."
|
|
176
|
+
def hash_serializer(h)
|
|
177
|
+
h.map { |k, v| "#{k}:#{v}" }.join(',')
|
|
178
|
+
end
|
|
282
179
|
end
|
|
283
180
|
end
|
|
284
181
|
end
|
|
@@ -5,15 +5,15 @@ module Datadog
|
|
|
5
5
|
module Environment
|
|
6
6
|
# Retrieves number of classes from runtime
|
|
7
7
|
module ClassCount
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
def value
|
|
8
|
+
def self.value
|
|
11
9
|
::ObjectSpace.count_objects[:T_CLASS]
|
|
12
10
|
end
|
|
13
11
|
|
|
14
|
-
def available?
|
|
15
|
-
|
|
16
|
-
|
|
12
|
+
def self.available?
|
|
13
|
+
return @class_count_available if defined?(@class_count_available)
|
|
14
|
+
|
|
15
|
+
@class_count_available =
|
|
16
|
+
::ObjectSpace.respond_to?(:count_objects) && ::ObjectSpace.count_objects.key?(:T_CLASS)
|
|
17
17
|
end
|
|
18
18
|
end
|
|
19
19
|
end
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'set'
|
|
4
|
+
|
|
5
|
+
module Datadog
|
|
6
|
+
module Core
|
|
7
|
+
module Environment
|
|
8
|
+
# Provides information about the execution environment on the current process.
|
|
9
|
+
module Execution
|
|
10
|
+
class << self
|
|
11
|
+
# Is this process running in a development environment?
|
|
12
|
+
# This can be used to make decisions about when to enable
|
|
13
|
+
# background systems like worker threads or telemetry.
|
|
14
|
+
def 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))
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
private
|
|
34
|
+
|
|
35
|
+
# Is this process running a test?
|
|
36
|
+
def test?
|
|
37
|
+
rspec? || minitest? || cucumber?
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
# Is this process running inside on a Read–eval–print loop?
|
|
41
|
+
# DEV: REPLs always set the program name to the exact REPL name.
|
|
42
|
+
def repl?
|
|
43
|
+
REPL_PROGRAM_NAMES.include?($PROGRAM_NAME)
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
REPL_PROGRAM_NAMES = %w[irb pry].freeze
|
|
47
|
+
private_constant :REPL_PROGRAM_NAMES
|
|
48
|
+
|
|
49
|
+
# RSpec always runs using the `rspec` file https://github.com/rspec/rspec-core/blob/main/exe/rspec
|
|
50
|
+
def rspec?
|
|
51
|
+
$PROGRAM_NAME.end_with?(RSPEC_PROGRAM_NAME)
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
RSPEC_PROGRAM_NAME = '/rspec'
|
|
55
|
+
private_constant :RSPEC_PROGRAM_NAME
|
|
56
|
+
|
|
57
|
+
# Check if Minitest is present and installed to run.
|
|
58
|
+
def minitest?
|
|
59
|
+
# Minitest >= 5
|
|
60
|
+
(defined?(::Minitest) &&
|
|
61
|
+
::Minitest.class_variable_defined?(:@@installed_at_exit) &&
|
|
62
|
+
::Minitest.class_variable_get(:@@installed_at_exit)) ||
|
|
63
|
+
# Minitest < 5
|
|
64
|
+
(defined?(::Minitest::Unit) &&
|
|
65
|
+
::Minitest::Unit.class_variable_defined?(:@@installed_at_exit) &&
|
|
66
|
+
::Minitest::Unit.class_variable_get(:@@installed_at_exit))
|
|
67
|
+
end
|
|
68
|
+
|
|
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.
|
|
76
|
+
def rails_development?
|
|
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)
|
|
98
|
+
end
|
|
99
|
+
end
|
|
100
|
+
end
|
|
101
|
+
end
|
|
102
|
+
end
|
|
103
|
+
end
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
require_relative '../../../ddtrace/version'
|
|
2
4
|
|
|
3
5
|
module Datadog
|
|
@@ -13,12 +15,12 @@ module Datadog
|
|
|
13
15
|
RUBY_VERSION
|
|
14
16
|
end
|
|
15
17
|
|
|
16
|
-
ENV_API_KEY = 'DD_API_KEY'
|
|
17
|
-
ENV_ENVIRONMENT = 'DD_ENV'
|
|
18
|
-
ENV_SERVICE = 'DD_SERVICE'
|
|
19
|
-
ENV_SITE = 'DD_SITE'
|
|
20
|
-
ENV_TAGS = 'DD_TAGS'
|
|
21
|
-
ENV_VERSION = 'DD_VERSION'
|
|
18
|
+
ENV_API_KEY = 'DD_API_KEY'
|
|
19
|
+
ENV_ENVIRONMENT = 'DD_ENV'
|
|
20
|
+
ENV_SERVICE = 'DD_SERVICE'
|
|
21
|
+
ENV_SITE = 'DD_SITE'
|
|
22
|
+
ENV_TAGS = 'DD_TAGS'
|
|
23
|
+
ENV_VERSION = 'DD_VERSION'
|
|
22
24
|
FALLBACK_SERVICE_NAME =
|
|
23
25
|
begin
|
|
24
26
|
File.basename($PROGRAM_NAME, '.*')
|
|
@@ -26,15 +28,15 @@ module Datadog
|
|
|
26
28
|
'ruby'
|
|
27
29
|
end.freeze
|
|
28
30
|
|
|
29
|
-
LANG = 'ruby'
|
|
31
|
+
LANG = 'ruby'
|
|
30
32
|
LANG_ENGINE = RUBY_ENGINE
|
|
31
|
-
LANG_INTERPRETER = "#{RUBY_ENGINE}-#{RUBY_PLATFORM}"
|
|
33
|
+
LANG_INTERPRETER = "#{RUBY_ENGINE}-#{RUBY_PLATFORM}"
|
|
32
34
|
LANG_PLATFORM = RUBY_PLATFORM
|
|
33
35
|
LANG_VERSION = RUBY_VERSION
|
|
34
36
|
RUBY_ENGINE = ::RUBY_ENGINE # e.g. 'ruby', 'jruby', 'truffleruby'
|
|
35
|
-
TAG_ENV = 'env'
|
|
36
|
-
TAG_SERVICE = 'service'
|
|
37
|
-
TAG_VERSION = 'version'
|
|
37
|
+
TAG_ENV = 'env'
|
|
38
|
+
TAG_SERVICE = 'service'
|
|
39
|
+
TAG_VERSION = 'version'
|
|
38
40
|
|
|
39
41
|
# TODO: Migrate to Datadog::Tracing
|
|
40
42
|
TRACER_VERSION = DDTrace::VERSION::STRING
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative '../git/ext'
|
|
4
|
+
require_relative '../utils/url'
|
|
5
|
+
|
|
6
|
+
module Datadog
|
|
7
|
+
module Core
|
|
8
|
+
module Environment
|
|
9
|
+
# Retrieves git repository information from environment variables
|
|
10
|
+
module Git
|
|
11
|
+
def self.git_repository_url
|
|
12
|
+
return @git_repository_url if defined?(@git_repository_url)
|
|
13
|
+
|
|
14
|
+
@git_repository_url = Utils::Url.filter_basic_auth(ENV[Datadog::Core::Git::Ext::ENV_REPOSITORY_URL])
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def self.git_commit_sha
|
|
18
|
+
return @git_commit_sha if defined?(@git_commit_sha)
|
|
19
|
+
|
|
20
|
+
@git_commit_sha = ENV[Datadog::Core::Git::Ext::ENV_COMMIT_SHA]
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|