ddtrace 1.12.1 → 1.18.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +388 -10
- 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 +3 -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 +292 -27
- data/ext/ddtrace_profiling_native_extension/collectors_thread_context.h +1 -1
- data/ext/ddtrace_profiling_native_extension/extconf.rb +40 -10
- data/ext/ddtrace_profiling_native_extension/http_transport.c +48 -16
- 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 -1
- 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 +136 -32
- data/ext/ddtrace_profiling_native_extension/private_vm_api_access.h +12 -0
- data/ext/ddtrace_profiling_native_extension/profiling.c +1 -2
- data/ext/ddtrace_profiling_native_extension/stack_recorder.c +81 -50
- data/ext/ddtrace_profiling_native_extension/stack_recorder.h +13 -3
- data/ext/ddtrace_profiling_native_extension/time_helpers.c +40 -4
- data/ext/ddtrace_profiling_native_extension/time_helpers.h +14 -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 +49 -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 +36 -17
- 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/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 +15 -3
- data/lib/datadog/core/configuration/ext.rb +28 -5
- data/lib/datadog/core/configuration/option.rb +269 -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 +182 -102
- data/lib/datadog/core/configuration.rb +4 -0
- data/lib/datadog/core/diagnostics/environment_logger.rb +130 -234
- data/lib/datadog/core/environment/execution.rb +103 -0
- data/lib/datadog/core/environment/ext.rb +13 -11
- 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 +26 -22
- 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 +6 -1
- data/lib/datadog/core/remote/client.rb +3 -0
- data/lib/datadog/core/remote/component.rb +27 -36
- 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 +1 -1
- data/lib/datadog/core/remote/negotiation.rb +19 -6
- 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 +4 -1
- 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 +12 -2
- data/lib/datadog/core/telemetry/collector.rb +13 -4
- data/lib/datadog/core/telemetry/emitter.rb +4 -2
- data/lib/datadog/core/telemetry/event.rb +19 -4
- data/lib/datadog/core/telemetry/ext.rb +4 -1
- data/lib/datadog/core/telemetry/heartbeat.rb +2 -4
- data/lib/datadog/core/telemetry/http/ext.rb +10 -8
- data/lib/datadog/core/telemetry/http/transport.rb +2 -0
- data/lib/datadog/core/telemetry/v2/app_client_configuration_change.rb +41 -0
- data/lib/datadog/core/telemetry/v2/request.rb +29 -0
- 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/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.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 +2 -1
- 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 +1 -0
- data/lib/datadog/opentracer/text_map_propagator.rb +2 -1
- data/lib/datadog/opentracer.rb +9 -0
- data/lib/datadog/profiling/collectors/cpu_and_wall_time_worker.rb +16 -17
- data/lib/datadog/profiling/collectors/idle_sampling_helper.rb +3 -1
- data/lib/datadog/profiling/collectors/thread_context.rb +17 -2
- data/lib/datadog/profiling/component.rb +69 -94
- data/lib/datadog/profiling/diagnostics/environment_logger.rb +39 -0
- data/lib/datadog/profiling/exporter.rb +5 -1
- data/lib/datadog/profiling/ext.rb +0 -12
- data/lib/datadog/profiling/flush.rb +7 -5
- data/lib/datadog/profiling/http_transport.rb +19 -6
- data/lib/datadog/profiling/load_native_extension.rb +7 -1
- 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 +16 -78
- 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 -32
- data/lib/datadog/tracing/configuration/http.rb +74 -0
- data/lib/datadog/tracing/configuration/settings.rb +134 -98
- data/lib/datadog/tracing/contrib/action_cable/configuration/settings.rb +9 -6
- data/lib/datadog/tracing/contrib/action_cable/ext.rb +20 -18
- data/lib/datadog/tracing/contrib/action_mailer/configuration/settings.rb +9 -6
- data/lib/datadog/tracing/contrib/action_mailer/ext.rb +20 -18
- data/lib/datadog/tracing/contrib/action_pack/configuration/settings.rb +9 -7
- data/lib/datadog/tracing/contrib/action_pack/ext.rb +10 -8
- data/lib/datadog/tracing/contrib/action_view/configuration/settings.rb +9 -6
- data/lib/datadog/tracing/contrib/action_view/ext.rb +12 -10
- data/lib/datadog/tracing/contrib/active_job/configuration/settings.rb +13 -7
- data/lib/datadog/tracing/contrib/active_job/ext.rb +25 -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 +9 -6
- data/lib/datadog/tracing/contrib/active_model_serializers/ext.rb +12 -10
- data/lib/datadog/tracing/contrib/active_record/configuration/resolver.rb +18 -11
- data/lib/datadog/tracing/contrib/active_record/configuration/settings.rb +9 -7
- data/lib/datadog/tracing/contrib/active_record/events/sql.rb +2 -6
- data/lib/datadog/tracing/contrib/active_record/ext.rb +17 -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 +9 -7
- data/lib/datadog/tracing/contrib/active_support/ext.rb +18 -16
- data/lib/datadog/tracing/contrib/aws/configuration/settings.rb +14 -7
- data/lib/datadog/tracing/contrib/aws/ext.rb +37 -24
- data/lib/datadog/tracing/contrib/aws/instrumentation.rb +16 -5
- 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 +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 +20 -7
- data/lib/datadog/tracing/contrib/dalli/ext.rb +26 -11
- data/lib/datadog/tracing/contrib/dalli/instrumentation.rb +17 -8
- data/lib/datadog/tracing/contrib/delayed_job/configuration/settings.rb +13 -7
- data/lib/datadog/tracing/contrib/delayed_job/ext.rb +16 -14
- data/lib/datadog/tracing/contrib/elasticsearch/configuration/settings.rb +14 -7
- data/lib/datadog/tracing/contrib/elasticsearch/ext.rb +21 -15
- data/lib/datadog/tracing/contrib/elasticsearch/patcher.rb +104 -99
- data/lib/datadog/tracing/contrib/ethon/configuration/settings.rb +16 -9
- data/lib/datadog/tracing/contrib/ethon/easy_patch.rb +48 -3
- data/lib/datadog/tracing/contrib/ethon/ext.rb +19 -11
- data/lib/datadog/tracing/contrib/ethon/multi_patch.rb +6 -3
- data/lib/datadog/tracing/contrib/excon/configuration/settings.rb +19 -10
- data/lib/datadog/tracing/contrib/excon/ext.rb +16 -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 +32 -0
- data/lib/datadog/tracing/contrib/faraday/configuration/settings.rb +20 -10
- data/lib/datadog/tracing/contrib/faraday/ext.rb +16 -8
- data/lib/datadog/tracing/contrib/faraday/middleware.rb +21 -5
- data/lib/datadog/tracing/contrib/grape/configuration/settings.rb +8 -6
- data/lib/datadog/tracing/contrib/grape/ext.rb +16 -14
- data/lib/datadog/tracing/contrib/graphql/configuration/settings.rb +8 -6
- data/lib/datadog/tracing/contrib/graphql/ext.rb +7 -5
- data/lib/datadog/tracing/contrib/grpc/configuration/settings.rb +39 -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 +16 -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 +33 -11
- data/lib/datadog/tracing/contrib/http/ext.rb +16 -9
- data/lib/datadog/tracing/contrib/http/instrumentation.rb +27 -7
- data/lib/datadog/tracing/contrib/httpclient/configuration/settings.rb +33 -11
- data/lib/datadog/tracing/contrib/httpclient/ext.rb +17 -9
- data/lib/datadog/tracing/contrib/httpclient/instrumentation.rb +22 -5
- data/lib/datadog/tracing/contrib/httprb/configuration/settings.rb +33 -11
- data/lib/datadog/tracing/contrib/httprb/ext.rb +16 -9
- data/lib/datadog/tracing/contrib/httprb/instrumentation.rb +22 -5
- data/lib/datadog/tracing/contrib/kafka/configuration/settings.rb +9 -6
- data/lib/datadog/tracing/contrib/kafka/ext.rb +42 -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 +14 -7
- data/lib/datadog/tracing/contrib/mongodb/ext.rb +20 -16
- data/lib/datadog/tracing/contrib/mongodb/subscribers.rb +16 -5
- data/lib/datadog/tracing/contrib/mysql2/configuration/settings.rb +17 -14
- data/lib/datadog/tracing/contrib/mysql2/ext.rb +15 -10
- data/lib/datadog/tracing/contrib/mysql2/instrumentation.rb +20 -6
- data/lib/datadog/tracing/contrib/opensearch/configuration/settings.rb +52 -0
- data/lib/datadog/tracing/contrib/opensearch/ext.rb +37 -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 +22 -14
- data/lib/datadog/tracing/contrib/pg/ext.rb +22 -19
- data/lib/datadog/tracing/contrib/pg/instrumentation.rb +38 -5
- data/lib/datadog/tracing/contrib/presto/configuration/settings.rb +14 -7
- data/lib/datadog/tracing/contrib/presto/ext.rb +25 -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 +12 -8
- data/lib/datadog/tracing/contrib/qless/ext.rb +14 -12
- data/lib/datadog/tracing/contrib/que/configuration/settings.rb +21 -12
- data/lib/datadog/tracing/contrib/racecar/configuration/settings.rb +9 -7
- data/lib/datadog/tracing/contrib/racecar/event.rb +5 -5
- data/lib/datadog/tracing/contrib/racecar/ext.rb +20 -18
- data/lib/datadog/tracing/contrib/rack/configuration/settings.rb +16 -12
- data/lib/datadog/tracing/contrib/rack/ext.rb +18 -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 +8 -49
- data/lib/datadog/tracing/contrib/rails/configuration/settings.rb +19 -15
- data/lib/datadog/tracing/contrib/rails/ext.rb +7 -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 +13 -10
- data/lib/datadog/tracing/contrib/rake/ext.rb +14 -12
- data/lib/datadog/tracing/contrib/redis/configuration/settings.rb +17 -9
- data/lib/datadog/tracing/contrib/redis/ext.rb +22 -15
- data/lib/datadog/tracing/contrib/redis/instrumentation.rb +3 -38
- 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 +13 -7
- data/lib/datadog/tracing/contrib/resque/ext.rb +9 -7
- data/lib/datadog/tracing/contrib/rest_client/configuration/settings.rb +16 -9
- data/lib/datadog/tracing/contrib/rest_client/ext.rb +15 -8
- data/lib/datadog/tracing/contrib/rest_client/request_patch.rb +25 -5
- data/lib/datadog/tracing/contrib/roda/configuration/settings.rb +9 -6
- 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 +9 -6
- data/lib/datadog/tracing/contrib/sequel/ext.rb +10 -8
- data/lib/datadog/tracing/contrib/sequel/utils.rb +7 -7
- data/lib/datadog/tracing/contrib/shoryuken/configuration/settings.rb +14 -8
- data/lib/datadog/tracing/contrib/shoryuken/ext.rb +14 -12
- data/lib/datadog/tracing/contrib/sidekiq/configuration/settings.rb +18 -11
- data/lib/datadog/tracing/contrib/sidekiq/ext.rb +32 -30
- data/lib/datadog/tracing/contrib/sinatra/configuration/settings.rb +11 -9
- data/lib/datadog/tracing/contrib/sinatra/env.rb +0 -17
- data/lib/datadog/tracing/contrib/sinatra/ext.rb +21 -19
- data/lib/datadog/tracing/contrib/sinatra/tracer_middleware.rb +3 -14
- data/lib/datadog/tracing/contrib/sneakers/configuration/settings.rb +14 -8
- data/lib/datadog/tracing/contrib/sneakers/ext.rb +1 -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 +9 -6
- data/lib/datadog/tracing/contrib/sucker_punch/configuration/settings.rb +9 -6
- data/lib/datadog/tracing/contrib/sucker_punch/ext.rb +15 -13
- 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 +1 -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/rule_sampler.rb +29 -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 +16 -3
- 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 +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 +6 -4
- data/lib/datadog/tracing/workers.rb +4 -2
- data/lib/datadog/tracing/writer.rb +5 -2
- data/lib/ddtrace/transport/ext.rb +22 -14
- data/lib/ddtrace/version.rb +9 -12
- data/lib/ddtrace.rb +1 -1
- metadata +101 -93
- 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/cucumber/patcher.rb +0 -27
- 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/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
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Datadog
|
|
4
|
+
module Core
|
|
5
|
+
module Transport
|
|
6
|
+
# Defines abstract response for transport operations
|
|
7
|
+
module Response
|
|
8
|
+
def payload
|
|
9
|
+
nil
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def ok?
|
|
13
|
+
nil
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def unsupported?
|
|
17
|
+
nil
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def not_found?
|
|
21
|
+
nil
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def client_error?
|
|
25
|
+
nil
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def server_error?
|
|
29
|
+
nil
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def internal_error?
|
|
33
|
+
nil
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def inspect
|
|
37
|
+
"#{self.class} ok?:#{ok?} unsupported?:#{unsupported?}, " \
|
|
38
|
+
"not_found?:#{not_found?}, client_error?:#{client_error?}, " \
|
|
39
|
+
"server_error?:#{server_error?}, internal_error?:#{internal_error?}, " \
|
|
40
|
+
"payload:#{payload}"
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
# A generic error response for internal errors
|
|
45
|
+
class InternalErrorResponse
|
|
46
|
+
include Response
|
|
47
|
+
|
|
48
|
+
attr_reader :error
|
|
49
|
+
|
|
50
|
+
def initialize(error)
|
|
51
|
+
@error = error
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
def internal_error?
|
|
55
|
+
true
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
def inspect
|
|
59
|
+
"#{super}, error_type:#{error.class} error:#{error}"
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
end
|
|
64
|
+
end
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Datadog
|
|
4
|
+
module Core
|
|
5
|
+
module Utils
|
|
6
|
+
# Helper methods for parsing string values into Numeric
|
|
7
|
+
module Duration
|
|
8
|
+
def self.call(value, base: :s)
|
|
9
|
+
cast = if value.include?('.')
|
|
10
|
+
method(:Float)
|
|
11
|
+
else
|
|
12
|
+
method(:Integer)
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
scale = case base
|
|
16
|
+
when :s
|
|
17
|
+
1_000_000_000
|
|
18
|
+
when :ms
|
|
19
|
+
1_000_000
|
|
20
|
+
when :us
|
|
21
|
+
1000
|
|
22
|
+
when :ns
|
|
23
|
+
1
|
|
24
|
+
else
|
|
25
|
+
raise ArgumentError, "invalid base: #{base.inspect}"
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
result = case value
|
|
29
|
+
when /^(\d+(?:\.\d+)?)h$/
|
|
30
|
+
cast.call(Regexp.last_match(1)) * 1_000_000_000 * 60 * 60 / scale
|
|
31
|
+
when /^(\d+(?:\.\d+)?)m$/
|
|
32
|
+
cast.call(Regexp.last_match(1)) * 1_000_000_000 * 60 / scale
|
|
33
|
+
when /^(\d+(?:\.\d+)?)s$/
|
|
34
|
+
cast.call(Regexp.last_match(1)) * 1_000_000_000 / scale
|
|
35
|
+
when /^(\d+(?:\.\d+)?)ms$/
|
|
36
|
+
cast.call(Regexp.last_match(1)) * 1_000_000 / scale
|
|
37
|
+
when /^(\d+(?:\.\d+)?)us$/
|
|
38
|
+
cast.call(Regexp.last_match(1)) * 1_000 / scale
|
|
39
|
+
when /^(\d+(?:\.\d+)?)ns$/
|
|
40
|
+
cast.call(Regexp.last_match(1)) / scale
|
|
41
|
+
when /^(\d+(?:\.\d+)?)$/
|
|
42
|
+
cast.call(Regexp.last_match(1))
|
|
43
|
+
else
|
|
44
|
+
raise ArgumentError, "invalid duration: #{value.inspect}"
|
|
45
|
+
end
|
|
46
|
+
# @type var result: Numeric
|
|
47
|
+
result.round
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
end
|
|
@@ -26,6 +26,53 @@ module Datadog
|
|
|
26
26
|
end
|
|
27
27
|
end
|
|
28
28
|
end
|
|
29
|
+
|
|
30
|
+
# A minimal {Hash} wrapper that provides case-insensitive access
|
|
31
|
+
# to hash keys, without the overhead of copying the original hash.
|
|
32
|
+
#
|
|
33
|
+
# This class should be used when the original hash is short lived *and*
|
|
34
|
+
# each hash key is only accesses a few times.
|
|
35
|
+
# For other cases, create a copy of the original hash with the keys
|
|
36
|
+
# normalized adequate to your use case.
|
|
37
|
+
class CaseInsensitiveWrapper
|
|
38
|
+
def initialize(hash)
|
|
39
|
+
raise ArgumentError, "must be a hash, but was #{hash.class}: #{hash.inspect}" unless hash.is_a?(::Hash)
|
|
40
|
+
|
|
41
|
+
@hash = hash
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
def [](key)
|
|
45
|
+
return nil unless key.is_a?(::String)
|
|
46
|
+
|
|
47
|
+
@hash.each do |k, value|
|
|
48
|
+
return value if key.casecmp(k) == 0
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
nil
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
def key?(key)
|
|
55
|
+
return false unless key.is_a?(::String)
|
|
56
|
+
|
|
57
|
+
@hash.each_key do |k|
|
|
58
|
+
return true if key.casecmp(k) == 0
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
false
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
def empty?
|
|
65
|
+
@hash.empty?
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
def length
|
|
69
|
+
@hash.length
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
def original_hash
|
|
73
|
+
@hash
|
|
74
|
+
end
|
|
75
|
+
end
|
|
29
76
|
end
|
|
30
77
|
end
|
|
31
78
|
end
|
|
@@ -1,40 +1,47 @@
|
|
|
1
|
+
require_relative '../backport'
|
|
2
|
+
|
|
1
3
|
module Datadog
|
|
2
4
|
module Core
|
|
3
5
|
module Utils
|
|
4
6
|
# Helper methods for safer dup
|
|
5
7
|
module SafeDup
|
|
6
|
-
if RUBY_VERSION < '2.2' # nil.dup only fails in Ruby 2.1
|
|
7
|
-
# Ensures #initialize can call nil.dup safely
|
|
8
|
-
module RefineNil
|
|
9
|
-
refine NilClass do
|
|
10
|
-
def dup
|
|
11
|
-
self
|
|
12
|
-
end
|
|
13
|
-
end
|
|
14
|
-
end
|
|
15
|
-
|
|
16
|
-
using RefineNil
|
|
17
|
-
end
|
|
18
|
-
|
|
19
8
|
# String#+@ was introduced in Ruby 2.3
|
|
20
9
|
if String.method_defined?(:+@) && String.method_defined?(:-@)
|
|
21
10
|
def self.frozen_or_dup(v)
|
|
22
|
-
#
|
|
23
|
-
#
|
|
24
|
-
#
|
|
25
|
-
|
|
11
|
+
# For the case of a String we use the methods +@ and -@.
|
|
12
|
+
# Those methods are only for String objects
|
|
13
|
+
# they are faster and chepaer on the memory side.
|
|
14
|
+
# Check the benchmark on
|
|
15
|
+
# https://github.com/DataDog/dd-trace-rb/pull/2704
|
|
16
|
+
if v.is_a?(String)
|
|
17
|
+
# If the string is not frozen, the +(-v) will:
|
|
18
|
+
# - first create a frozen deduplicated copy with -v
|
|
19
|
+
# - then it will dup it more efficiently with +v
|
|
20
|
+
v.frozen? ? v : +(-v)
|
|
21
|
+
else
|
|
22
|
+
v.frozen? ? v : Core::BackportFrom24.dup(v)
|
|
23
|
+
end
|
|
26
24
|
end
|
|
27
25
|
|
|
28
26
|
def self.frozen_dup(v)
|
|
29
|
-
|
|
27
|
+
# For the case of a String we use the methods -@
|
|
28
|
+
# That method are only for String objects
|
|
29
|
+
# they are faster and chepaer on the memory side.
|
|
30
|
+
# Check the benchmark on
|
|
31
|
+
# https://github.com/DataDog/dd-trace-rb/pull/2704
|
|
32
|
+
if v.is_a?(String)
|
|
33
|
+
-v if v
|
|
34
|
+
else
|
|
35
|
+
v.frozen? ? v : Core::BackportFrom24.dup(v).freeze
|
|
36
|
+
end
|
|
30
37
|
end
|
|
31
38
|
else
|
|
32
39
|
def self.frozen_or_dup(v)
|
|
33
|
-
v.frozen? ? v :
|
|
40
|
+
v.frozen? ? v : Core::BackportFrom24.dup(v)
|
|
34
41
|
end
|
|
35
42
|
|
|
36
43
|
def self.frozen_dup(v)
|
|
37
|
-
v.frozen? ? v :
|
|
44
|
+
v.frozen? ? v : Core::BackportFrom24.dup(v).freeze
|
|
38
45
|
end
|
|
39
46
|
end
|
|
40
47
|
end
|
data/lib/datadog/core/utils.rb
CHANGED
|
@@ -67,7 +67,7 @@ module Datadog
|
|
|
67
67
|
# @!visibility private
|
|
68
68
|
def self.without_warnings
|
|
69
69
|
# This is typically used when monkey patching functions such as
|
|
70
|
-
#
|
|
70
|
+
# initialize, which Ruby advices you not to. Use cautiously.
|
|
71
71
|
v = $VERBOSE
|
|
72
72
|
$VERBOSE = nil
|
|
73
73
|
begin
|
|
@@ -90,7 +90,7 @@ module Datadog
|
|
|
90
90
|
:result
|
|
91
91
|
|
|
92
92
|
def mutex
|
|
93
|
-
@mutex || MUTEX_INIT.synchronize { @mutex ||= Mutex.new }
|
|
93
|
+
(defined?(@mutex) && @mutex) || MUTEX_INIT.synchronize { @mutex ||= Mutex.new }
|
|
94
94
|
end
|
|
95
95
|
|
|
96
96
|
def after_fork
|
|
@@ -103,7 +103,7 @@ module Datadog
|
|
|
103
103
|
:pid
|
|
104
104
|
|
|
105
105
|
def mutex_after_fork
|
|
106
|
-
@mutex_after_fork || MUTEX_INIT.synchronize { @mutex_after_fork ||= Mutex.new }
|
|
106
|
+
(defined?(@mutex_after_fork) && @mutex_after_fork) || MUTEX_INIT.synchronize { @mutex_after_fork ||= Mutex.new }
|
|
107
107
|
end
|
|
108
108
|
|
|
109
109
|
def worker
|
|
@@ -147,6 +147,7 @@ module Datadog
|
|
|
147
147
|
# rubocop:enable Lint/RescueException
|
|
148
148
|
end
|
|
149
149
|
@worker.name = self.class.name unless Gem::Version.new(RUBY_VERSION) < Gem::Version.new('2.3')
|
|
150
|
+
@worker.thread_variable_set(:fork_safe, true)
|
|
150
151
|
|
|
151
152
|
nil
|
|
152
153
|
end
|
|
@@ -6,7 +6,7 @@ module Datadog
|
|
|
6
6
|
module Workers
|
|
7
7
|
# Adds polling (async looping) behavior to workers
|
|
8
8
|
module Polling
|
|
9
|
-
|
|
9
|
+
DEFAULT_SHUTDOWN_TIMEOUT = 1
|
|
10
10
|
|
|
11
11
|
def self.included(base)
|
|
12
12
|
base.include(Workers::IntervalLoop)
|
|
@@ -21,7 +21,7 @@ module Datadog
|
|
|
21
21
|
end
|
|
22
22
|
end
|
|
23
23
|
|
|
24
|
-
def stop(force_stop = false, timeout =
|
|
24
|
+
def stop(force_stop = false, timeout = DEFAULT_SHUTDOWN_TIMEOUT)
|
|
25
25
|
if running?
|
|
26
26
|
# Attempt graceful stop and wait
|
|
27
27
|
stop_loop
|
|
@@ -9,109 +9,159 @@ module Datadog
|
|
|
9
9
|
module Events
|
|
10
10
|
LOGIN_SUCCESS_EVENT = 'users.login.success'
|
|
11
11
|
LOGIN_FAILURE_EVENT = 'users.login.failure'
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
span
|
|
12
|
+
SIGNUP_EVENT = 'users.signup'
|
|
13
|
+
|
|
14
|
+
class << self
|
|
15
|
+
# Attach login success event information to the trace
|
|
16
|
+
#
|
|
17
|
+
# This method is experimental and may change in the future.
|
|
18
|
+
#
|
|
19
|
+
# @param trace [TraceOperation] Trace to attach data to. Defaults to
|
|
20
|
+
# active trace.
|
|
21
|
+
# @param span [SpanOperation] Span to attach data to. Defaults to
|
|
22
|
+
# active span on trace. Note that this should be a service entry span.
|
|
23
|
+
# When AppSec is enabled, the expected span and trace are automatically
|
|
24
|
+
# used as defaults.
|
|
25
|
+
# @param user [Hash<Symbol, String>] User information to pass to
|
|
26
|
+
# Datadog::Kit::Identity.set_user. Must contain at least :id as key.
|
|
27
|
+
# @param others [Hash<String || Symbol, String>] Additional free-form
|
|
28
|
+
# event information to attach to the trace.
|
|
29
|
+
def track_login_success(trace = nil, span = nil, user:, **others)
|
|
30
|
+
set_trace_and_span_context('track_login_success', trace, span) do |active_trace, active_span|
|
|
31
|
+
user_options = user.dup
|
|
32
|
+
user_id = user_options.delete(:id)
|
|
33
|
+
|
|
34
|
+
raise ArgumentError, 'missing required key: :user => { :id }' if user_id.nil?
|
|
35
|
+
|
|
36
|
+
track(LOGIN_SUCCESS_EVENT, active_trace, active_span, **others)
|
|
37
|
+
|
|
38
|
+
Kit::Identity.set_user(active_trace, active_span, id: user_id, **user_options)
|
|
39
|
+
end
|
|
31
40
|
end
|
|
32
41
|
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
42
|
+
# Attach login failure event information to the trace
|
|
43
|
+
#
|
|
44
|
+
# This method is experimental and may change in the future.
|
|
45
|
+
#
|
|
46
|
+
# @param trace [TraceOperation] Trace to attach data to. Defaults to
|
|
47
|
+
# active trace.
|
|
48
|
+
# @param span [SpanOperation] Span to attach data to. Defaults to
|
|
49
|
+
# active span on trace. Note that this should be a service entry span.
|
|
50
|
+
# When AppSec is enabled, the expected span and trace are automatically
|
|
51
|
+
# used as defaults.
|
|
52
|
+
# @param user_id [String] User id that attempted login
|
|
53
|
+
# @param user_exists [bool] Whether the user id that did a login attempt exists.
|
|
54
|
+
# @param others [Hash<String || Symbol, String>] Additional free-form
|
|
55
|
+
# event information to attach to the trace.
|
|
56
|
+
def track_login_failure(trace = nil, span = nil, user_id:, user_exists:, **others)
|
|
57
|
+
set_trace_and_span_context('track_login_failure', trace, span) do |active_trace, active_span|
|
|
58
|
+
raise ArgumentError, 'user_id cannot be nil' if user_id.nil?
|
|
59
|
+
|
|
60
|
+
track(LOGIN_FAILURE_EVENT, active_trace, active_span, **others)
|
|
61
|
+
|
|
62
|
+
active_span.set_tag('appsec.events.users.login.failure.usr.id', user_id)
|
|
63
|
+
active_span.set_tag('appsec.events.users.login.failure.usr.exists', user_exists)
|
|
64
|
+
end
|
|
65
|
+
end
|
|
44
66
|
|
|
45
|
-
|
|
46
|
-
|
|
67
|
+
# Attach signup event information to the trace
|
|
68
|
+
#
|
|
69
|
+
# This method is experimental and may change in the future.
|
|
70
|
+
#
|
|
71
|
+
# @param trace [TraceOperation] Trace to attach data to. Defaults to
|
|
72
|
+
# active trace.
|
|
73
|
+
# @param span [SpanOperation] Span to attach data to. Defaults to
|
|
74
|
+
# active span on trace. Note that this should be a service entry span.
|
|
75
|
+
# When AppSec is enabled, the expected span and trace are automatically
|
|
76
|
+
# used as defaults.
|
|
77
|
+
# @param user [Hash<Symbol, String>] User information to pass to
|
|
78
|
+
# Datadog::Kit::Identity.set_user. Must contain at least :id as key.
|
|
79
|
+
# @param others [Hash<String || Symbol, String>] Additional free-form
|
|
80
|
+
# event information to attach to the trace.
|
|
81
|
+
def track_signup(trace = nil, span = nil, user:, **others)
|
|
82
|
+
set_trace_and_span_context('track_signup', trace, span) do |active_trace, active_span|
|
|
83
|
+
user_options = user.dup
|
|
84
|
+
user_id = user_options.delete(:id)
|
|
85
|
+
|
|
86
|
+
raise ArgumentError, 'missing required key: :user => { :id }' if user_id.nil?
|
|
87
|
+
|
|
88
|
+
track(SIGNUP_EVENT, active_trace, active_span, **others)
|
|
89
|
+
|
|
90
|
+
Kit::Identity.set_user(trace, id: user_id, **user_options)
|
|
91
|
+
end
|
|
92
|
+
end
|
|
47
93
|
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
94
|
+
# Attach custom event information to the trace
|
|
95
|
+
#
|
|
96
|
+
# This method is experimental and may change in the future.
|
|
97
|
+
#
|
|
98
|
+
# @param event [String] Mandatory. Event code.
|
|
99
|
+
# @param trace [TraceOperation] Trace to attach data to. Defaults to
|
|
100
|
+
# active trace.
|
|
101
|
+
# @param span [SpanOperation] Span to attach data to. Defaults to
|
|
102
|
+
# active span on trace. Note that this should be a service entry span.
|
|
103
|
+
# When AppSec is enabled, the expected span and trace are automatically
|
|
104
|
+
# used as defaults.
|
|
105
|
+
# @param others [Hash<Symbol, String>] Additional free-form
|
|
106
|
+
# event information to attach to the trace. Key must not
|
|
107
|
+
# be :track.
|
|
108
|
+
def track(event, trace = nil, span = nil, **others)
|
|
109
|
+
if trace && span
|
|
110
|
+
check_trace_span_integrity(trace, span)
|
|
111
|
+
|
|
112
|
+
span.set_tag("appsec.events.#{event}.track", 'true')
|
|
113
|
+
span.set_tag("_dd.appsec.events.#{event}.sdk", 'true')
|
|
114
|
+
|
|
115
|
+
others.each do |k, v|
|
|
116
|
+
raise ArgumentError, 'key cannot be :track' if k.to_sym == :track
|
|
117
|
+
|
|
118
|
+
span.set_tag("appsec.events.#{event}.#{k}", v) unless v.nil?
|
|
119
|
+
end
|
|
120
|
+
|
|
121
|
+
trace.keep!
|
|
122
|
+
else
|
|
123
|
+
set_trace_and_span_context('track', trace, span) do |active_trace, active_span|
|
|
124
|
+
active_span.set_tag("appsec.events.#{event}.track", 'true')
|
|
125
|
+
active_span.set_tag("_dd.appsec.events.#{event}.sdk", 'true')
|
|
126
|
+
|
|
127
|
+
others.each do |k, v|
|
|
128
|
+
raise ArgumentError, 'key cannot be :track' if k.to_sym == :track
|
|
129
|
+
|
|
130
|
+
active_span.set_tag("appsec.events.#{event}.#{k}", v) unless v.nil?
|
|
131
|
+
end
|
|
132
|
+
|
|
133
|
+
active_trace.keep!
|
|
134
|
+
end
|
|
135
|
+
end
|
|
66
136
|
end
|
|
67
137
|
|
|
68
|
-
|
|
69
|
-
span ||= trace.active_span || Datadog::Tracing.active_span
|
|
138
|
+
private
|
|
70
139
|
|
|
71
|
-
|
|
140
|
+
def set_trace_and_span_context(method, trace = nil, span = nil)
|
|
141
|
+
if (appsec_scope = Datadog::AppSec.active_scope)
|
|
142
|
+
trace = appsec_scope.trace
|
|
143
|
+
span = appsec_scope.service_entry_span
|
|
144
|
+
end
|
|
72
145
|
|
|
73
|
-
|
|
146
|
+
trace ||= Datadog::Tracing.active_trace
|
|
147
|
+
span ||= trace && trace.active_span || Datadog::Tracing.active_span
|
|
74
148
|
|
|
75
|
-
|
|
149
|
+
unless trace && span
|
|
150
|
+
Datadog.logger.debug(
|
|
151
|
+
"Tracing not enabled. Method ##{method} is a no-op. Please enable tracing if you want ##{method}"\
|
|
152
|
+
' to track this events'
|
|
153
|
+
)
|
|
154
|
+
return
|
|
155
|
+
end
|
|
76
156
|
|
|
77
|
-
|
|
78
|
-
span.set_tag('appsec.events.users.login.failure.usr.exists', user_exists)
|
|
79
|
-
end
|
|
157
|
+
check_trace_span_integrity(trace, span)
|
|
80
158
|
|
|
81
|
-
|
|
82
|
-
#
|
|
83
|
-
# This method is experimental and may change in the future.
|
|
84
|
-
#
|
|
85
|
-
# @param event [String] Mandatory. Event code.
|
|
86
|
-
# @param trace [TraceOperation] Trace to attach data to. Defaults to
|
|
87
|
-
# active trace.
|
|
88
|
-
# @param span [SpanOperation] Span to attach data to. Defaults to
|
|
89
|
-
# active span on trace. Note that this should be a service entry span.
|
|
90
|
-
# When AppSec is enabled, the expected span and trace are automatically
|
|
91
|
-
# used as defaults.
|
|
92
|
-
# @param others [Hash<Symbol, String>] Additional free-form
|
|
93
|
-
# event information to attach to the trace. Key must not
|
|
94
|
-
# be :track.
|
|
95
|
-
def self.track(event, trace = nil, span = nil, **others)
|
|
96
|
-
if (appsec_scope = Datadog::AppSec.active_scope)
|
|
97
|
-
trace = appsec_scope.trace
|
|
98
|
-
span = appsec_scope.service_entry_span
|
|
159
|
+
yield(trace, span)
|
|
99
160
|
end
|
|
100
161
|
|
|
101
|
-
trace
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
raise ArgumentError, "span #{span.span_id} does not belong to trace #{trace.id}" if trace.id != span.trace_id
|
|
105
|
-
|
|
106
|
-
span.set_tag("appsec.events.#{event}.track", 'true')
|
|
107
|
-
|
|
108
|
-
others.each do |k, v|
|
|
109
|
-
raise ArgumentError, 'key cannot be :track' if k.to_sym == :track
|
|
110
|
-
|
|
111
|
-
span.set_tag("appsec.events.#{event}.#{k}", v) unless v.nil?
|
|
162
|
+
def check_trace_span_integrity(trace, span)
|
|
163
|
+
raise ArgumentError, "span #{span.span_id} does not belong to trace #{trace.id}" if trace.id != span.trace_id
|
|
112
164
|
end
|
|
113
|
-
|
|
114
|
-
trace.keep!
|
|
115
165
|
end
|
|
116
166
|
end
|
|
117
167
|
end
|
|
@@ -16,11 +16,13 @@ module Datadog
|
|
|
16
16
|
'(Could not open /proc/sys/kernel/core_pattern)'
|
|
17
17
|
end
|
|
18
18
|
|
|
19
|
+
enabled_status = "Maximum size: #{maximum_size} Output pattern: '#{core_pattern}'"
|
|
20
|
+
|
|
19
21
|
if maximum_size <= 0
|
|
20
22
|
Kernel.warn("[ddtrace] Could not enable core dumps on crash, maximum size is #{maximum_size} (disabled).")
|
|
21
23
|
return
|
|
22
24
|
elsif maximum_size == current_size
|
|
23
|
-
Kernel.warn(
|
|
25
|
+
Kernel.warn("[ddtrace] Core dumps already enabled, nothing to do. #{enabled_status}")
|
|
24
26
|
return
|
|
25
27
|
end
|
|
26
28
|
|
|
@@ -35,12 +37,9 @@ module Datadog
|
|
|
35
37
|
end
|
|
36
38
|
|
|
37
39
|
if current_size == 0
|
|
38
|
-
Kernel.warn("[ddtrace] Enabled core dumps.
|
|
40
|
+
Kernel.warn("[ddtrace] Enabled core dumps. #{enabled_status}")
|
|
39
41
|
else
|
|
40
|
-
Kernel.warn(
|
|
41
|
-
"[ddtrace] Raised core dump limit. Old size: #{current_size} " \
|
|
42
|
-
"Maximum size: #{maximum_size} Output pattern: '#{core_pattern}'"
|
|
43
|
-
)
|
|
42
|
+
Kernel.warn("[ddtrace] Raised core dump limit. Old size: #{current_size} #{enabled_status}")
|
|
44
43
|
end
|
|
45
44
|
end
|
|
46
45
|
end
|