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
@@ -0,0 +1,287 @@
|
|
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-started' event
|
10
|
+
class AppStarted < Base
|
11
|
+
def initialize(agent_settings:)
|
12
|
+
@agent_settings = agent_settings
|
13
|
+
end
|
14
|
+
|
15
|
+
def type
|
16
|
+
'app-started'
|
17
|
+
end
|
18
|
+
|
19
|
+
def payload
|
20
|
+
{
|
21
|
+
products: products,
|
22
|
+
configuration: configuration,
|
23
|
+
install_signature: install_signature,
|
24
|
+
# DEV: Not implemented yet
|
25
|
+
# error: error, # Start-up errors
|
26
|
+
}
|
27
|
+
end
|
28
|
+
|
29
|
+
private
|
30
|
+
|
31
|
+
def products
|
32
|
+
# @type var products: Hash[Symbol, Hash[Symbol, Hash[Symbol, String | Integer] | bool | nil]]
|
33
|
+
products = {
|
34
|
+
appsec: {
|
35
|
+
enabled: Datadog::AppSec.enabled?,
|
36
|
+
},
|
37
|
+
profiler: {
|
38
|
+
enabled: Datadog::Profiling.enabled?,
|
39
|
+
},
|
40
|
+
dynamic_instrumentation: {
|
41
|
+
enabled: defined?(Datadog::DI) && Datadog::DI.respond_to?(:enabled?) && Datadog::DI.enabled?,
|
42
|
+
}
|
43
|
+
}
|
44
|
+
|
45
|
+
if (unsupported_reason = Datadog::Profiling.unsupported_reason)
|
46
|
+
products[:profiler][:error] = {
|
47
|
+
code: 1, # Error code. 0 if no error.
|
48
|
+
message: unsupported_reason,
|
49
|
+
}
|
50
|
+
end
|
51
|
+
|
52
|
+
products
|
53
|
+
end
|
54
|
+
|
55
|
+
TARGET_OPTIONS = %w[
|
56
|
+
dynamic_instrumentation.enabled
|
57
|
+
logger.level
|
58
|
+
profiling.advanced.code_provenance_enabled
|
59
|
+
profiling.advanced.endpoint.collection.enabled
|
60
|
+
profiling.enabled
|
61
|
+
runtime_metrics.enabled
|
62
|
+
tracing.analytics.enabled
|
63
|
+
tracing.propagation_style_extract
|
64
|
+
tracing.propagation_style_inject
|
65
|
+
tracing.enabled
|
66
|
+
tracing.log_injection
|
67
|
+
tracing.partial_flush.enabled
|
68
|
+
tracing.partial_flush.min_spans_threshold
|
69
|
+
tracing.report_hostname
|
70
|
+
tracing.sampling.rate_limit
|
71
|
+
apm.tracing.enabled
|
72
|
+
].freeze
|
73
|
+
|
74
|
+
# standard:disable Metrics/AbcSize
|
75
|
+
# standard:disable Metrics/MethodLength
|
76
|
+
def configuration
|
77
|
+
config = Datadog.configuration
|
78
|
+
seq_id = Event.configuration_sequence.next
|
79
|
+
|
80
|
+
# tracing.writer_options.buffer_size and tracing.writer_options.flush_interval have the same origin.
|
81
|
+
writer_option_origin = get_telemetry_origin(config, 'tracing.writer_options')
|
82
|
+
|
83
|
+
list = [
|
84
|
+
# Only set using env var as of June 2025
|
85
|
+
conf_value('DD_GIT_REPOSITORY_URL', Core::Environment::Git.git_repository_url, seq_id, 'env_var'),
|
86
|
+
conf_value('DD_GIT_COMMIT_SHA', Core::Environment::Git.git_commit_sha, seq_id, 'env_var'),
|
87
|
+
|
88
|
+
# Set by the customer application (eg. `require 'datadog/auto_instrument'`)
|
89
|
+
conf_value(
|
90
|
+
'tracing.auto_instrument.enabled',
|
91
|
+
!defined?(Datadog::AutoInstrument::LOADED).nil?,
|
92
|
+
seq_id,
|
93
|
+
'code'
|
94
|
+
),
|
95
|
+
conf_value(
|
96
|
+
'tracing.opentelemetry.enabled',
|
97
|
+
!defined?(Datadog::OpenTelemetry::LOADED).nil?,
|
98
|
+
seq_id,
|
99
|
+
'code'
|
100
|
+
),
|
101
|
+
|
102
|
+
# Mix of env var, programmatic and default config, so we use unknown
|
103
|
+
conf_value('DD_AGENT_TRANSPORT', agent_transport, seq_id, 'unknown'),
|
104
|
+
|
105
|
+
# writer_options is defined as an option that has a Hash value.
|
106
|
+
conf_value(
|
107
|
+
'tracing.writer_options.buffer_size',
|
108
|
+
to_value(config.tracing.writer_options[:buffer_size]),
|
109
|
+
seq_id,
|
110
|
+
writer_option_origin
|
111
|
+
),
|
112
|
+
conf_value(
|
113
|
+
'tracing.writer_options.flush_interval',
|
114
|
+
to_value(config.tracing.writer_options[:flush_interval]),
|
115
|
+
seq_id,
|
116
|
+
writer_option_origin
|
117
|
+
),
|
118
|
+
|
119
|
+
conf_value('DD_AGENT_HOST', config.agent.host, seq_id, get_telemetry_origin(config, 'agent.host')),
|
120
|
+
conf_value(
|
121
|
+
'DD_TRACE_SAMPLE_RATE',
|
122
|
+
to_value(config.tracing.sampling.default_rate),
|
123
|
+
seq_id,
|
124
|
+
get_telemetry_origin(config, 'tracing.sampling.default_rate')
|
125
|
+
),
|
126
|
+
conf_value(
|
127
|
+
'DD_TRACE_REMOVE_INTEGRATION_SERVICE_NAMES_ENABLED',
|
128
|
+
config.tracing.contrib.global_default_service_name.enabled,
|
129
|
+
seq_id,
|
130
|
+
get_telemetry_origin(config, 'tracing.contrib.global_default_service_name.enabled')
|
131
|
+
),
|
132
|
+
conf_value(
|
133
|
+
'DD_TRACE_PEER_SERVICE_DEFAULTS_ENABLED',
|
134
|
+
config.tracing.contrib.peer_service_defaults,
|
135
|
+
seq_id,
|
136
|
+
get_telemetry_origin(config, 'tracing.contrib.peer_service_defaults')
|
137
|
+
),
|
138
|
+
conf_value(
|
139
|
+
'DD_TRACE_DEBUG',
|
140
|
+
config.diagnostics.debug,
|
141
|
+
seq_id,
|
142
|
+
get_telemetry_origin(config, 'diagnostics.debug')
|
143
|
+
)
|
144
|
+
]
|
145
|
+
|
146
|
+
peer_service_mapping_str = ''
|
147
|
+
unless config.tracing.contrib.peer_service_mapping.empty?
|
148
|
+
peer_service_mapping = config.tracing.contrib.peer_service_mapping
|
149
|
+
peer_service_mapping_str = peer_service_mapping.map { |key, value| "#{key}:#{value}" }.join(',')
|
150
|
+
end
|
151
|
+
list << conf_value(
|
152
|
+
'DD_TRACE_PEER_SERVICE_MAPPING',
|
153
|
+
peer_service_mapping_str,
|
154
|
+
seq_id,
|
155
|
+
get_telemetry_origin(config, 'tracing.contrib.peer_service_mapping')
|
156
|
+
)
|
157
|
+
|
158
|
+
# Whitelist of configuration options to send in additional payload object
|
159
|
+
TARGET_OPTIONS.each do |option_path|
|
160
|
+
split_option = option_path.split('.')
|
161
|
+
list << conf_value(
|
162
|
+
option_path,
|
163
|
+
to_value(config.dig(*split_option)),
|
164
|
+
seq_id,
|
165
|
+
get_telemetry_origin(config, option_path)
|
166
|
+
)
|
167
|
+
end
|
168
|
+
|
169
|
+
instrumentation_source = if Datadog.const_defined?(:SingleStepInstrument, false) &&
|
170
|
+
Datadog::SingleStepInstrument.const_defined?(:LOADED, false) &&
|
171
|
+
Datadog::SingleStepInstrument::LOADED
|
172
|
+
'ssi'
|
173
|
+
else
|
174
|
+
'manual'
|
175
|
+
end
|
176
|
+
# Track ssi configurations
|
177
|
+
list.push(
|
178
|
+
conf_value('instrumentation_source', instrumentation_source, seq_id, 'code'),
|
179
|
+
conf_value('DD_INJECT_FORCE', Core::Environment::VariableHelpers.env_to_bool('DD_INJECT_FORCE', false), seq_id, 'env_var'),
|
180
|
+
conf_value('DD_INJECTION_ENABLED', ENV['DD_INJECTION_ENABLED'] || '', seq_id, 'env_var'),
|
181
|
+
)
|
182
|
+
|
183
|
+
# Add some more custom additional payload values here
|
184
|
+
if config.logger.instance
|
185
|
+
list << conf_value(
|
186
|
+
'logger.instance',
|
187
|
+
config.logger.instance.class.to_s,
|
188
|
+
seq_id,
|
189
|
+
get_telemetry_origin(config, 'logger.instance')
|
190
|
+
)
|
191
|
+
end
|
192
|
+
if config.respond_to?('appsec')
|
193
|
+
list << conf_value(
|
194
|
+
'appsec.enabled',
|
195
|
+
config.dig('appsec', 'enabled'),
|
196
|
+
seq_id,
|
197
|
+
get_telemetry_origin(config, 'appsec.enabled')
|
198
|
+
)
|
199
|
+
list << conf_value(
|
200
|
+
'appsec.sca_enabled',
|
201
|
+
config.dig('appsec', 'sca_enabled'),
|
202
|
+
seq_id,
|
203
|
+
get_telemetry_origin(config, 'appsec.sca_enabled')
|
204
|
+
)
|
205
|
+
end
|
206
|
+
if config.respond_to?('ci')
|
207
|
+
list << conf_value(
|
208
|
+
'ci.enabled',
|
209
|
+
config.dig('ci', 'enabled'),
|
210
|
+
seq_id,
|
211
|
+
get_telemetry_origin(config, 'ci.enabled')
|
212
|
+
)
|
213
|
+
end
|
214
|
+
|
215
|
+
list.reject! { |entry| entry[:value].nil? }
|
216
|
+
list
|
217
|
+
end
|
218
|
+
# standard:enable Metrics/AbcSize
|
219
|
+
# standard:enable Metrics/MethodLength
|
220
|
+
|
221
|
+
def agent_transport
|
222
|
+
adapter = @agent_settings.adapter
|
223
|
+
if adapter == Datadog::Core::Transport::Ext::UnixSocket::ADAPTER
|
224
|
+
'UDS'
|
225
|
+
else
|
226
|
+
'TCP'
|
227
|
+
end
|
228
|
+
end
|
229
|
+
|
230
|
+
# `origin`: Source of the configuration. One of :
|
231
|
+
# - `fleet_stable_config`: configuration is set via the fleet automation Datadog UI
|
232
|
+
# - `local_stable_config`: configuration set via a user-managed file
|
233
|
+
# - `env_var`: configurations that are set through environment variables
|
234
|
+
# - `jvm_prop`: JVM system properties passed on the command line
|
235
|
+
# - `code`: configurations that are set through the customer application
|
236
|
+
# - `dd_config`: set by the dd.yaml file or json
|
237
|
+
# - `remote_config`: values that are set using remote config
|
238
|
+
# - `app.config`: only applies to .NET
|
239
|
+
# - `default`: set when the user has not set any configuration for the key (defaults to a value)
|
240
|
+
# - `unknown`: set for cases where it is difficult/not possible to determine the source of a config.
|
241
|
+
def conf_value(name, value, seq_id, origin)
|
242
|
+
result = {name: name, value: value, origin: origin, seq_id: seq_id}
|
243
|
+
if origin == 'fleet_stable_config'
|
244
|
+
fleet_id = Core::Configuration::StableConfig.configuration.dig(:fleet, :id)
|
245
|
+
result[:config_id] = fleet_id if fleet_id
|
246
|
+
elsif origin == 'local_stable_config'
|
247
|
+
local_id = Core::Configuration::StableConfig.configuration.dig(:local, :id)
|
248
|
+
result[:config_id] = local_id if local_id
|
249
|
+
end
|
250
|
+
result
|
251
|
+
end
|
252
|
+
|
253
|
+
def to_value(value)
|
254
|
+
# TODO: Add float if telemetry starts accepting it
|
255
|
+
case value
|
256
|
+
when Integer, String, true, false, nil
|
257
|
+
value
|
258
|
+
else
|
259
|
+
value.to_s
|
260
|
+
end
|
261
|
+
end
|
262
|
+
|
263
|
+
def install_signature
|
264
|
+
config = Datadog.configuration
|
265
|
+
{
|
266
|
+
install_id: config.dig('telemetry', 'install_id'),
|
267
|
+
install_type: config.dig('telemetry', 'install_type'),
|
268
|
+
install_time: config.dig('telemetry', 'install_time'),
|
269
|
+
}
|
270
|
+
end
|
271
|
+
|
272
|
+
def get_telemetry_origin(config, config_path)
|
273
|
+
split_option = config_path.split('.')
|
274
|
+
option_name = split_option.pop
|
275
|
+
return 'unknown' if option_name.nil?
|
276
|
+
|
277
|
+
# @type var parent_setting: Core::Configuration::Options
|
278
|
+
# @type var option: Core::Configuration::Option
|
279
|
+
parent_setting = config.dig(*split_option)
|
280
|
+
option = parent_setting.send(:resolve_option, option_name.to_sym)
|
281
|
+
option.precedence_set&.origin || 'unknown'
|
282
|
+
end
|
283
|
+
end
|
284
|
+
end
|
285
|
+
end
|
286
|
+
end
|
287
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Datadog
|
4
|
+
module Core
|
5
|
+
module Telemetry
|
6
|
+
module Event
|
7
|
+
# Base class for all Telemetry V2 events.
|
8
|
+
class Base
|
9
|
+
# The type of the event.
|
10
|
+
# It must be one of the stings defined in the Telemetry V2
|
11
|
+
# specification for event names.
|
12
|
+
def type
|
13
|
+
raise NotImplementedError, 'Must be implemented by subclass'
|
14
|
+
end
|
15
|
+
|
16
|
+
# The JSON payload for the event.
|
17
|
+
def payload
|
18
|
+
{}
|
19
|
+
end
|
20
|
+
|
21
|
+
# Override equality to allow for deduplication
|
22
|
+
# The basic implementation is to check if the other object is an instance of the same class.
|
23
|
+
# This works for events that have no attributes.
|
24
|
+
# For events with attributes, you should override this method to compare the attributes.
|
25
|
+
def ==(other)
|
26
|
+
other.is_a?(self.class)
|
27
|
+
end
|
28
|
+
|
29
|
+
# @see #==
|
30
|
+
alias_method :eql?, :==
|
31
|
+
|
32
|
+
# @see #==
|
33
|
+
def hash
|
34
|
+
self.class.hash
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative 'generate_metrics'
|
4
|
+
|
5
|
+
module Datadog
|
6
|
+
module Core
|
7
|
+
module Telemetry
|
8
|
+
module Event
|
9
|
+
# Telemetry class for the 'distributions' event
|
10
|
+
class Distributions < GenerateMetrics
|
11
|
+
def type
|
12
|
+
'distributions'
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,43 @@
|
|
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 'generate-metrics' event
|
10
|
+
class GenerateMetrics < Base
|
11
|
+
attr_reader :namespace, :metric_series
|
12
|
+
|
13
|
+
def type
|
14
|
+
'generate-metrics'
|
15
|
+
end
|
16
|
+
|
17
|
+
def initialize(namespace, metric_series)
|
18
|
+
super()
|
19
|
+
@namespace = namespace
|
20
|
+
@metric_series = metric_series
|
21
|
+
end
|
22
|
+
|
23
|
+
def payload
|
24
|
+
{
|
25
|
+
namespace: @namespace,
|
26
|
+
series: @metric_series.map(&:to_h)
|
27
|
+
}
|
28
|
+
end
|
29
|
+
|
30
|
+
def ==(other)
|
31
|
+
other.is_a?(GenerateMetrics) && other.namespace == @namespace && other.metric_series == @metric_series
|
32
|
+
end
|
33
|
+
|
34
|
+
alias_method :eql?, :==
|
35
|
+
|
36
|
+
def hash
|
37
|
+
[self.class, @namespace, @metric_series].hash
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
@@ -0,0 +1,76 @@
|
|
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 'logs' event.
|
10
|
+
# Logs with the same content are deduplicated at flush time.
|
11
|
+
class Log < Base
|
12
|
+
LEVELS = {
|
13
|
+
error: 'ERROR',
|
14
|
+
warn: 'WARN',
|
15
|
+
}.freeze
|
16
|
+
|
17
|
+
LEVELS_STRING = LEVELS.values.freeze
|
18
|
+
|
19
|
+
attr_reader :message, :level, :stack_trace, :count
|
20
|
+
|
21
|
+
def type
|
22
|
+
'logs'
|
23
|
+
end
|
24
|
+
|
25
|
+
# @param message [String] the log message
|
26
|
+
# @param level [Symbol, String] the log level. Either :error, :warn, 'ERROR', or 'WARN'.
|
27
|
+
# @param stack_trace [String, nil] the stack trace
|
28
|
+
# @param count [Integer] the number of times the log was emitted. Used for deduplication.
|
29
|
+
def initialize(message:, level:, stack_trace: nil, count: 1)
|
30
|
+
super()
|
31
|
+
@message = message
|
32
|
+
@stack_trace = stack_trace
|
33
|
+
|
34
|
+
if level.is_a?(String) && LEVELS_STRING.include?(level)
|
35
|
+
# String level is used during object copy for deduplication
|
36
|
+
@level = level
|
37
|
+
elsif level.is_a?(Symbol)
|
38
|
+
# Symbol level is used by the regular log emitter user
|
39
|
+
@level = LEVELS.fetch(level) { |k| raise ArgumentError, "Invalid log level :#{k}" }
|
40
|
+
else
|
41
|
+
raise ArgumentError, "Invalid log level #{level}"
|
42
|
+
end
|
43
|
+
|
44
|
+
@count = count
|
45
|
+
end
|
46
|
+
|
47
|
+
def payload
|
48
|
+
{
|
49
|
+
logs: [
|
50
|
+
{
|
51
|
+
message: @message,
|
52
|
+
level: @level,
|
53
|
+
stack_trace: @stack_trace,
|
54
|
+
count: @count,
|
55
|
+
}.compact
|
56
|
+
]
|
57
|
+
}
|
58
|
+
end
|
59
|
+
|
60
|
+
# override equality to allow for deduplication
|
61
|
+
def ==(other)
|
62
|
+
other.is_a?(Log) &&
|
63
|
+
other.message == @message &&
|
64
|
+
other.level == @level && other.stack_trace == @stack_trace && other.count == @count
|
65
|
+
end
|
66
|
+
|
67
|
+
alias_method :eql?, :==
|
68
|
+
|
69
|
+
def hash
|
70
|
+
[self.class, @message, @level, @stack_trace, @count].hash
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Datadog
|
4
|
+
module Core
|
5
|
+
module Telemetry
|
6
|
+
module Event
|
7
|
+
# Telemetry class for the 'message-batch' event.
|
8
|
+
class MessageBatch < Base
|
9
|
+
attr_reader :events
|
10
|
+
|
11
|
+
def type
|
12
|
+
'message-batch'
|
13
|
+
end
|
14
|
+
|
15
|
+
def initialize(events)
|
16
|
+
super()
|
17
|
+
@events = events
|
18
|
+
end
|
19
|
+
|
20
|
+
def payload
|
21
|
+
@events.map do |event|
|
22
|
+
{
|
23
|
+
request_type: event.type,
|
24
|
+
payload: event.payload,
|
25
|
+
}
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
def ==(other)
|
30
|
+
other.is_a?(MessageBatch) && other.events == @events
|
31
|
+
end
|
32
|
+
|
33
|
+
alias_method :eql?, :==
|
34
|
+
|
35
|
+
def hash
|
36
|
+
[self.class, @events].hash
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative 'base'
|
4
|
+
|
5
|
+
module Datadog
|
6
|
+
module Core
|
7
|
+
module Telemetry
|
8
|
+
module Event
|
9
|
+
# app-client-configuration-change event emitted instead of
|
10
|
+
# app-started event for telemetry startups other than the initial
|
11
|
+
# one in a process.
|
12
|
+
#
|
13
|
+
# dd-trace-rb generally creates a new component tree whenever
|
14
|
+
# the tracer is reconfigured via Datadog.configure (with some
|
15
|
+
# components potentially reused, if their configuration has not
|
16
|
+
# changed). Telemetry system tests on the other hand expect there
|
17
|
+
# to be one "tracer" per process, and do not permit multiple
|
18
|
+
# app-started events to be emitted.
|
19
|
+
#
|
20
|
+
# To resolve this conflict, we replace second and onward app-started
|
21
|
+
# events with app-client-configuration-change events.
|
22
|
+
# To avoid diffing configuration, we send all parameters that are
|
23
|
+
# sent in app-started event.
|
24
|
+
#
|
25
|
+
# It's a "quick fix" on top of a not-so-quick fix that omitted
|
26
|
+
# second and subsequent app-started (and app-closing) events in the
|
27
|
+
# first place, and only works with the existing hackery of app-started
|
28
|
+
# and app-closing events.
|
29
|
+
class SynthAppClientConfigurationChange < AppStarted
|
30
|
+
def type
|
31
|
+
'app-client-configuration-change'
|
32
|
+
end
|
33
|
+
|
34
|
+
def payload
|
35
|
+
{
|
36
|
+
configuration: configuration,
|
37
|
+
}
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|