datadog 2.12.1 → 2.19.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 +243 -2
- data/ext/datadog_profiling_native_extension/collectors_cpu_and_wall_time_worker.c +63 -56
- data/ext/datadog_profiling_native_extension/collectors_stack.c +263 -76
- data/ext/datadog_profiling_native_extension/collectors_stack.h +20 -3
- data/ext/datadog_profiling_native_extension/collectors_thread_context.c +78 -26
- data/ext/datadog_profiling_native_extension/collectors_thread_context.h +1 -0
- 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 +10 -0
- data/ext/datadog_profiling_native_extension/heap_recorder.c +247 -364
- data/ext/datadog_profiling_native_extension/heap_recorder.h +4 -6
- data/ext/datadog_profiling_native_extension/http_transport.c +60 -94
- data/ext/datadog_profiling_native_extension/libdatadog_helpers.c +22 -0
- data/ext/datadog_profiling_native_extension/libdatadog_helpers.h +8 -5
- data/ext/datadog_profiling_native_extension/private_vm_api_access.c +41 -21
- data/ext/datadog_profiling_native_extension/private_vm_api_access.h +6 -4
- data/ext/datadog_profiling_native_extension/profiling.c +2 -0
- data/ext/datadog_profiling_native_extension/ruby_helpers.c +1 -13
- data/ext/datadog_profiling_native_extension/ruby_helpers.h +3 -11
- data/ext/datadog_profiling_native_extension/stack_recorder.c +173 -76
- data/ext/libdatadog_api/crashtracker.c +11 -12
- 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/extconf.rb +2 -2
- data/ext/libdatadog_api/init.c +15 -0
- data/ext/libdatadog_api/library_config.c +164 -0
- data/ext/libdatadog_api/library_config.h +25 -0
- data/ext/libdatadog_api/macos_development.md +3 -3
- data/ext/libdatadog_api/process_discovery.c +112 -0
- data/ext/libdatadog_api/process_discovery.h +5 -0
- data/ext/libdatadog_extconf_helpers.rb +2 -2
- data/lib/datadog/appsec/actions_handler/serializable_backtrace.rb +89 -0
- data/lib/datadog/appsec/actions_handler.rb +24 -2
- data/lib/datadog/appsec/anonymizer.rb +16 -0
- data/lib/datadog/appsec/api_security/lru_cache.rb +56 -0
- data/lib/datadog/appsec/api_security/route_extractor.rb +71 -0
- data/lib/datadog/appsec/api_security/sampler.rb +59 -0
- data/lib/datadog/appsec/api_security.rb +23 -0
- data/lib/datadog/appsec/assets/waf_rules/README.md +50 -5
- data/lib/datadog/appsec/assets/waf_rules/recommended.json +257 -85
- data/lib/datadog/appsec/assets/waf_rules/strict.json +10 -78
- data/lib/datadog/appsec/autoload.rb +1 -1
- data/lib/datadog/appsec/component.rb +46 -61
- data/lib/datadog/appsec/compressed_json.rb +40 -0
- data/lib/datadog/appsec/configuration/settings.rb +153 -30
- data/lib/datadog/appsec/context.rb +7 -7
- data/lib/datadog/appsec/contrib/active_record/instrumentation.rb +10 -12
- data/lib/datadog/appsec/contrib/active_record/integration.rb +2 -2
- data/lib/datadog/appsec/contrib/active_record/patcher.rb +22 -22
- data/lib/datadog/appsec/contrib/auto_instrument.rb +1 -1
- data/lib/datadog/appsec/contrib/devise/configuration.rb +7 -31
- 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 +34 -23
- 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} +2 -2
- data/lib/datadog/appsec/contrib/devise/tracking_middleware.rb +106 -0
- data/lib/datadog/appsec/contrib/excon/integration.rb +1 -1
- data/lib/datadog/appsec/contrib/excon/ssrf_detection_middleware.rb +9 -10
- data/lib/datadog/appsec/contrib/faraday/integration.rb +1 -1
- data/lib/datadog/appsec/contrib/faraday/ssrf_detection_middleware.rb +8 -9
- data/lib/datadog/appsec/contrib/graphql/gateway/watcher.rb +8 -9
- data/lib/datadog/appsec/contrib/graphql/integration.rb +1 -1
- data/lib/datadog/appsec/contrib/rack/ext.rb +34 -0
- data/lib/datadog/appsec/contrib/rack/gateway/watcher.rb +49 -32
- data/lib/datadog/appsec/contrib/rack/integration.rb +1 -1
- data/lib/datadog/appsec/contrib/rack/request_middleware.rb +42 -30
- data/lib/datadog/appsec/contrib/rails/gateway/watcher.rb +11 -13
- data/lib/datadog/appsec/contrib/rails/integration.rb +1 -1
- data/lib/datadog/appsec/contrib/rails/patcher.rb +21 -21
- data/lib/datadog/appsec/contrib/rest_client/integration.rb +1 -1
- data/lib/datadog/appsec/contrib/rest_client/request_ssrf_detection_patch.rb +10 -11
- data/lib/datadog/appsec/contrib/sinatra/gateway/watcher.rb +17 -23
- data/lib/datadog/appsec/contrib/sinatra/integration.rb +1 -1
- data/lib/datadog/appsec/event.rb +96 -135
- data/lib/datadog/appsec/ext.rb +4 -2
- 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/telemetry.rb +1 -1
- data/lib/datadog/appsec/monitor/gateway/watcher.rb +49 -14
- data/lib/datadog/appsec/processor/rule_loader.rb +30 -33
- data/lib/datadog/appsec/remote.rb +31 -59
- data/lib/datadog/appsec/response.rb +6 -6
- data/lib/datadog/appsec/security_engine/engine.rb +194 -0
- data/lib/datadog/appsec/security_engine/runner.rb +13 -14
- data/lib/datadog/appsec/security_event.rb +39 -0
- data/lib/datadog/appsec/utils.rb +0 -2
- data/lib/datadog/appsec.rb +5 -8
- data/lib/datadog/core/buffer/random.rb +18 -2
- data/lib/datadog/core/configuration/agent_settings.rb +52 -0
- data/lib/datadog/core/configuration/agent_settings_resolver.rb +4 -46
- data/lib/datadog/core/configuration/agentless_settings_resolver.rb +176 -0
- data/lib/datadog/core/configuration/components.rb +48 -31
- data/lib/datadog/core/configuration/components_state.rb +23 -0
- data/lib/datadog/core/configuration/ext.rb +4 -0
- data/lib/datadog/core/configuration/option.rb +81 -45
- data/lib/datadog/core/configuration/option_definition.rb +4 -4
- data/lib/datadog/core/configuration/options.rb +3 -3
- data/lib/datadog/core/configuration/settings.rb +109 -44
- data/lib/datadog/core/configuration/stable_config.rb +22 -0
- data/lib/datadog/core/configuration.rb +40 -16
- data/lib/datadog/core/crashtracking/component.rb +3 -10
- data/lib/datadog/core/crashtracking/tag_builder.rb +4 -22
- data/lib/datadog/core/diagnostics/environment_logger.rb +1 -1
- data/lib/datadog/core/encoding.rb +1 -1
- data/lib/datadog/core/environment/agent_info.rb +4 -3
- 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 +20 -21
- data/lib/datadog/core/metrics/logging.rb +5 -5
- data/lib/datadog/core/process_discovery/tracer_memfd.rb +15 -0
- data/lib/datadog/core/process_discovery.rb +36 -0
- data/lib/datadog/core/rate_limiter.rb +4 -2
- data/lib/datadog/core/remote/client.rb +40 -32
- data/lib/datadog/core/remote/component.rb +6 -9
- 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 +14 -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/client.rb +5 -4
- data/lib/datadog/core/remote/transport/http/config.rb +27 -37
- data/lib/datadog/core/remote/transport/http/negotiation.rb +7 -33
- data/lib/datadog/core/remote/transport/http.rb +22 -57
- data/lib/datadog/core/remote/transport/negotiation.rb +4 -3
- data/lib/datadog/core/runtime/metrics.rb +12 -5
- data/lib/datadog/core/tag_builder.rb +56 -0
- data/lib/datadog/core/telemetry/component.rb +81 -52
- data/lib/datadog/core/telemetry/emitter.rb +23 -11
- data/lib/datadog/core/telemetry/event/app_client_configuration_change.rb +66 -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 +287 -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 -472
- data/lib/datadog/core/telemetry/http/adapters/net.rb +12 -97
- data/lib/datadog/core/telemetry/logger.rb +5 -4
- data/lib/datadog/core/telemetry/logging.rb +11 -5
- data/lib/datadog/core/telemetry/metric.rb +8 -8
- 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 +90 -24
- data/lib/datadog/core/transport/http/adapters/net.rb +17 -2
- data/lib/datadog/core/transport/http/adapters/test.rb +2 -1
- data/lib/datadog/core/transport/http/api/instance.rb +17 -0
- data/lib/datadog/core/transport/http/api/spec.rb +17 -0
- data/lib/datadog/core/transport/http/builder.rb +19 -17
- data/lib/datadog/core/transport/http/env.rb +8 -0
- data/lib/datadog/core/transport/http.rb +39 -2
- 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/utils.rb +7 -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/boot.rb +34 -0
- data/lib/datadog/di/component.rb +0 -2
- data/lib/datadog/di/instrumenter.rb +48 -5
- data/lib/datadog/di/probe_notification_builder.rb +38 -43
- data/lib/datadog/di/probe_notifier_worker.rb +25 -17
- data/lib/datadog/di/remote.rb +2 -0
- data/lib/datadog/di/serializer.rb +10 -2
- data/lib/datadog/di/transport/diagnostics.rb +4 -3
- data/lib/datadog/di/transport/http/api.rb +2 -12
- data/lib/datadog/di/transport/http/client.rb +4 -3
- data/lib/datadog/di/transport/http/diagnostics.rb +7 -34
- data/lib/datadog/di/transport/http/input.rb +18 -35
- data/lib/datadog/di/transport/http.rb +14 -62
- data/lib/datadog/di/transport/input.rb +14 -5
- data/lib/datadog/di/utils.rb +5 -0
- data/lib/datadog/di.rb +0 -33
- 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/v2.rb +195 -0
- data/lib/datadog/kit/appsec/events.rb +12 -0
- data/lib/datadog/kit/identity.rb +5 -1
- 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 +18 -9
- data/lib/datadog/profiling/collectors/cpu_and_wall_time_worker.rb +6 -0
- data/lib/datadog/profiling/collectors/idle_sampling_helper.rb +1 -0
- data/lib/datadog/profiling/collectors/info.rb +44 -0
- data/lib/datadog/profiling/collectors/thread_context.rb +17 -2
- data/lib/datadog/profiling/component.rb +8 -9
- data/lib/datadog/profiling/encoded_profile.rb +11 -0
- data/lib/datadog/profiling/exporter.rb +12 -7
- data/lib/datadog/profiling/ext.rb +0 -14
- data/lib/datadog/profiling/flush.rb +5 -8
- data/lib/datadog/profiling/http_transport.rb +7 -61
- data/lib/datadog/profiling/profiler.rb +2 -0
- data/lib/datadog/profiling/scheduler.rb +10 -2
- data/lib/datadog/profiling/sequence_tracker.rb +44 -0
- data/lib/datadog/profiling/stack_recorder.rb +9 -9
- data/lib/datadog/profiling/tag_builder.rb +7 -41
- data/lib/datadog/profiling/tasks/setup.rb +2 -0
- data/lib/datadog/profiling.rb +7 -2
- data/lib/datadog/single_step_instrument.rb +9 -0
- data/lib/datadog/tracing/analytics.rb +1 -1
- data/lib/datadog/tracing/component.rb +15 -12
- data/lib/datadog/tracing/configuration/ext.rb +7 -1
- data/lib/datadog/tracing/configuration/settings.rb +18 -2
- data/lib/datadog/tracing/context_provider.rb +1 -1
- data/lib/datadog/tracing/contrib/action_pack/action_controller/instrumentation.rb +15 -0
- data/lib/datadog/tracing/contrib/action_pack/action_dispatch/instrumentation.rb +19 -12
- data/lib/datadog/tracing/contrib/action_pack/ext.rb +2 -0
- data/lib/datadog/tracing/contrib/active_record/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/active_support/cache/events/cache.rb +11 -2
- data/lib/datadog/tracing/contrib/active_support/cache/instrumentation.rb +33 -0
- data/lib/datadog/tracing/contrib/active_support/cache/patcher.rb +4 -0
- data/lib/datadog/tracing/contrib/active_support/cache/redis.rb +2 -4
- data/lib/datadog/tracing/contrib/active_support/configuration/settings.rb +13 -0
- data/lib/datadog/tracing/contrib/aws/instrumentation.rb +10 -0
- data/lib/datadog/tracing/contrib/aws/parsed_context.rb +5 -1
- data/lib/datadog/tracing/contrib/configuration/settings.rb +1 -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/faraday/middleware.rb +5 -3
- 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/httpclient/instrumentation.rb +6 -16
- data/lib/datadog/tracing/contrib/httprb/instrumentation.rb +7 -15
- 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/lograge/patcher.rb +4 -2
- 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/subscribers.rb +18 -1
- data/lib/datadog/tracing/contrib/mysql2/instrumentation.rb +16 -6
- 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/patcher.rb +5 -1
- data/lib/datadog/tracing/contrib/patcher.rb +5 -2
- data/lib/datadog/tracing/contrib/rack/request_queue.rb +1 -1
- data/lib/datadog/tracing/contrib/rails/patcher.rb +4 -1
- data/lib/datadog/tracing/contrib/rails/runner.rb +61 -40
- 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/ext.rb +1 -0
- data/lib/datadog/tracing/contrib/sidekiq/server_tracer.rb +5 -2
- 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/diagnostics/environment_logger.rb +3 -1
- 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 +10 -1
- data/lib/datadog/tracing/span_event.rb +2 -2
- data/lib/datadog/tracing/span_operation.rb +68 -16
- data/lib/datadog/tracing/sync_writer.rb +2 -3
- data/lib/datadog/tracing/trace_digest.rb +9 -2
- data/lib/datadog/tracing/trace_operation.rb +55 -27
- data/lib/datadog/tracing/trace_segment.rb +6 -4
- data/lib/datadog/tracing/tracer.rb +51 -7
- data/lib/datadog/tracing/transport/http/api.rb +2 -10
- data/lib/datadog/tracing/transport/http/client.rb +5 -4
- data/lib/datadog/tracing/transport/http/traces.rb +13 -41
- data/lib/datadog/tracing/transport/http.rb +11 -44
- data/lib/datadog/tracing/transport/serializable_trace.rb +3 -1
- data/lib/datadog/tracing/transport/trace_formatter.rb +7 -0
- data/lib/datadog/tracing/transport/traces.rb +26 -9
- data/lib/datadog/tracing/utils.rb +1 -1
- data/lib/datadog/tracing/workers/trace_writer.rb +2 -6
- data/lib/datadog/tracing/writer.rb +2 -6
- data/lib/datadog/tracing.rb +16 -3
- data/lib/datadog/version.rb +2 -2
- data/lib/datadog.rb +8 -2
- metadata +88 -23
- data/lib/datadog/appsec/assets/waf_rules/processors.json +0 -92
- data/lib/datadog/appsec/assets/waf_rules/scanners.json +0 -114
- data/lib/datadog/appsec/contrib/devise/event.rb +0 -54
- data/lib/datadog/appsec/contrib/devise/patcher/authenticatable_patch.rb +0 -72
- data/lib/datadog/appsec/contrib/devise/patcher/registration_controller_patch.rb +0 -47
- data/lib/datadog/appsec/contrib/devise/resource.rb +0 -35
- data/lib/datadog/appsec/contrib/devise/tracking.rb +0 -57
- data/lib/datadog/appsec/processor/rule_merger.rb +0 -170
- data/lib/datadog/appsec/processor.rb +0 -107
- data/lib/datadog/appsec/utils/trace_operation.rb +0 -15
- 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
@@ -14,13 +14,16 @@ module Datadog
|
|
14
14
|
module Runtime
|
15
15
|
# For generating runtime metrics
|
16
16
|
class Metrics < Core::Metrics::Client
|
17
|
-
def initialize(**options)
|
17
|
+
def initialize(telemetry:, **options)
|
18
18
|
super
|
19
19
|
|
20
20
|
# Initialize service list
|
21
21
|
@services = Set.new(options.fetch(:services, []))
|
22
22
|
@service_tags = nil
|
23
23
|
compile_service_tags!
|
24
|
+
|
25
|
+
# Initialize the collection of runtime-id
|
26
|
+
@runtime_id_enabled = options.fetch(:experimental_runtime_id_enabled, false)
|
24
27
|
end
|
25
28
|
|
26
29
|
# Associate service with runtime metrics
|
@@ -93,7 +96,7 @@ module Datadog
|
|
93
96
|
|
94
97
|
def try_flush
|
95
98
|
yield
|
96
|
-
rescue
|
99
|
+
rescue => e
|
97
100
|
Datadog.logger.warn("Error while sending runtime metric. Cause: #{e.class.name} #{e.message}")
|
98
101
|
end
|
99
102
|
|
@@ -105,6 +108,9 @@ module Datadog
|
|
105
108
|
|
106
109
|
# Add services dynamically because they might change during runtime.
|
107
110
|
options[:tags].concat(service_tags) unless service_tags.nil?
|
111
|
+
|
112
|
+
# Add runtime-id dynamically because it might change during runtime.
|
113
|
+
options[:tags].concat(["runtime-id:#{Core::Environment::Identity.id}"]) if @runtime_id_enabled
|
108
114
|
end
|
109
115
|
end
|
110
116
|
|
@@ -112,7 +118,8 @@ module Datadog
|
|
112
118
|
|
113
119
|
attr_reader \
|
114
120
|
:service_tags,
|
115
|
-
:services
|
121
|
+
:services,
|
122
|
+
:runtime_id_enabled
|
116
123
|
|
117
124
|
def compile_service_tags!
|
118
125
|
@service_tags = services.to_a.collect do |service|
|
@@ -140,7 +147,7 @@ module Datadog
|
|
140
147
|
gauge(metric_name, metric_value) if metric_value
|
141
148
|
end
|
142
149
|
|
143
|
-
#
|
150
|
+
# standard:disable Metrics/MethodLength
|
144
151
|
def flush_yjit_stats
|
145
152
|
# Only on Ruby >= 3.2
|
146
153
|
try_flush do
|
@@ -188,7 +195,7 @@ module Datadog
|
|
188
195
|
end
|
189
196
|
end
|
190
197
|
end
|
191
|
-
#
|
198
|
+
# standard:enable Metrics/MethodLength
|
192
199
|
end
|
193
200
|
end
|
194
201
|
end
|
@@ -0,0 +1,56 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative 'environment/socket'
|
4
|
+
require_relative 'environment/identity'
|
5
|
+
require_relative 'environment/git'
|
6
|
+
|
7
|
+
module Datadog
|
8
|
+
module Core
|
9
|
+
# This module builds a hash of tags.
|
10
|
+
#
|
11
|
+
# When changing or adding the tags, make sure they are kept in sync with
|
12
|
+
# https://docs.google.com/spreadsheets/d/1LOGMf4c4Avbtn36uZ2SWvhIGKRPLM1BoWkUP4JYj7hA/
|
13
|
+
# (Datadog internal link).
|
14
|
+
#
|
15
|
+
# @api private
|
16
|
+
module TagBuilder
|
17
|
+
def self.fixed_environment_tags
|
18
|
+
@fixed_environment_tags ||= {
|
19
|
+
'language' => Environment::Identity.lang,
|
20
|
+
'runtime' => Environment::Identity.lang, # Known to be duplicated from language above
|
21
|
+
'runtime_engine' => Environment::Identity.lang_engine,
|
22
|
+
'runtime_platform' => Environment::Identity.lang_platform,
|
23
|
+
'runtime_version' => Environment::Identity.lang_version,
|
24
|
+
'library_version' => Environment::Identity.gem_datadog_version,
|
25
|
+
'git.repository_url' => Environment::Git.git_repository_url,
|
26
|
+
'git.commit.sha' => Environment::Git.git_commit_sha,
|
27
|
+
}.compact.freeze
|
28
|
+
end
|
29
|
+
|
30
|
+
def self.tags(settings)
|
31
|
+
# Note that user tags get overwritten by our tags, and also
|
32
|
+
# that user tags do not get compacted (nil values are sent as
|
33
|
+
# empty strings).
|
34
|
+
settings.tags.merge(fixed_environment_tags).merge({
|
35
|
+
# Hostname can possibly change during application runtime.
|
36
|
+
'host' => Environment::Socket.hostname,
|
37
|
+
# Runtime ID changes upon a fork.
|
38
|
+
'runtime-id' => Environment::Identity.id,
|
39
|
+
# Process ID changes upon a fork.
|
40
|
+
'process_id' => Process.pid.to_s,
|
41
|
+
# Unified service tagging.
|
42
|
+
'env' => settings.env,
|
43
|
+
'service' => settings.service,
|
44
|
+
'version' => settings.version,
|
45
|
+
}.compact)
|
46
|
+
end
|
47
|
+
|
48
|
+
def self.serialize_tags(tags)
|
49
|
+
# DEV: Should there be some sort of escaping done here?
|
50
|
+
tags.map do |key, value|
|
51
|
+
"#{key}:#{value}"
|
52
|
+
end.join(',')
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
@@ -2,12 +2,13 @@
|
|
2
2
|
|
3
3
|
require_relative 'emitter'
|
4
4
|
require_relative 'event'
|
5
|
-
require_relative 'http/transport'
|
6
5
|
require_relative 'metrics_manager'
|
7
6
|
require_relative 'worker'
|
8
7
|
require_relative 'logging'
|
8
|
+
require_relative 'transport/http'
|
9
9
|
|
10
10
|
require_relative '../configuration/ext'
|
11
|
+
require_relative '../configuration/agentless_settings_resolver'
|
11
12
|
require_relative '../utils/forking'
|
12
13
|
|
13
14
|
module Datadog
|
@@ -15,8 +16,10 @@ module Datadog
|
|
15
16
|
module Telemetry
|
16
17
|
# Telemetry entrypoint, coordinates sending telemetry events at various points in app lifecycle.
|
17
18
|
# Note: Telemetry does not spawn its worker thread in fork processes, thus no telemetry is sent in forked processes.
|
19
|
+
#
|
20
|
+
# @api private
|
18
21
|
class Component
|
19
|
-
attr_reader :enabled, :logger
|
22
|
+
attr_reader :enabled, :logger, :transport, :worker
|
20
23
|
|
21
24
|
include Core::Utils::Forking
|
22
25
|
include Telemetry::Logging
|
@@ -25,89 +28,104 @@ module Datadog
|
|
25
28
|
enabled = settings.telemetry.enabled
|
26
29
|
agentless_enabled = settings.telemetry.agentless_enabled
|
27
30
|
|
28
|
-
if !agentless_enabled && agent_settings.adapter != Datadog::Core::Configuration::Ext::Agent::HTTP::ADAPTER
|
29
|
-
enabled = false
|
30
|
-
logger.debug { "Telemetry disabled. Agent network adapter not supported: #{agent_settings.adapter}" }
|
31
|
-
end
|
32
|
-
|
33
31
|
if agentless_enabled && settings.api_key.nil?
|
34
32
|
enabled = false
|
35
|
-
logger.debug { 'Telemetry disabled. Agentless telemetry requires
|
33
|
+
logger.debug { 'Telemetry disabled. Agentless telemetry requires a DD_API_KEY variable to be set.' }
|
36
34
|
end
|
37
35
|
|
38
|
-
transport = if agentless_enabled
|
39
|
-
Datadog::Core::Telemetry::Http::Transport.build_agentless_transport(
|
40
|
-
api_key: settings.api_key,
|
41
|
-
dd_site: settings.site,
|
42
|
-
url_override: settings.telemetry.agentless_url_override
|
43
|
-
)
|
44
|
-
else
|
45
|
-
Datadog::Core::Telemetry::Http::Transport.build_agent_transport(agent_settings)
|
46
|
-
end
|
47
|
-
|
48
36
|
Telemetry::Component.new(
|
49
|
-
|
37
|
+
settings: settings,
|
38
|
+
agent_settings: agent_settings,
|
50
39
|
enabled: enabled,
|
51
|
-
metrics_enabled: enabled && settings.telemetry.metrics_enabled,
|
52
|
-
heartbeat_interval_seconds: settings.telemetry.heartbeat_interval_seconds,
|
53
|
-
metrics_aggregation_interval_seconds: settings.telemetry.metrics_aggregation_interval_seconds,
|
54
|
-
dependency_collection: settings.telemetry.dependency_collection,
|
55
40
|
logger: logger,
|
56
|
-
shutdown_timeout_seconds: settings.telemetry.shutdown_timeout_seconds,
|
57
|
-
log_collection_enabled: settings.telemetry.log_collection_enabled
|
58
41
|
)
|
59
42
|
end
|
60
43
|
|
61
44
|
# @param enabled [Boolean] Determines whether telemetry events should be sent to the API
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
# @param [Boolean] dependency_collection Whether to send the `app-dependencies-loaded` event
|
66
|
-
def initialize(
|
67
|
-
heartbeat_interval_seconds:,
|
68
|
-
metrics_aggregation_interval_seconds:,
|
69
|
-
dependency_collection:,
|
45
|
+
def initialize( # standard:disable Metrics/MethodLength
|
46
|
+
settings:,
|
47
|
+
agent_settings:,
|
70
48
|
logger:,
|
71
|
-
|
72
|
-
shutdown_timeout_seconds:,
|
73
|
-
enabled: true,
|
74
|
-
metrics_enabled: true,
|
75
|
-
log_collection_enabled: true
|
49
|
+
enabled:
|
76
50
|
)
|
77
51
|
@enabled = enabled
|
78
|
-
@log_collection_enabled = log_collection_enabled
|
52
|
+
@log_collection_enabled = settings.telemetry.log_collection_enabled
|
79
53
|
@logger = logger
|
80
54
|
|
81
55
|
@metrics_manager = MetricsManager.new(
|
82
|
-
enabled: enabled && metrics_enabled,
|
83
|
-
aggregation_interval: metrics_aggregation_interval_seconds
|
56
|
+
enabled: @enabled && settings.telemetry.metrics_enabled,
|
57
|
+
aggregation_interval: settings.telemetry.metrics_aggregation_interval_seconds,
|
84
58
|
)
|
85
59
|
|
60
|
+
@stopped = false
|
61
|
+
|
62
|
+
return unless @enabled
|
63
|
+
|
64
|
+
@transport = if settings.telemetry.agentless_enabled
|
65
|
+
# We don't touch the `agent_settings` since we still want the telemetry payloads to refer to the original
|
66
|
+
# settings, even though the telemetry itself may be using a different path.
|
67
|
+
telemetry_specific_agent_settings = Core::Configuration::AgentlessSettingsResolver.call(
|
68
|
+
settings,
|
69
|
+
host_prefix: 'instrumentation-telemetry-intake',
|
70
|
+
url_override: settings.telemetry.agentless_url_override,
|
71
|
+
url_override_source: 'c.telemetry.agentless_url_override',
|
72
|
+
logger: logger,
|
73
|
+
)
|
74
|
+
Telemetry::Transport::HTTP.agentless_telemetry(
|
75
|
+
agent_settings: telemetry_specific_agent_settings,
|
76
|
+
logger: logger,
|
77
|
+
# api_key should have already validated to be
|
78
|
+
# not nil by +build+ method above.
|
79
|
+
api_key: settings.api_key,
|
80
|
+
)
|
81
|
+
else
|
82
|
+
Telemetry::Transport::HTTP.agent_telemetry(
|
83
|
+
agent_settings: agent_settings, logger: logger,
|
84
|
+
)
|
85
|
+
end
|
86
|
+
|
86
87
|
@worker = Telemetry::Worker.new(
|
87
88
|
enabled: @enabled,
|
88
|
-
heartbeat_interval_seconds: heartbeat_interval_seconds,
|
89
|
-
metrics_aggregation_interval_seconds: metrics_aggregation_interval_seconds,
|
90
|
-
emitter: Emitter.new(
|
89
|
+
heartbeat_interval_seconds: settings.telemetry.heartbeat_interval_seconds,
|
90
|
+
metrics_aggregation_interval_seconds: settings.telemetry.metrics_aggregation_interval_seconds,
|
91
|
+
emitter: Emitter.new(
|
92
|
+
@transport,
|
93
|
+
logger: @logger,
|
94
|
+
debug: settings.telemetry.debug,
|
95
|
+
),
|
91
96
|
metrics_manager: @metrics_manager,
|
92
|
-
dependency_collection: dependency_collection,
|
97
|
+
dependency_collection: settings.telemetry.dependency_collection,
|
93
98
|
logger: logger,
|
94
|
-
shutdown_timeout: shutdown_timeout_seconds
|
99
|
+
shutdown_timeout: settings.telemetry.shutdown_timeout_seconds,
|
95
100
|
)
|
96
101
|
|
97
|
-
@
|
98
|
-
|
99
|
-
@worker.start
|
102
|
+
@agent_settings = agent_settings
|
100
103
|
end
|
101
104
|
|
102
105
|
def disable!
|
103
106
|
@enabled = false
|
104
|
-
@worker
|
107
|
+
@worker&.enabled = false
|
108
|
+
end
|
109
|
+
|
110
|
+
def start(initial_event_is_change = false)
|
111
|
+
return if !@enabled
|
112
|
+
|
113
|
+
initial_event = if initial_event_is_change
|
114
|
+
Event::SynthAppClientConfigurationChange.new(agent_settings: @agent_settings)
|
115
|
+
else
|
116
|
+
Event::AppStarted.new(agent_settings: @agent_settings)
|
117
|
+
end
|
118
|
+
|
119
|
+
@worker.start(initial_event)
|
105
120
|
end
|
106
121
|
|
107
|
-
def
|
122
|
+
def shutdown!
|
108
123
|
return if @stopped
|
109
124
|
|
110
|
-
@worker
|
125
|
+
if defined?(@worker)
|
126
|
+
@worker&.stop(true)
|
127
|
+
end
|
128
|
+
|
111
129
|
@stopped = true
|
112
130
|
end
|
113
131
|
|
@@ -129,6 +147,17 @@ module Datadog
|
|
129
147
|
@worker.enqueue(event)
|
130
148
|
end
|
131
149
|
|
150
|
+
# Wait for the worker to send out all events that have already
|
151
|
+
# been queued, up to 15 seconds. Returns whether all events have
|
152
|
+
# been flushed.
|
153
|
+
#
|
154
|
+
# @api private
|
155
|
+
def flush
|
156
|
+
return if !@enabled || forked?
|
157
|
+
|
158
|
+
@worker.flush
|
159
|
+
end
|
160
|
+
|
132
161
|
# Report configuration changes caused by Remote Configuration.
|
133
162
|
def client_configuration_change!(changes)
|
134
163
|
return if !@enabled || forked?
|
@@ -1,7 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require_relative 'request'
|
4
|
-
require_relative '
|
4
|
+
require_relative '../transport/response'
|
5
5
|
require_relative '../utils/sequence'
|
6
6
|
require_relative '../utils/forking'
|
7
7
|
|
@@ -10,26 +10,38 @@ module Datadog
|
|
10
10
|
module Telemetry
|
11
11
|
# Class that emits telemetry events
|
12
12
|
class Emitter
|
13
|
-
attr_reader :
|
13
|
+
attr_reader :transport, :logger
|
14
14
|
|
15
15
|
extend Core::Utils::Forking
|
16
16
|
|
17
|
-
# @param
|
18
|
-
#
|
19
|
-
def initialize(
|
20
|
-
@
|
17
|
+
# @param transport [Datadog::Core::Telemetry::Transport::Telemetry::Transport]
|
18
|
+
# Transport object that can be used to send telemetry requests
|
19
|
+
def initialize(transport, logger: Datadog.logger, debug: false)
|
20
|
+
@transport = transport
|
21
|
+
@logger = logger
|
22
|
+
@debug = !!debug
|
23
|
+
end
|
24
|
+
|
25
|
+
def debug?
|
26
|
+
@debug
|
21
27
|
end
|
22
28
|
|
23
29
|
# Retrieves and emits a TelemetryRequest object based on the request type specified
|
24
30
|
def request(event)
|
25
31
|
seq_id = self.class.sequence.next
|
26
|
-
payload = Request.build_payload(event, seq_id)
|
27
|
-
res = @
|
28
|
-
|
32
|
+
payload = Request.build_payload(event, seq_id, debug: debug?)
|
33
|
+
res = @transport.send_telemetry(request_type: event.type, payload: payload)
|
34
|
+
logger.debug { "Telemetry sent for event `#{event.type}` (response code: #{res.code})" }
|
29
35
|
res
|
30
36
|
rescue => e
|
31
|
-
|
32
|
-
|
37
|
+
logger.debug {
|
38
|
+
"Unable to send telemetry request for event `#{begin
|
39
|
+
event.type
|
40
|
+
rescue
|
41
|
+
"unknown"
|
42
|
+
end}`: #{e}"
|
43
|
+
}
|
44
|
+
Core::Transport::InternalErrorResponse.new(e)
|
33
45
|
end
|
34
46
|
|
35
47
|
# Initializes a Sequence object to track seq_id if not already initialized; else returns stored
|
@@ -0,0 +1,66 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative 'base'
|
4
|
+
|
5
|
+
module Datadog
|
6
|
+
module Core
|
7
|
+
module Telemetry
|
8
|
+
module Event
|
9
|
+
# Telemetry class for the 'app-client-configuration-change' event
|
10
|
+
class AppClientConfigurationChange < Base
|
11
|
+
attr_reader :changes, :origin
|
12
|
+
|
13
|
+
def type
|
14
|
+
'app-client-configuration-change'
|
15
|
+
end
|
16
|
+
|
17
|
+
def initialize(changes, origin)
|
18
|
+
super()
|
19
|
+
@changes = changes
|
20
|
+
@origin = origin
|
21
|
+
end
|
22
|
+
|
23
|
+
def payload
|
24
|
+
{configuration: configuration}
|
25
|
+
end
|
26
|
+
|
27
|
+
def configuration
|
28
|
+
config = Datadog.configuration
|
29
|
+
seq_id = Event.configuration_sequence.next
|
30
|
+
|
31
|
+
res = @changes.map do |name, value|
|
32
|
+
{
|
33
|
+
name: name,
|
34
|
+
value: value,
|
35
|
+
origin: @origin,
|
36
|
+
seq_id: seq_id,
|
37
|
+
}
|
38
|
+
end
|
39
|
+
|
40
|
+
# DEV: This seems unnecessary (we send the state of sca_enabled for each remote config change)
|
41
|
+
unless config.dig('appsec', 'sca_enabled').nil?
|
42
|
+
res << {
|
43
|
+
name: 'appsec.sca_enabled',
|
44
|
+
value: config.appsec.sca_enabled,
|
45
|
+
origin: 'code',
|
46
|
+
seq_id: seq_id,
|
47
|
+
}
|
48
|
+
end
|
49
|
+
|
50
|
+
res
|
51
|
+
end
|
52
|
+
|
53
|
+
def ==(other)
|
54
|
+
other.is_a?(AppClientConfigurationChange) && other.changes == @changes && other.origin == @origin
|
55
|
+
end
|
56
|
+
|
57
|
+
alias_method :eql?, :==
|
58
|
+
|
59
|
+
def hash
|
60
|
+
[self.class, @changes, @origin].hash
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative 'base'
|
4
|
+
|
5
|
+
module Datadog
|
6
|
+
module Core
|
7
|
+
module Telemetry
|
8
|
+
module Event
|
9
|
+
# Telemetry class for the 'app-closing' event
|
10
|
+
class AppClosing < Base
|
11
|
+
def type
|
12
|
+
'app-closing'
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative 'base'
|
4
|
+
|
5
|
+
module Datadog
|
6
|
+
module Core
|
7
|
+
module Telemetry
|
8
|
+
module Event
|
9
|
+
# Telemetry class for the 'app-dependencies-loaded' event
|
10
|
+
class AppDependenciesLoaded < Base
|
11
|
+
def type
|
12
|
+
'app-dependencies-loaded'
|
13
|
+
end
|
14
|
+
|
15
|
+
def payload
|
16
|
+
{dependencies: dependencies}
|
17
|
+
end
|
18
|
+
|
19
|
+
private
|
20
|
+
|
21
|
+
def dependencies
|
22
|
+
Gem.loaded_specs.collect do |name, gem|
|
23
|
+
{
|
24
|
+
name: name,
|
25
|
+
version: gem.version.to_s,
|
26
|
+
}
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative 'base'
|
4
|
+
|
5
|
+
module Datadog
|
6
|
+
module Core
|
7
|
+
module Telemetry
|
8
|
+
module Event
|
9
|
+
# Telemetry class for the 'app-heartbeat' event
|
10
|
+
class AppHeartbeat < Base
|
11
|
+
def type
|
12
|
+
'app-heartbeat'
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,58 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative 'base'
|
4
|
+
|
5
|
+
module Datadog
|
6
|
+
module Core
|
7
|
+
module Telemetry
|
8
|
+
module Event
|
9
|
+
# Telemetry class for the 'app-integrations-change' event
|
10
|
+
class AppIntegrationsChange < Base
|
11
|
+
def type
|
12
|
+
'app-integrations-change'
|
13
|
+
end
|
14
|
+
|
15
|
+
def payload
|
16
|
+
{integrations: integrations}
|
17
|
+
end
|
18
|
+
|
19
|
+
private
|
20
|
+
|
21
|
+
def integrations
|
22
|
+
instrumented_integrations = Datadog.configuration.tracing.instrumented_integrations
|
23
|
+
Datadog.registry.map do |integration|
|
24
|
+
is_instrumented = instrumented_integrations.include?(integration.name)
|
25
|
+
|
26
|
+
is_enabled = is_instrumented && integration.klass.patcher.patch_successful
|
27
|
+
|
28
|
+
version = integration.klass.class.version&.to_s
|
29
|
+
|
30
|
+
res = {
|
31
|
+
name: integration.name.to_s,
|
32
|
+
enabled: is_enabled,
|
33
|
+
version: version,
|
34
|
+
compatible: integration.klass.class.compatible?,
|
35
|
+
error: (patch_error(integration) if is_instrumented && !is_enabled),
|
36
|
+
# TODO: Track if integration is instrumented by manual configuration or by auto instrumentation
|
37
|
+
# auto_enabled: is_enabled && ???,
|
38
|
+
}
|
39
|
+
res.reject! { |_, v| v.nil? }
|
40
|
+
res
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
def patch_error(integration)
|
45
|
+
patch_error_result = integration.klass.patcher.patch_error_result
|
46
|
+
return patch_error_result.compact.to_s if patch_error_result
|
47
|
+
|
48
|
+
# If no error occurred during patching, but integration is still not instrumented
|
49
|
+
"Available?: #{integration.klass.class.available?}" \
|
50
|
+
", Loaded? #{integration.klass.class.loaded?}" \
|
51
|
+
", Compatible? #{integration.klass.class.compatible?}" \
|
52
|
+
", Patchable? #{integration.klass.class.patchable?}"
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|