datadog 2.7.1 → 2.17.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 +310 -1
- data/ext/datadog_profiling_native_extension/clock_id.h +2 -2
- data/ext/datadog_profiling_native_extension/collectors_cpu_and_wall_time_worker.c +66 -56
- data/ext/datadog_profiling_native_extension/collectors_discrete_dynamic_sampler.c +1 -1
- data/ext/datadog_profiling_native_extension/collectors_discrete_dynamic_sampler.h +1 -1
- data/ext/datadog_profiling_native_extension/collectors_idle_sampling_helper.c +16 -16
- data/ext/datadog_profiling_native_extension/collectors_stack.c +10 -10
- data/ext/datadog_profiling_native_extension/collectors_stack.h +2 -2
- data/ext/datadog_profiling_native_extension/collectors_thread_context.c +314 -145
- data/ext/datadog_profiling_native_extension/datadog_ruby_common.c +1 -4
- data/ext/datadog_profiling_native_extension/datadog_ruby_common.h +10 -0
- data/ext/datadog_profiling_native_extension/encoded_profile.c +79 -0
- data/ext/datadog_profiling_native_extension/encoded_profile.h +8 -0
- data/ext/datadog_profiling_native_extension/extconf.rb +7 -8
- data/ext/datadog_profiling_native_extension/gvl_profiling_helper.c +2 -0
- data/ext/datadog_profiling_native_extension/gvl_profiling_helper.h +0 -8
- data/ext/datadog_profiling_native_extension/heap_recorder.c +61 -174
- data/ext/datadog_profiling_native_extension/heap_recorder.h +2 -2
- data/ext/datadog_profiling_native_extension/http_transport.c +64 -98
- data/ext/datadog_profiling_native_extension/private_vm_api_access.c +68 -1
- data/ext/datadog_profiling_native_extension/private_vm_api_access.h +10 -1
- data/ext/datadog_profiling_native_extension/profiling.c +19 -8
- data/ext/datadog_profiling_native_extension/ruby_helpers.c +8 -8
- data/ext/datadog_profiling_native_extension/stack_recorder.c +84 -131
- data/ext/datadog_profiling_native_extension/stack_recorder.h +2 -2
- data/ext/datadog_profiling_native_extension/time_helpers.h +1 -1
- data/ext/datadog_profiling_native_extension/unsafe_api_calls_check.c +47 -0
- data/ext/datadog_profiling_native_extension/unsafe_api_calls_check.h +31 -0
- data/ext/libdatadog_api/crashtracker.c +17 -15
- data/ext/libdatadog_api/crashtracker.h +5 -0
- data/ext/libdatadog_api/datadog_ruby_common.c +1 -4
- data/ext/libdatadog_api/datadog_ruby_common.h +10 -0
- data/ext/libdatadog_api/init.c +15 -0
- data/ext/libdatadog_api/library_config.c +122 -0
- data/ext/libdatadog_api/library_config.h +19 -0
- data/ext/libdatadog_api/macos_development.md +3 -3
- data/ext/libdatadog_api/process_discovery.c +117 -0
- data/ext/libdatadog_api/process_discovery.h +5 -0
- data/ext/libdatadog_extconf_helpers.rb +1 -1
- data/lib/datadog/appsec/actions_handler/serializable_backtrace.rb +89 -0
- data/lib/datadog/appsec/actions_handler.rb +49 -0
- data/lib/datadog/appsec/anonymizer.rb +16 -0
- data/lib/datadog/appsec/api_security/lru_cache.rb +49 -0
- data/lib/datadog/appsec/api_security.rb +9 -0
- data/lib/datadog/appsec/assets/waf_rules/README.md +50 -5
- data/lib/datadog/appsec/assets/waf_rules/processors.json +239 -10
- data/lib/datadog/appsec/assets/waf_rules/recommended.json +355 -157
- data/lib/datadog/appsec/assets/waf_rules/scanners.json +926 -17
- data/lib/datadog/appsec/assets/waf_rules/strict.json +62 -32
- data/lib/datadog/appsec/autoload.rb +1 -1
- data/lib/datadog/appsec/component.rb +41 -33
- data/lib/datadog/appsec/compressed_json.rb +40 -0
- data/lib/datadog/appsec/configuration/settings.rb +152 -25
- data/lib/datadog/appsec/context.rb +74 -0
- data/lib/datadog/appsec/contrib/active_record/instrumentation.rb +92 -0
- data/lib/datadog/appsec/contrib/active_record/integration.rb +41 -0
- data/lib/datadog/appsec/contrib/active_record/patcher.rb +101 -0
- data/lib/datadog/appsec/contrib/auto_instrument.rb +1 -1
- data/lib/datadog/appsec/contrib/devise/configuration.rb +52 -0
- data/lib/datadog/appsec/contrib/devise/data_extractor.rb +78 -0
- data/lib/datadog/appsec/contrib/devise/ext.rb +22 -0
- data/lib/datadog/appsec/contrib/devise/integration.rb +1 -2
- data/lib/datadog/appsec/contrib/devise/patcher.rb +33 -25
- data/lib/datadog/appsec/contrib/devise/patches/signin_tracking_patch.rb +102 -0
- data/lib/datadog/appsec/contrib/devise/patches/signup_tracking_patch.rb +69 -0
- data/lib/datadog/appsec/contrib/devise/{patcher/rememberable_patch.rb → patches/skip_signin_tracking_patch.rb} +3 -3
- data/lib/datadog/appsec/contrib/devise/tracking_middleware.rb +106 -0
- data/lib/datadog/appsec/contrib/excon/integration.rb +41 -0
- data/lib/datadog/appsec/contrib/excon/patcher.rb +28 -0
- data/lib/datadog/appsec/contrib/excon/ssrf_detection_middleware.rb +42 -0
- data/lib/datadog/appsec/contrib/faraday/connection_patch.rb +22 -0
- data/lib/datadog/appsec/contrib/faraday/integration.rb +42 -0
- data/lib/datadog/appsec/contrib/faraday/patcher.rb +53 -0
- data/lib/datadog/appsec/contrib/faraday/rack_builder_patch.rb +22 -0
- data/lib/datadog/appsec/contrib/faraday/ssrf_detection_middleware.rb +41 -0
- data/lib/datadog/appsec/contrib/graphql/appsec_trace.rb +1 -7
- data/lib/datadog/appsec/contrib/graphql/gateway/watcher.rb +17 -30
- data/lib/datadog/appsec/contrib/graphql/integration.rb +1 -1
- data/lib/datadog/appsec/contrib/graphql/patcher.rb +0 -3
- data/lib/datadog/appsec/contrib/rack/ext.rb +34 -0
- data/lib/datadog/appsec/contrib/rack/gateway/response.rb +3 -3
- data/lib/datadog/appsec/contrib/rack/gateway/watcher.rb +78 -98
- data/lib/datadog/appsec/contrib/rack/integration.rb +1 -1
- data/lib/datadog/appsec/contrib/rack/patcher.rb +0 -3
- data/lib/datadog/appsec/contrib/rack/request_body_middleware.rb +10 -11
- data/lib/datadog/appsec/contrib/rack/request_middleware.rb +52 -68
- data/lib/datadog/appsec/contrib/rails/gateway/watcher.rb +16 -33
- data/lib/datadog/appsec/contrib/rails/integration.rb +1 -1
- data/lib/datadog/appsec/contrib/rails/patcher.rb +25 -38
- data/lib/datadog/appsec/contrib/rest_client/integration.rb +45 -0
- data/lib/datadog/appsec/contrib/rest_client/patcher.rb +28 -0
- data/lib/datadog/appsec/contrib/rest_client/request_ssrf_detection_patch.rb +38 -0
- data/lib/datadog/appsec/contrib/sinatra/gateway/watcher.rb +31 -68
- data/lib/datadog/appsec/contrib/sinatra/integration.rb +1 -1
- data/lib/datadog/appsec/contrib/sinatra/patcher.rb +5 -31
- data/lib/datadog/appsec/event.rb +96 -135
- data/lib/datadog/appsec/ext.rb +12 -3
- data/lib/datadog/appsec/instrumentation/gateway/argument.rb +7 -2
- data/lib/datadog/appsec/instrumentation/gateway/middleware.rb +24 -0
- data/lib/datadog/appsec/instrumentation/gateway.rb +17 -22
- data/lib/datadog/appsec/metrics/collector.rb +38 -0
- data/lib/datadog/appsec/metrics/exporter.rb +35 -0
- data/lib/datadog/appsec/metrics/telemetry.rb +23 -0
- data/lib/datadog/appsec/metrics.rb +13 -0
- data/lib/datadog/appsec/monitor/gateway/watcher.rb +52 -32
- data/lib/datadog/appsec/processor/rule_loader.rb +26 -31
- data/lib/datadog/appsec/processor/rule_merger.rb +7 -6
- data/lib/datadog/appsec/processor.rb +5 -4
- data/lib/datadog/appsec/remote.rb +26 -12
- data/lib/datadog/appsec/response.rb +19 -85
- data/lib/datadog/appsec/security_engine/result.rb +67 -0
- data/lib/datadog/appsec/security_engine/runner.rb +88 -0
- data/lib/datadog/appsec/security_engine.rb +9 -0
- data/lib/datadog/appsec/security_event.rb +39 -0
- data/lib/datadog/appsec/utils.rb +0 -2
- data/lib/datadog/appsec.rb +23 -10
- data/lib/datadog/auto_instrument.rb +3 -0
- data/lib/datadog/core/buffer/random.rb +18 -2
- data/lib/datadog/core/configuration/agent_settings_resolver.rb +42 -14
- data/lib/datadog/core/configuration/agentless_settings_resolver.rb +176 -0
- data/lib/datadog/core/configuration/components.rb +76 -32
- data/lib/datadog/core/configuration/components_state.rb +23 -0
- data/lib/datadog/core/configuration/ext.rb +5 -1
- data/lib/datadog/core/configuration/option.rb +79 -43
- data/lib/datadog/core/configuration/option_definition.rb +6 -4
- data/lib/datadog/core/configuration/options.rb +3 -3
- data/lib/datadog/core/configuration/settings.rb +100 -41
- data/lib/datadog/core/configuration/stable_config.rb +23 -0
- data/lib/datadog/core/configuration.rb +43 -11
- data/lib/datadog/{tracing → core}/contrib/rails/utils.rb +1 -3
- data/lib/datadog/core/crashtracking/component.rb +4 -13
- data/lib/datadog/core/diagnostics/environment_logger.rb +1 -1
- data/lib/datadog/core/encoding.rb +17 -1
- data/lib/datadog/core/environment/agent_info.rb +78 -0
- data/lib/datadog/core/environment/cgroup.rb +10 -12
- data/lib/datadog/core/environment/container.rb +38 -40
- data/lib/datadog/core/environment/ext.rb +6 -6
- data/lib/datadog/core/environment/git.rb +1 -0
- data/lib/datadog/core/environment/identity.rb +3 -3
- data/lib/datadog/core/environment/platform.rb +3 -3
- data/lib/datadog/core/environment/variable_helpers.rb +1 -1
- data/lib/datadog/core/error.rb +11 -9
- data/lib/datadog/core/logger.rb +2 -2
- data/lib/datadog/core/metrics/client.rb +27 -27
- data/lib/datadog/core/metrics/logging.rb +5 -5
- data/lib/datadog/core/process_discovery.rb +32 -0
- data/lib/datadog/core/rate_limiter.rb +4 -2
- data/lib/datadog/core/remote/client/capabilities.rb +6 -0
- data/lib/datadog/core/remote/client.rb +107 -92
- data/lib/datadog/core/remote/component.rb +18 -19
- data/lib/datadog/core/remote/configuration/digest.rb +7 -7
- data/lib/datadog/core/remote/configuration/path.rb +1 -1
- data/lib/datadog/core/remote/configuration/repository.rb +2 -1
- data/lib/datadog/core/remote/negotiation.rb +9 -9
- data/lib/datadog/core/remote/transport/config.rb +4 -3
- data/lib/datadog/core/remote/transport/http/api.rb +13 -18
- data/lib/datadog/core/remote/transport/http/client.rb +5 -4
- data/lib/datadog/core/remote/transport/http/config.rb +27 -55
- data/lib/datadog/core/remote/transport/http/negotiation.rb +8 -51
- data/lib/datadog/core/remote/transport/http.rb +25 -94
- data/lib/datadog/core/remote/transport/negotiation.rb +17 -4
- data/lib/datadog/core/remote/worker.rb +10 -7
- data/lib/datadog/core/runtime/metrics.rb +12 -5
- data/lib/datadog/core/telemetry/component.rb +84 -49
- data/lib/datadog/core/telemetry/emitter.rb +23 -11
- data/lib/datadog/core/telemetry/event/app_client_configuration_change.rb +65 -0
- data/lib/datadog/core/telemetry/event/app_closing.rb +18 -0
- data/lib/datadog/core/telemetry/event/app_dependencies_loaded.rb +33 -0
- data/lib/datadog/core/telemetry/event/app_heartbeat.rb +18 -0
- data/lib/datadog/core/telemetry/event/app_integrations_change.rb +58 -0
- data/lib/datadog/core/telemetry/event/app_started.rb +179 -0
- data/lib/datadog/core/telemetry/event/base.rb +40 -0
- data/lib/datadog/core/telemetry/event/distributions.rb +18 -0
- data/lib/datadog/core/telemetry/event/generate_metrics.rb +43 -0
- data/lib/datadog/core/telemetry/event/log.rb +76 -0
- data/lib/datadog/core/telemetry/event/message_batch.rb +42 -0
- data/lib/datadog/core/telemetry/event/synth_app_client_configuration_change.rb +43 -0
- data/lib/datadog/core/telemetry/event.rb +17 -383
- data/lib/datadog/core/telemetry/ext.rb +1 -0
- data/lib/datadog/core/telemetry/http/adapters/net.rb +12 -97
- data/lib/datadog/core/telemetry/logger.rb +1 -1
- data/lib/datadog/core/telemetry/logging.rb +2 -2
- data/lib/datadog/core/telemetry/metric.rb +28 -6
- data/lib/datadog/core/telemetry/request.rb +4 -4
- data/lib/datadog/core/telemetry/transport/http/api.rb +43 -0
- data/lib/datadog/core/telemetry/transport/http/client.rb +49 -0
- data/lib/datadog/core/telemetry/transport/http/telemetry.rb +92 -0
- data/lib/datadog/core/telemetry/transport/http.rb +63 -0
- data/lib/datadog/core/telemetry/transport/telemetry.rb +51 -0
- data/lib/datadog/core/telemetry/worker.rb +128 -25
- data/lib/datadog/core/transport/http/adapters/test.rb +2 -1
- data/lib/datadog/core/transport/http/adapters/unix_socket.rb +1 -1
- data/lib/datadog/{tracing → core}/transport/http/api/instance.rb +18 -1
- data/lib/datadog/core/transport/http/api/spec.rb +36 -0
- data/lib/datadog/{tracing → core}/transport/http/builder.rb +53 -31
- data/lib/datadog/core/transport/http.rb +75 -0
- data/lib/datadog/core/transport/response.rb +4 -0
- data/lib/datadog/core/utils/at_fork_monkey_patch.rb +6 -6
- data/lib/datadog/core/utils/duration.rb +32 -32
- data/lib/datadog/core/utils/forking.rb +2 -2
- data/lib/datadog/core/utils/network.rb +6 -6
- data/lib/datadog/core/utils/only_once_successful.rb +16 -5
- data/lib/datadog/core/utils/time.rb +20 -0
- data/lib/datadog/core/utils/truncation.rb +21 -0
- data/lib/datadog/core/vendor/multipart-post/multipart/post/composite_read_io.rb +1 -1
- data/lib/datadog/core/vendor/multipart-post/multipart/post/multipartable.rb +8 -8
- data/lib/datadog/core/vendor/multipart-post/multipart/post/parts.rb +7 -7
- data/lib/datadog/core/worker.rb +1 -1
- data/lib/datadog/core/workers/async.rb +29 -12
- data/lib/datadog/core/workers/interval_loop.rb +12 -1
- data/lib/datadog/core/workers/runtime_metrics.rb +2 -2
- data/lib/datadog/core.rb +8 -0
- data/lib/datadog/di/base.rb +115 -0
- data/lib/datadog/di/boot.rb +34 -0
- data/lib/datadog/di/code_tracker.rb +26 -15
- data/lib/datadog/di/component.rb +23 -14
- data/lib/datadog/di/configuration/settings.rb +25 -1
- data/lib/datadog/di/contrib/active_record.rb +1 -0
- data/lib/datadog/di/contrib/railtie.rb +15 -0
- data/lib/datadog/di/contrib.rb +28 -0
- data/lib/datadog/di/error.rb +5 -0
- data/lib/datadog/di/instrumenter.rb +111 -20
- data/lib/datadog/di/logger.rb +30 -0
- data/lib/datadog/di/preload.rb +18 -0
- data/lib/datadog/di/probe.rb +14 -7
- data/lib/datadog/di/probe_builder.rb +1 -0
- data/lib/datadog/di/probe_manager.rb +11 -5
- data/lib/datadog/di/probe_notification_builder.rb +34 -8
- data/lib/datadog/di/probe_notifier_worker.rb +52 -26
- data/lib/datadog/di/redactor.rb +0 -1
- data/lib/datadog/di/remote.rb +147 -0
- data/lib/datadog/di/serializer.rb +14 -7
- data/lib/datadog/di/transport/diagnostics.rb +62 -0
- data/lib/datadog/di/transport/http/api.rb +42 -0
- data/lib/datadog/di/transport/http/client.rb +47 -0
- data/lib/datadog/di/transport/http/diagnostics.rb +65 -0
- data/lib/datadog/di/transport/http/input.rb +67 -0
- data/lib/datadog/di/transport/http.rb +57 -0
- data/lib/datadog/di/transport/input.rb +62 -0
- data/lib/datadog/di/utils.rb +103 -0
- data/lib/datadog/di.rb +14 -76
- data/lib/datadog/error_tracking/collector.rb +87 -0
- data/lib/datadog/error_tracking/component.rb +167 -0
- data/lib/datadog/error_tracking/configuration/settings.rb +63 -0
- data/lib/datadog/error_tracking/configuration.rb +11 -0
- data/lib/datadog/error_tracking/ext.rb +18 -0
- data/lib/datadog/error_tracking/extensions.rb +16 -0
- data/lib/datadog/error_tracking/filters.rb +77 -0
- data/lib/datadog/error_tracking.rb +18 -0
- data/lib/datadog/kit/appsec/events.rb +15 -3
- data/lib/datadog/kit/identity.rb +9 -5
- data/lib/datadog/opentelemetry/api/baggage.rb +90 -0
- data/lib/datadog/opentelemetry/api/baggage.rbs +26 -0
- data/lib/datadog/opentelemetry/api/context.rb +16 -2
- data/lib/datadog/opentelemetry/sdk/trace/span.rb +1 -1
- data/lib/datadog/opentelemetry.rb +2 -1
- data/lib/datadog/profiling/collectors/code_provenance.rb +1 -1
- data/lib/datadog/profiling/collectors/info.rb +3 -0
- data/lib/datadog/profiling/collectors/thread_context.rb +1 -1
- data/lib/datadog/profiling/component.rb +60 -76
- data/lib/datadog/profiling/encoded_profile.rb +11 -0
- data/lib/datadog/profiling/exporter.rb +3 -4
- data/lib/datadog/profiling/ext.rb +0 -2
- data/lib/datadog/profiling/flush.rb +5 -8
- data/lib/datadog/profiling/http_transport.rb +6 -85
- data/lib/datadog/profiling/load_native_extension.rb +1 -33
- data/lib/datadog/profiling/scheduler.rb +8 -1
- data/lib/datadog/profiling/stack_recorder.rb +4 -4
- data/lib/datadog/profiling/tag_builder.rb +1 -5
- data/lib/datadog/profiling.rb +6 -2
- data/lib/datadog/tracing/analytics.rb +1 -1
- data/lib/datadog/tracing/component.rb +16 -12
- data/lib/datadog/tracing/configuration/ext.rb +8 -1
- data/lib/datadog/tracing/configuration/settings.rb +22 -10
- data/lib/datadog/tracing/context_provider.rb +1 -1
- data/lib/datadog/tracing/contrib/action_cable/integration.rb +5 -2
- data/lib/datadog/tracing/contrib/action_mailer/integration.rb +6 -2
- data/lib/datadog/tracing/contrib/action_pack/integration.rb +5 -2
- data/lib/datadog/tracing/contrib/action_view/integration.rb +5 -2
- data/lib/datadog/tracing/contrib/active_job/integration.rb +5 -2
- data/lib/datadog/tracing/contrib/active_record/integration.rb +7 -3
- data/lib/datadog/tracing/contrib/active_support/cache/events/cache.rb +7 -2
- data/lib/datadog/tracing/contrib/active_support/cache/instrumentation.rb +36 -1
- data/lib/datadog/tracing/contrib/active_support/cache/patcher.rb +4 -0
- data/lib/datadog/tracing/contrib/active_support/cache/redis.rb +14 -4
- data/lib/datadog/tracing/contrib/active_support/configuration/settings.rb +10 -0
- data/lib/datadog/tracing/contrib/active_support/integration.rb +5 -2
- data/lib/datadog/tracing/contrib/auto_instrument.rb +2 -2
- data/lib/datadog/tracing/contrib/aws/instrumentation.rb +10 -0
- data/lib/datadog/tracing/contrib/aws/integration.rb +3 -0
- data/lib/datadog/tracing/contrib/aws/parsed_context.rb +5 -1
- data/lib/datadog/tracing/contrib/concurrent_ruby/integration.rb +3 -0
- data/lib/datadog/tracing/contrib/configuration/settings.rb +1 -1
- data/lib/datadog/tracing/contrib/elasticsearch/configuration/settings.rb +4 -0
- data/lib/datadog/tracing/contrib/elasticsearch/patcher.rb +6 -1
- data/lib/datadog/tracing/contrib/ethon/easy_patch.rb +4 -5
- data/lib/datadog/tracing/contrib/excon/middleware.rb +5 -3
- data/lib/datadog/tracing/contrib/ext.rb +1 -0
- data/lib/datadog/tracing/contrib/extensions.rb +29 -3
- data/lib/datadog/tracing/contrib/faraday/middleware.rb +5 -3
- data/lib/datadog/tracing/contrib/graphql/configuration/error_extension_env_parser.rb +21 -0
- data/lib/datadog/tracing/contrib/graphql/configuration/settings.rb +11 -0
- data/lib/datadog/tracing/contrib/graphql/ext.rb +5 -0
- data/lib/datadog/tracing/contrib/graphql/unified_trace.rb +102 -11
- data/lib/datadog/tracing/contrib/grpc/datadog_interceptor/client.rb +7 -1
- data/lib/datadog/tracing/contrib/grpc/distributed/propagation.rb +3 -0
- data/lib/datadog/tracing/contrib/http/circuit_breaker.rb +0 -15
- data/lib/datadog/tracing/contrib/http/distributed/propagation.rb +4 -1
- data/lib/datadog/tracing/contrib/http/instrumentation.rb +6 -10
- data/lib/datadog/tracing/contrib/http/integration.rb +3 -0
- data/lib/datadog/tracing/contrib/httpclient/instrumentation.rb +6 -16
- data/lib/datadog/tracing/contrib/httprb/instrumentation.rb +7 -15
- data/lib/datadog/tracing/contrib/httprb/integration.rb +3 -0
- data/lib/datadog/tracing/contrib/kafka/integration.rb +3 -0
- data/lib/datadog/tracing/contrib/karafka/configuration/settings.rb +27 -0
- data/lib/datadog/tracing/contrib/karafka/distributed/propagation.rb +48 -0
- data/lib/datadog/tracing/contrib/karafka/ext.rb +27 -0
- data/lib/datadog/tracing/contrib/karafka/integration.rb +45 -0
- data/lib/datadog/tracing/contrib/karafka/monitor.rb +66 -0
- data/lib/datadog/tracing/contrib/karafka/patcher.rb +71 -0
- data/lib/datadog/tracing/contrib/karafka.rb +37 -0
- data/lib/datadog/tracing/contrib/mongodb/configuration/settings.rb +8 -0
- data/lib/datadog/tracing/contrib/mongodb/ext.rb +1 -0
- data/lib/datadog/tracing/contrib/mongodb/integration.rb +3 -0
- data/lib/datadog/tracing/contrib/mongodb/subscribers.rb +18 -1
- data/lib/datadog/tracing/contrib/opensearch/configuration/settings.rb +17 -0
- data/lib/datadog/tracing/contrib/opensearch/ext.rb +9 -0
- data/lib/datadog/tracing/contrib/opensearch/integration.rb +3 -0
- data/lib/datadog/tracing/contrib/opensearch/patcher.rb +5 -1
- data/lib/datadog/tracing/contrib/patcher.rb +5 -2
- data/lib/datadog/tracing/contrib/presto/integration.rb +3 -0
- data/lib/datadog/tracing/contrib/rack/header_collection.rb +11 -1
- data/lib/datadog/tracing/contrib/rack/integration.rb +2 -2
- data/lib/datadog/tracing/contrib/rack/middlewares.rb +1 -1
- data/lib/datadog/tracing/contrib/rack/request_queue.rb +1 -1
- data/lib/datadog/tracing/contrib/rails/framework.rb +2 -2
- data/lib/datadog/tracing/contrib/rails/patcher.rb +1 -1
- data/lib/datadog/tracing/contrib/rest_client/integration.rb +3 -0
- data/lib/datadog/tracing/contrib/rest_client/request_patch.rb +5 -3
- data/lib/datadog/tracing/contrib/sidekiq/client_tracer.rb +6 -1
- data/lib/datadog/tracing/contrib/sidekiq/distributed/propagation.rb +3 -0
- data/lib/datadog/tracing/contrib/sidekiq/server_tracer.rb +1 -1
- data/lib/datadog/tracing/contrib/span_attribute_schema.rb +6 -1
- data/lib/datadog/tracing/contrib/support.rb +28 -0
- data/lib/datadog/tracing/contrib.rb +1 -0
- data/lib/datadog/tracing/correlation.rb +9 -2
- data/lib/datadog/tracing/distributed/b3_multi.rb +1 -1
- data/lib/datadog/tracing/distributed/b3_single.rb +1 -1
- data/lib/datadog/tracing/distributed/baggage.rb +131 -0
- data/lib/datadog/tracing/distributed/datadog.rb +4 -2
- data/lib/datadog/tracing/distributed/propagation.rb +25 -4
- data/lib/datadog/tracing/distributed/propagation_policy.rb +42 -0
- data/lib/datadog/tracing/metadata/errors.rb +4 -4
- data/lib/datadog/tracing/metadata/ext.rb +5 -0
- data/lib/datadog/tracing/metadata/metastruct.rb +36 -0
- data/lib/datadog/tracing/metadata/metastruct_tagging.rb +42 -0
- data/lib/datadog/tracing/metadata.rb +2 -0
- data/lib/datadog/tracing/sampling/rate_sampler.rb +2 -1
- data/lib/datadog/tracing/sampling/span/rule.rb +0 -1
- data/lib/datadog/tracing/span.rb +22 -5
- data/lib/datadog/tracing/span_event.rb +124 -4
- data/lib/datadog/tracing/span_operation.rb +52 -16
- data/lib/datadog/tracing/sync_writer.rb +9 -5
- data/lib/datadog/tracing/trace_digest.rb +9 -2
- data/lib/datadog/tracing/trace_operation.rb +44 -24
- data/lib/datadog/tracing/trace_segment.rb +6 -4
- data/lib/datadog/tracing/tracer.rb +60 -12
- data/lib/datadog/tracing/transport/http/api.rb +5 -4
- data/lib/datadog/tracing/transport/http/client.rb +5 -4
- data/lib/datadog/tracing/transport/http/traces.rb +13 -44
- data/lib/datadog/tracing/transport/http.rb +13 -70
- data/lib/datadog/tracing/transport/serializable_trace.rb +31 -7
- data/lib/datadog/tracing/transport/trace_formatter.rb +7 -0
- data/lib/datadog/tracing/transport/traces.rb +47 -13
- data/lib/datadog/tracing/utils.rb +1 -1
- data/lib/datadog/tracing/workers/trace_writer.rb +8 -5
- data/lib/datadog/tracing/workers.rb +5 -4
- data/lib/datadog/tracing/writer.rb +10 -6
- data/lib/datadog/tracing.rb +16 -3
- data/lib/datadog/version.rb +2 -2
- data/lib/datadog.rb +2 -0
- metadata +143 -50
- data/ext/datadog_profiling_loader/datadog_profiling_loader.c +0 -142
- data/ext/datadog_profiling_loader/extconf.rb +0 -60
- data/lib/datadog/appsec/contrib/devise/event.rb +0 -57
- data/lib/datadog/appsec/contrib/devise/patcher/authenticatable_patch.rb +0 -77
- data/lib/datadog/appsec/contrib/devise/patcher/registration_controller_patch.rb +0 -54
- data/lib/datadog/appsec/contrib/devise/resource.rb +0 -35
- data/lib/datadog/appsec/contrib/devise/tracking.rb +0 -57
- data/lib/datadog/appsec/contrib/graphql/reactive/multiplex.rb +0 -46
- data/lib/datadog/appsec/contrib/patcher.rb +0 -12
- data/lib/datadog/appsec/contrib/rack/reactive/request.rb +0 -69
- data/lib/datadog/appsec/contrib/rack/reactive/request_body.rb +0 -47
- data/lib/datadog/appsec/contrib/rack/reactive/response.rb +0 -53
- data/lib/datadog/appsec/contrib/rails/reactive/action.rb +0 -53
- data/lib/datadog/appsec/contrib/sinatra/ext.rb +0 -14
- data/lib/datadog/appsec/contrib/sinatra/reactive/routed.rb +0 -48
- data/lib/datadog/appsec/monitor/reactive/set_user.rb +0 -45
- data/lib/datadog/appsec/processor/actions.rb +0 -49
- data/lib/datadog/appsec/processor/context.rb +0 -107
- data/lib/datadog/appsec/reactive/address_hash.rb +0 -22
- data/lib/datadog/appsec/reactive/engine.rb +0 -47
- data/lib/datadog/appsec/reactive/operation.rb +0 -68
- data/lib/datadog/appsec/reactive/subscriber.rb +0 -19
- data/lib/datadog/appsec/scope.rb +0 -58
- data/lib/datadog/appsec/utils/trace_operation.rb +0 -15
- data/lib/datadog/core/crashtracking/agent_base_url.rb +0 -21
- data/lib/datadog/core/remote/transport/http/api/instance.rb +0 -39
- data/lib/datadog/core/remote/transport/http/api/spec.rb +0 -21
- data/lib/datadog/core/remote/transport/http/builder.rb +0 -219
- data/lib/datadog/core/telemetry/http/env.rb +0 -20
- data/lib/datadog/core/telemetry/http/ext.rb +0 -28
- data/lib/datadog/core/telemetry/http/response.rb +0 -70
- data/lib/datadog/core/telemetry/http/transport.rb +0 -90
- data/lib/datadog/di/transport.rb +0 -81
- data/lib/datadog/tracing/transport/http/api/spec.rb +0 -19
@@ -3,7 +3,6 @@
|
|
3
3
|
require 'libdatadog'
|
4
4
|
|
5
5
|
require_relative 'tag_builder'
|
6
|
-
require_relative 'agent_base_url'
|
7
6
|
require_relative '../utils/only_once'
|
8
7
|
require_relative '../utils/at_fork_monkey_patch'
|
9
8
|
|
@@ -19,20 +18,11 @@ module Datadog
|
|
19
18
|
#
|
20
19
|
# Methods prefixed with _native_ are implemented in `crashtracker.c`
|
21
20
|
class Component
|
22
|
-
LIBDATADOG_API_FAILURE =
|
23
|
-
begin
|
24
|
-
require "libdatadog_api.#{RUBY_VERSION[/\d+.\d+/]}_#{RUBY_PLATFORM}"
|
25
|
-
nil
|
26
|
-
rescue LoadError => e
|
27
|
-
e.message
|
28
|
-
end
|
29
|
-
|
30
21
|
ONLY_ONCE = Core::Utils::OnlyOnce.new
|
31
22
|
|
32
23
|
def self.build(settings, agent_settings, logger:)
|
33
24
|
tags = TagBuilder.call(settings)
|
34
|
-
agent_base_url =
|
35
|
-
logger.warn('Missing agent base URL; cannot enable crash tracking') unless agent_base_url
|
25
|
+
agent_base_url = agent_settings.url
|
36
26
|
|
37
27
|
ld_library_path = ::Libdatadog.ld_library_path
|
38
28
|
logger.warn('Missing ld_library_path; cannot enable crash tracking') unless ld_library_path
|
@@ -73,7 +63,7 @@ module Datadog
|
|
73
63
|
# Must NOT reference `self` here, as only the first instance will
|
74
64
|
# be captured by the ONLY_ONCE and we want to pick the latest active one
|
75
65
|
# (which may have different tags or agent config)
|
76
|
-
Datadog.send(:components)
|
66
|
+
Datadog.send(:components, allow_initialization: false)&.crashtracker&.update_on_fork
|
77
67
|
end
|
78
68
|
end
|
79
69
|
end
|
@@ -102,7 +92,8 @@ module Datadog
|
|
102
92
|
path_to_crashtracking_receiver_binary: path_to_crashtracking_receiver_binary,
|
103
93
|
ld_library_path: ld_library_path,
|
104
94
|
tags_as_array: tags.to_a,
|
105
|
-
|
95
|
+
# @ivoanjo: On my machine this needs to be > 5 seconds, and seems to work with 10; the extra 15 is extra margin
|
96
|
+
upload_timeout_seconds: 15,
|
106
97
|
)
|
107
98
|
logger.debug("Crash tracking action: #{action} successful")
|
108
99
|
rescue => e
|
@@ -10,6 +10,7 @@ module Datadog
|
|
10
10
|
# Encoder interface that provides the logic to encode traces and service
|
11
11
|
# @abstract
|
12
12
|
module Encoder
|
13
|
+
# :nocov:
|
13
14
|
def content_type
|
14
15
|
raise NotImplementedError
|
15
16
|
end
|
@@ -23,6 +24,13 @@ module Datadog
|
|
23
24
|
def encode(_)
|
24
25
|
raise NotImplementedError
|
25
26
|
end
|
27
|
+
|
28
|
+
# Deserializes a value serialized with {#encode}.
|
29
|
+
# This method is used for debugging purposes.
|
30
|
+
def decode(_)
|
31
|
+
raise NotImplementedError
|
32
|
+
end
|
33
|
+
# :nocov:
|
26
34
|
end
|
27
35
|
|
28
36
|
# Encoder for the JSON format
|
@@ -41,8 +49,12 @@ module Datadog
|
|
41
49
|
JSON.dump(obj)
|
42
50
|
end
|
43
51
|
|
52
|
+
def decode(obj)
|
53
|
+
JSON.parse(obj)
|
54
|
+
end
|
55
|
+
|
44
56
|
def join(encoded_data)
|
45
|
-
"[#{encoded_data.join(
|
57
|
+
"[#{encoded_data.join(",")}]"
|
46
58
|
end
|
47
59
|
end
|
48
60
|
|
@@ -62,6 +74,10 @@ module Datadog
|
|
62
74
|
MessagePack.pack(obj)
|
63
75
|
end
|
64
76
|
|
77
|
+
def decode(obj)
|
78
|
+
MessagePack.unpack(obj)
|
79
|
+
end
|
80
|
+
|
65
81
|
def join(encoded_data)
|
66
82
|
packer = MessagePack::Packer.new
|
67
83
|
packer.write_array_header(encoded_data.size)
|
@@ -0,0 +1,78 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Datadog
|
4
|
+
module Core
|
5
|
+
module Environment
|
6
|
+
# Retrieves the agent's `/info` endpoint data.
|
7
|
+
# This data can be used to determine the capabilities of the local Datadog agent.
|
8
|
+
#
|
9
|
+
# @example Example response payload
|
10
|
+
# {
|
11
|
+
# "version" : "7.57.2",
|
12
|
+
# "git_commit" : "38ba0c7",
|
13
|
+
# "endpoints" : [ "/v0.4/traces", "/v0.4/services", "/v0.7/traces", "/v0.7/config" ],
|
14
|
+
# "client_drop_p0s" : true,
|
15
|
+
# "span_meta_structs" : true,
|
16
|
+
# "long_running_spans" : true,
|
17
|
+
# "evp_proxy_allowed_headers" : [ "Content-Type", "Accept-Encoding", "Content-Encoding", "User-Agent" ],
|
18
|
+
# "config" : {
|
19
|
+
# "default_env" : "none",
|
20
|
+
# "target_tps" : 10,
|
21
|
+
# "max_eps" : 200,
|
22
|
+
# "receiver_port" : 8126,
|
23
|
+
# "receiver_socket" : "/var/run/datadog/apm.socket",
|
24
|
+
# "connection_limit" : 0,
|
25
|
+
# "receiver_timeout" : 0,
|
26
|
+
# "max_request_bytes" : 26214400,
|
27
|
+
# "statsd_port" : 8125,
|
28
|
+
# "analyzed_spans_by_service" : { },
|
29
|
+
# "obfuscation" : {
|
30
|
+
# "elastic_search" : true,
|
31
|
+
# "mongo" : true,
|
32
|
+
# "sql_exec_plan" : false,
|
33
|
+
# "sql_exec_plan_normalize" : false,
|
34
|
+
# "http" : {
|
35
|
+
# "remove_query_string" : false,
|
36
|
+
# "remove_path_digits" : false
|
37
|
+
# },
|
38
|
+
# "remove_stack_traces" : false,
|
39
|
+
# "redis" : {
|
40
|
+
# "Enabled" : true,
|
41
|
+
# "RemoveAllArgs" : false
|
42
|
+
# },
|
43
|
+
# "memcached" : {
|
44
|
+
# "Enabled" : true,
|
45
|
+
# "KeepCommand" : false
|
46
|
+
# }
|
47
|
+
# }
|
48
|
+
# },
|
49
|
+
# "peer_tags" : null
|
50
|
+
# }
|
51
|
+
#
|
52
|
+
# @see https://github.com/DataDog/datadog-agent/blob/f07df0a3c1fca0c83b5a15f553bd994091b0c8ac/pkg/trace/api/info.go#L20
|
53
|
+
class AgentInfo
|
54
|
+
attr_reader :agent_settings, :logger
|
55
|
+
|
56
|
+
def initialize(agent_settings, logger: Datadog.logger)
|
57
|
+
@agent_settings = agent_settings
|
58
|
+
@logger = logger
|
59
|
+
@client = Remote::Transport::HTTP.root(agent_settings: agent_settings, logger: logger)
|
60
|
+
end
|
61
|
+
|
62
|
+
# Fetches the information from the agent.
|
63
|
+
# @return [Datadog::Core::Remote::Transport::HTTP::Negotiation::Response] the response from the agent
|
64
|
+
# @return [nil] if an error occurred while fetching the information
|
65
|
+
def fetch
|
66
|
+
res = @client.send_info
|
67
|
+
return unless res.ok?
|
68
|
+
|
69
|
+
res
|
70
|
+
end
|
71
|
+
|
72
|
+
def ==(other)
|
73
|
+
other.is_a?(self.class) && other.agent_settings == agent_settings
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
@@ -23,20 +23,18 @@ module Datadog
|
|
23
23
|
|
24
24
|
def descriptors(process = 'self')
|
25
25
|
[].tap do |descriptors|
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
descriptors << parse(line) unless line.empty?
|
33
|
-
end
|
26
|
+
filepath = "/proc/#{process}/cgroup"
|
27
|
+
|
28
|
+
if File.exist?(filepath)
|
29
|
+
File.foreach("/proc/#{process}/cgroup") do |line|
|
30
|
+
line = line.strip
|
31
|
+
descriptors << parse(line) unless line.empty?
|
34
32
|
end
|
35
|
-
rescue StandardError => e
|
36
|
-
Datadog.logger.error(
|
37
|
-
"Error while parsing cgroup. Cause: #{e.class.name} #{e.message} Location: #{Array(e.backtrace).first}"
|
38
|
-
)
|
39
33
|
end
|
34
|
+
rescue => e
|
35
|
+
Datadog.logger.error(
|
36
|
+
"Error while parsing cgroup. Cause: #{e.class.name} #{e.message} Location: #{Array(e.backtrace).first}"
|
37
|
+
)
|
40
38
|
end
|
41
39
|
end
|
42
40
|
|
@@ -37,52 +37,50 @@ module Datadog
|
|
37
37
|
|
38
38
|
def descriptor
|
39
39
|
@descriptor ||= Descriptor.new.tap do |descriptor|
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
40
|
+
Cgroup.descriptors.each do |cgroup_descriptor|
|
41
|
+
# Parse container data from cgroup descriptor
|
42
|
+
path = cgroup_descriptor.path
|
43
|
+
next if path.nil?
|
44
|
+
|
45
|
+
# Split path into parts
|
46
|
+
parts = path.split('/')
|
47
|
+
parts.shift # Remove leading empty part
|
48
|
+
|
49
|
+
# Read info from path
|
50
|
+
next if parts.empty?
|
51
|
+
|
52
|
+
platform = parts[0][PLATFORM_REGEX, :platform]
|
53
|
+
container_id, task_uid = nil
|
54
|
+
|
55
|
+
case parts.length
|
56
|
+
when 0..1
|
57
|
+
next
|
58
|
+
when 2
|
59
|
+
container_id = parts[-1][CONTAINER_REGEX, :container] \
|
60
|
+
|| parts[-1][FARGATE_14_CONTAINER_REGEX, :container]
|
61
|
+
else
|
62
|
+
if (container_id = parts[-1][CONTAINER_REGEX, :container])
|
63
|
+
task_uid = parts[-2][POD_REGEX, :pod] || parts[1][POD_REGEX, :pod]
|
62
64
|
else
|
63
|
-
|
64
|
-
task_uid = parts[-2][POD_REGEX, :pod] || parts[1][POD_REGEX, :pod]
|
65
|
-
else
|
66
|
-
container_id = parts[-1][FARGATE_14_CONTAINER_REGEX, :container]
|
67
|
-
end
|
65
|
+
container_id = parts[-1][FARGATE_14_CONTAINER_REGEX, :container]
|
68
66
|
end
|
67
|
+
end
|
69
68
|
|
70
|
-
|
71
|
-
|
72
|
-
|
69
|
+
# If container ID wasn't found, ignore.
|
70
|
+
# Path might describe a non-container environment.
|
71
|
+
next if container_id.nil?
|
73
72
|
|
74
|
-
|
75
|
-
|
76
|
-
|
73
|
+
descriptor.platform = platform
|
74
|
+
descriptor.container_id = container_id
|
75
|
+
descriptor.task_uid = task_uid
|
77
76
|
|
78
|
-
|
79
|
-
end
|
80
|
-
rescue StandardError => e
|
81
|
-
Datadog.logger.error(
|
82
|
-
"Error while parsing container info. Cause: #{e.class.name} #{e.message} " \
|
83
|
-
"Location: #{Array(e.backtrace).first}"
|
84
|
-
)
|
77
|
+
break
|
85
78
|
end
|
79
|
+
rescue => e
|
80
|
+
Datadog.logger.error(
|
81
|
+
"Error while parsing container info. Cause: #{e.class.name} #{e.message} " \
|
82
|
+
"Location: #{Array(e.backtrace).first}"
|
83
|
+
)
|
86
84
|
end
|
87
85
|
end
|
88
86
|
end
|
@@ -9,11 +9,11 @@ module Datadog
|
|
9
9
|
module Ext
|
10
10
|
# e.g for CRuby '3.0.1', for JRuby '9.2.19.0', for TruffleRuby '21.1.0'
|
11
11
|
ENGINE_VERSION = if defined?(RUBY_ENGINE_VERSION)
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
12
|
+
RUBY_ENGINE_VERSION
|
13
|
+
else
|
14
|
+
# CRuby < 2.3 doesn't support RUBY_ENGINE_VERSION
|
15
|
+
RUBY_VERSION
|
16
|
+
end
|
17
17
|
|
18
18
|
ENV_API_KEY = 'DD_API_KEY'
|
19
19
|
ENV_ENVIRONMENT = 'DD_ENV'
|
@@ -26,7 +26,7 @@ module Datadog
|
|
26
26
|
FALLBACK_SERVICE_NAME =
|
27
27
|
begin
|
28
28
|
File.basename($PROGRAM_NAME, '.*')
|
29
|
-
rescue
|
29
|
+
rescue
|
30
30
|
'ruby'
|
31
31
|
end.freeze
|
32
32
|
|
@@ -67,12 +67,12 @@ module Datadog
|
|
67
67
|
|
68
68
|
rest.split('.').tap do |segments|
|
69
69
|
if segments.length >= 4
|
70
|
-
pre
|
71
|
-
build = "+#{segments.join(
|
70
|
+
pre = "-#{segments.shift}"
|
71
|
+
build = "+#{segments.join(".")}"
|
72
72
|
elsif segments.length == 1
|
73
73
|
pre = "-#{segments.shift}"
|
74
74
|
else
|
75
|
-
build = "+#{segments.join(
|
75
|
+
build = "+#{segments.join(".")}"
|
76
76
|
end
|
77
77
|
end
|
78
78
|
|
@@ -13,18 +13,18 @@ module Datadog
|
|
13
13
|
|
14
14
|
# @return [String] ISA of host; `uname -m`
|
15
15
|
def architecture
|
16
|
-
Identity.lang_version >= '2.2' ? Etc.uname[:machine] : Gem::Platform.local.cpu
|
16
|
+
(Identity.lang_version >= '2.2') ? Etc.uname[:machine] : Gem::Platform.local.cpu
|
17
17
|
end
|
18
18
|
|
19
19
|
# @return [String] name of host; `uname -n`
|
20
20
|
def hostname
|
21
|
-
Identity.lang_version >= '2.2' ? Etc.uname[:nodename] : nil
|
21
|
+
(Identity.lang_version >= '2.2') ? Etc.uname[:nodename] : nil
|
22
22
|
end
|
23
23
|
|
24
24
|
# System name, normally `Linux` or `Darwin` (but 'Mac OS X' on JRuby);
|
25
25
|
# @return [String] name of kernel; `uname -s`.
|
26
26
|
def kernel_name
|
27
|
-
Identity.lang_version >= '2.2' ? Etc.uname[:sysname] : Gem::Platform.local.os.capitalize
|
27
|
+
(Identity.lang_version >= '2.2') ? Etc.uname[:sysname] : Gem::Platform.local.os.capitalize
|
28
28
|
end
|
29
29
|
|
30
30
|
# @return [String] kernel release; `uname -r`
|
data/lib/datadog/core/error.rb
CHANGED
@@ -11,12 +11,17 @@ module Datadog
|
|
11
11
|
class << self
|
12
12
|
def build_from(value)
|
13
13
|
case value
|
14
|
-
|
15
|
-
when Array then new(*value)
|
14
|
+
# A Ruby {Exception} is the most common parameter type.
|
16
15
|
when Exception then new(value.class, value.message, full_backtrace(value))
|
17
|
-
|
16
|
+
# steep:ignore:start
|
17
|
+
# Steep doesn't like an array with up to 3 elements to be passed here: it thinks the array is unbounded.
|
18
|
+
when Array then new(*value)
|
19
|
+
# Steep can not follow the logic inside the lambda, thus it doesn't know `value` responds to `:message`.
|
20
|
+
when ->(v) { v.respond_to?(:message) } then new(value.class, value.message)
|
21
|
+
# steep:ignore:end
|
18
22
|
when String then new(nil, value)
|
19
|
-
|
23
|
+
when Error then value
|
24
|
+
else Error.new # Blank error
|
20
25
|
end
|
21
26
|
end
|
22
27
|
|
@@ -34,7 +39,7 @@ module Datadog
|
|
34
39
|
# but it's around 3x faster in our benchmark test
|
35
40
|
# at `error_spec.rb`.
|
36
41
|
def full_backtrace(ex)
|
37
|
-
backtrace =
|
42
|
+
backtrace = +''
|
38
43
|
backtrace_for(ex, backtrace)
|
39
44
|
|
40
45
|
# Avoid circular causes
|
@@ -75,7 +80,7 @@ module Datadog
|
|
75
80
|
if trace[1]
|
76
81
|
# Ident stack trace for caller lines, to separate
|
77
82
|
# them from the main error lines.
|
78
|
-
trace[1..-1]
|
83
|
+
trace[1..-1]&.each do |line|
|
79
84
|
backtrace << "\n\tfrom "
|
80
85
|
backtrace << line
|
81
86
|
end
|
@@ -92,9 +97,6 @@ module Datadog
|
|
92
97
|
@message = Utils.utf8_encode(message)
|
93
98
|
@backtrace = Utils.utf8_encode(backtrace)
|
94
99
|
end
|
95
|
-
|
96
|
-
BlankError = Error.new
|
97
|
-
ContainsMessage = ->(v) { v.respond_to?(:message) }
|
98
100
|
end
|
99
101
|
end
|
100
102
|
end
|
data/lib/datadog/core/logger.rb
CHANGED
@@ -28,7 +28,7 @@ module Datadog
|
|
28
28
|
|
29
29
|
if message.nil?
|
30
30
|
if block
|
31
|
-
super
|
31
|
+
super do
|
32
32
|
"[#{self.progname}] #{where}#{yield}"
|
33
33
|
end
|
34
34
|
else
|
@@ -39,7 +39,7 @@ module Datadog
|
|
39
39
|
end
|
40
40
|
end
|
41
41
|
|
42
|
-
|
42
|
+
alias_method :log, :add
|
43
43
|
end
|
44
44
|
end
|
45
45
|
end
|
@@ -21,9 +21,11 @@ module Datadog
|
|
21
21
|
extend Options
|
22
22
|
extend Helpers
|
23
23
|
|
24
|
-
attr_reader :statsd
|
24
|
+
attr_reader :statsd, :logger, :telemetry
|
25
25
|
|
26
|
-
def initialize(statsd: nil, enabled: true, **_)
|
26
|
+
def initialize(telemetry:, logger: Datadog.logger, statsd: nil, enabled: true, **_)
|
27
|
+
@telemetry = telemetry
|
28
|
+
@logger = logger
|
27
29
|
@statsd =
|
28
30
|
if supported?
|
29
31
|
statsd || default_statsd_client
|
@@ -73,10 +75,10 @@ module Datadog
|
|
73
75
|
#
|
74
76
|
# Versions < 5.0 are always single-threaded, but do not have the kwarg option.
|
75
77
|
options = if dogstatsd_version >= Gem::Version.new('5.2')
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
78
|
+
{single_thread: true}
|
79
|
+
else
|
80
|
+
{}
|
81
|
+
end
|
80
82
|
|
81
83
|
Datadog::Statsd.new(default_hostname, default_port, **options)
|
82
84
|
end
|
@@ -97,11 +99,11 @@ module Datadog
|
|
97
99
|
raise ArgumentError if value.nil?
|
98
100
|
|
99
101
|
statsd.count(stat, value, metric_options(options))
|
100
|
-
rescue
|
101
|
-
|
102
|
+
rescue => e
|
103
|
+
logger.error(
|
102
104
|
"Failed to send count stat. Cause: #{e.class.name} #{e.message} Source: #{Array(e.backtrace).first}"
|
103
105
|
)
|
104
|
-
|
106
|
+
telemetry.report(e, description: 'Failed to send count stat')
|
105
107
|
end
|
106
108
|
|
107
109
|
def distribution(stat, value = nil, options = nil, &block)
|
@@ -111,11 +113,11 @@ module Datadog
|
|
111
113
|
raise ArgumentError if value.nil?
|
112
114
|
|
113
115
|
statsd.distribution(stat, value, metric_options(options))
|
114
|
-
rescue
|
115
|
-
|
116
|
+
rescue => e
|
117
|
+
logger.error(
|
116
118
|
"Failed to send distribution stat. Cause: #{e.class.name} #{e.message} Source: #{Array(e.backtrace).first}"
|
117
119
|
)
|
118
|
-
|
120
|
+
telemetry.report(e, description: 'Failed to send distribution stat')
|
119
121
|
end
|
120
122
|
|
121
123
|
def increment(stat, options = nil)
|
@@ -124,11 +126,11 @@ module Datadog
|
|
124
126
|
options = yield if block_given?
|
125
127
|
|
126
128
|
statsd.increment(stat, metric_options(options))
|
127
|
-
rescue
|
128
|
-
|
129
|
+
rescue => e
|
130
|
+
logger.error(
|
129
131
|
"Failed to send increment stat. Cause: #{e.class.name} #{e.message} Source: #{Array(e.backtrace).first}"
|
130
132
|
)
|
131
|
-
|
133
|
+
telemetry.report(e, description: 'Failed to send increment stat')
|
132
134
|
end
|
133
135
|
|
134
136
|
def gauge(stat, value = nil, options = nil, &block)
|
@@ -138,11 +140,11 @@ module Datadog
|
|
138
140
|
raise ArgumentError if value.nil?
|
139
141
|
|
140
142
|
statsd.gauge(stat, value, metric_options(options))
|
141
|
-
rescue
|
142
|
-
|
143
|
+
rescue => e
|
144
|
+
logger.error(
|
143
145
|
"Failed to send gauge stat. Cause: #{e.class.name} #{e.message} Source: #{Array(e.backtrace).first}"
|
144
146
|
)
|
145
|
-
|
147
|
+
telemetry.report(e, description: 'Failed to send gauge stat')
|
146
148
|
end
|
147
149
|
|
148
150
|
def time(stat, options = nil)
|
@@ -157,12 +159,12 @@ module Datadog
|
|
157
159
|
finished = Utils::Time.get_time
|
158
160
|
distribution(stat, ((finished - start) * 1000), options)
|
159
161
|
end
|
160
|
-
rescue
|
162
|
+
rescue => e
|
161
163
|
# TODO: Likely to be redundant, since `distribution` handles its own errors.
|
162
|
-
|
164
|
+
logger.error(
|
163
165
|
"Failed to send time stat. Cause: #{e.class.name} #{e.message} Source: #{Array(e.backtrace).first}"
|
164
166
|
)
|
165
|
-
|
167
|
+
telemetry.report(e, description: 'Failed to send time stat')
|
166
168
|
end
|
167
169
|
end
|
168
170
|
|
@@ -171,7 +173,7 @@ module Datadog
|
|
171
173
|
end
|
172
174
|
|
173
175
|
def close
|
174
|
-
@statsd.close if @statsd
|
176
|
+
@statsd.close if @statsd&.respond_to?(:close)
|
175
177
|
end
|
176
178
|
|
177
179
|
private
|
@@ -183,10 +185,8 @@ module Datadog
|
|
183
185
|
defined?(Datadog::Statsd::VERSION) &&
|
184
186
|
Datadog::Statsd::VERSION &&
|
185
187
|
Gem::Version.new(Datadog::Statsd::VERSION)
|
186
|
-
) ||
|
187
|
-
Gem.loaded_specs['dogstatsd-ruby']
|
188
|
-
Gem.loaded_specs['dogstatsd-ruby'].version
|
189
|
-
)
|
188
|
+
) ||
|
189
|
+
Gem.loaded_specs['dogstatsd-ruby']&.version
|
190
190
|
end
|
191
191
|
|
192
192
|
IGNORED_STATSD_ONLY_ONCE = Utils::OnlyOnce.new
|
@@ -194,7 +194,7 @@ module Datadog
|
|
194
194
|
|
195
195
|
def ignored_statsd_warning
|
196
196
|
IGNORED_STATSD_ONLY_ONCE.run do
|
197
|
-
|
197
|
+
logger.warn(
|
198
198
|
'Ignoring user-supplied statsd instance as currently-installed version of dogstastd-ruby is incompatible. ' \
|
199
199
|
"To fix this, ensure that you have `gem 'dogstatsd-ruby', '~> 5.3'` on your Gemfile or gems.rb file."
|
200
200
|
)
|
@@ -17,25 +17,25 @@ module Datadog
|
|
17
17
|
l.progname = nil
|
18
18
|
l.formatter = proc do |_severity, datetime, _progname, msg|
|
19
19
|
stat = JSON.parse(msg[3..-1]) # Trim off leading progname...
|
20
|
-
"#{JSON.dump(timestamp: datetime.to_i, message:
|
20
|
+
"#{JSON.dump(timestamp: datetime.to_i, message: "Metric sent.", metric: stat)}\n"
|
21
21
|
end
|
22
22
|
end
|
23
23
|
end
|
24
24
|
|
25
25
|
def count(stat, value, options = nil)
|
26
|
-
logger.info({
|
26
|
+
logger.info({stat: stat, type: :count, value: value, options: options}.to_json)
|
27
27
|
end
|
28
28
|
|
29
29
|
def distribution(stat, value, options = nil)
|
30
|
-
logger.info({
|
30
|
+
logger.info({stat: stat, type: :distribution, value: value, options: options}.to_json)
|
31
31
|
end
|
32
32
|
|
33
33
|
def increment(stat, options = nil)
|
34
|
-
logger.info({
|
34
|
+
logger.info({stat: stat, type: :increment, options: options}.to_json)
|
35
35
|
end
|
36
36
|
|
37
37
|
def gauge(stat, value, options = nil)
|
38
|
-
logger.info({
|
38
|
+
logger.info({stat: stat, type: :gauge, value: value, options: options}.to_json)
|
39
39
|
end
|
40
40
|
end
|
41
41
|
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Datadog
|
4
|
+
module Core
|
5
|
+
# Class used to store tracer metadata in a native file descriptor.
|
6
|
+
class ProcessDiscovery
|
7
|
+
def self.get_and_store_metadata(settings, logger)
|
8
|
+
if (libdatadog_api_failure = Datadog::Core::LIBDATADOG_API_FAILURE)
|
9
|
+
logger.debug("Cannot enable process discovery: #{libdatadog_api_failure}")
|
10
|
+
return
|
11
|
+
end
|
12
|
+
metadata = get_metadata(settings)
|
13
|
+
_native_store_tracer_metadata(logger, **metadata)
|
14
|
+
end
|
15
|
+
|
16
|
+
# According to the RFC, runtime_id, service_name, service_env, service_version are optional.
|
17
|
+
# In the C method exposed by ddcommon, memfd_create replaces empty strings by None for these fields.
|
18
|
+
private_class_method def self.get_metadata(settings)
|
19
|
+
{
|
20
|
+
schema_version: 1,
|
21
|
+
runtime_id: Core::Environment::Identity.id,
|
22
|
+
tracer_language: Core::Environment::Identity.lang,
|
23
|
+
tracer_version: Core::Environment::Identity.gem_datadog_version_semver2,
|
24
|
+
hostname: Core::Environment::Socket.hostname,
|
25
|
+
service_name: settings.service || '',
|
26
|
+
service_env: settings.env || '',
|
27
|
+
service_version: settings.version || ''
|
28
|
+
}
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|