datadog 2.0.0.beta1
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 +7 -0
- data/CHANGELOG.md +4236 -0
- data/LICENSE +6 -0
- data/LICENSE-3rdparty.csv +7 -0
- data/LICENSE.Apache +200 -0
- data/LICENSE.BSD3 +24 -0
- data/NOTICE +4 -0
- data/README.md +25 -0
- data/bin/ddprofrb +15 -0
- data/ext/datadog_profiling_loader/datadog_profiling_loader.c +134 -0
- data/ext/datadog_profiling_loader/extconf.rb +72 -0
- data/ext/datadog_profiling_native_extension/NativeExtensionDesign.md +156 -0
- data/ext/datadog_profiling_native_extension/clock_id.h +22 -0
- data/ext/datadog_profiling_native_extension/clock_id_from_pthread.c +56 -0
- data/ext/datadog_profiling_native_extension/clock_id_noop.c +22 -0
- data/ext/datadog_profiling_native_extension/collectors_cpu_and_wall_time_worker.c +1153 -0
- data/ext/datadog_profiling_native_extension/collectors_discrete_dynamic_sampler.c +422 -0
- data/ext/datadog_profiling_native_extension/collectors_discrete_dynamic_sampler.h +101 -0
- data/ext/datadog_profiling_native_extension/collectors_dynamic_sampling_rate.c +150 -0
- data/ext/datadog_profiling_native_extension/collectors_dynamic_sampling_rate.h +18 -0
- data/ext/datadog_profiling_native_extension/collectors_gc_profiling_helper.c +156 -0
- data/ext/datadog_profiling_native_extension/collectors_gc_profiling_helper.h +5 -0
- data/ext/datadog_profiling_native_extension/collectors_idle_sampling_helper.c +244 -0
- data/ext/datadog_profiling_native_extension/collectors_idle_sampling_helper.h +3 -0
- data/ext/datadog_profiling_native_extension/collectors_stack.c +372 -0
- data/ext/datadog_profiling_native_extension/collectors_stack.h +27 -0
- data/ext/datadog_profiling_native_extension/collectors_thread_context.c +1391 -0
- data/ext/datadog_profiling_native_extension/collectors_thread_context.h +15 -0
- data/ext/datadog_profiling_native_extension/extconf.rb +302 -0
- data/ext/datadog_profiling_native_extension/heap_recorder.c +970 -0
- data/ext/datadog_profiling_native_extension/heap_recorder.h +155 -0
- data/ext/datadog_profiling_native_extension/helpers.h +23 -0
- data/ext/datadog_profiling_native_extension/http_transport.c +375 -0
- data/ext/datadog_profiling_native_extension/libdatadog_helpers.c +62 -0
- data/ext/datadog_profiling_native_extension/libdatadog_helpers.h +42 -0
- data/ext/datadog_profiling_native_extension/native_extension_helpers.rb +319 -0
- data/ext/datadog_profiling_native_extension/private_vm_api_access.c +892 -0
- data/ext/datadog_profiling_native_extension/private_vm_api_access.h +61 -0
- data/ext/datadog_profiling_native_extension/profiling.c +267 -0
- data/ext/datadog_profiling_native_extension/ruby_helpers.c +267 -0
- data/ext/datadog_profiling_native_extension/ruby_helpers.h +119 -0
- data/ext/datadog_profiling_native_extension/setup_signal_handler.c +115 -0
- data/ext/datadog_profiling_native_extension/setup_signal_handler.h +11 -0
- data/ext/datadog_profiling_native_extension/stack_recorder.c +941 -0
- data/ext/datadog_profiling_native_extension/stack_recorder.h +27 -0
- data/ext/datadog_profiling_native_extension/time_helpers.c +53 -0
- data/ext/datadog_profiling_native_extension/time_helpers.h +26 -0
- data/lib/datadog/appsec/assets/blocked.html +99 -0
- data/lib/datadog/appsec/assets/blocked.json +1 -0
- data/lib/datadog/appsec/assets/blocked.text +5 -0
- data/lib/datadog/appsec/assets/waf_rules/README.md +7 -0
- data/lib/datadog/appsec/assets/waf_rules/processors.json +92 -0
- data/lib/datadog/appsec/assets/waf_rules/recommended.json +7703 -0
- data/lib/datadog/appsec/assets/waf_rules/scanners.json +114 -0
- data/lib/datadog/appsec/assets/waf_rules/strict.json +1635 -0
- data/lib/datadog/appsec/assets.rb +46 -0
- data/lib/datadog/appsec/autoload.rb +13 -0
- data/lib/datadog/appsec/component.rb +94 -0
- data/lib/datadog/appsec/configuration/settings.rb +202 -0
- data/lib/datadog/appsec/configuration.rb +11 -0
- data/lib/datadog/appsec/contrib/auto_instrument.rb +25 -0
- data/lib/datadog/appsec/contrib/devise/event.rb +57 -0
- data/lib/datadog/appsec/contrib/devise/ext.rb +13 -0
- data/lib/datadog/appsec/contrib/devise/integration.rb +42 -0
- data/lib/datadog/appsec/contrib/devise/patcher/authenticatable_patch.rb +76 -0
- data/lib/datadog/appsec/contrib/devise/patcher/registration_controller_patch.rb +54 -0
- data/lib/datadog/appsec/contrib/devise/patcher.rb +45 -0
- data/lib/datadog/appsec/contrib/devise/resource.rb +35 -0
- data/lib/datadog/appsec/contrib/devise/tracking.rb +49 -0
- data/lib/datadog/appsec/contrib/integration.rb +37 -0
- data/lib/datadog/appsec/contrib/patcher.rb +12 -0
- data/lib/datadog/appsec/contrib/rack/ext.rb +13 -0
- data/lib/datadog/appsec/contrib/rack/gateway/request.rb +104 -0
- data/lib/datadog/appsec/contrib/rack/gateway/response.rb +30 -0
- data/lib/datadog/appsec/contrib/rack/gateway/watcher.rb +162 -0
- data/lib/datadog/appsec/contrib/rack/integration.rb +44 -0
- data/lib/datadog/appsec/contrib/rack/patcher.rb +34 -0
- data/lib/datadog/appsec/contrib/rack/reactive/request.rb +81 -0
- data/lib/datadog/appsec/contrib/rack/reactive/request_body.rb +60 -0
- data/lib/datadog/appsec/contrib/rack/reactive/response.rb +66 -0
- data/lib/datadog/appsec/contrib/rack/request_body_middleware.rb +44 -0
- data/lib/datadog/appsec/contrib/rack/request_middleware.rb +196 -0
- data/lib/datadog/appsec/contrib/rails/ext.rb +13 -0
- data/lib/datadog/appsec/contrib/rails/framework.rb +16 -0
- data/lib/datadog/appsec/contrib/rails/gateway/request.rb +67 -0
- data/lib/datadog/appsec/contrib/rails/gateway/watcher.rb +71 -0
- data/lib/datadog/appsec/contrib/rails/integration.rb +43 -0
- data/lib/datadog/appsec/contrib/rails/patcher.rb +166 -0
- data/lib/datadog/appsec/contrib/rails/reactive/action.rb +66 -0
- data/lib/datadog/appsec/contrib/rails/request.rb +36 -0
- data/lib/datadog/appsec/contrib/rails/request_middleware.rb +20 -0
- data/lib/datadog/appsec/contrib/sinatra/ext.rb +14 -0
- data/lib/datadog/appsec/contrib/sinatra/framework.rb +20 -0
- data/lib/datadog/appsec/contrib/sinatra/gateway/request.rb +17 -0
- data/lib/datadog/appsec/contrib/sinatra/gateway/route_params.rb +23 -0
- data/lib/datadog/appsec/contrib/sinatra/gateway/watcher.rb +117 -0
- data/lib/datadog/appsec/contrib/sinatra/integration.rb +43 -0
- data/lib/datadog/appsec/contrib/sinatra/patcher.rb +168 -0
- data/lib/datadog/appsec/contrib/sinatra/reactive/routed.rb +61 -0
- data/lib/datadog/appsec/contrib/sinatra/request_middleware.rb +20 -0
- data/lib/datadog/appsec/event.rb +171 -0
- data/lib/datadog/appsec/ext.rb +10 -0
- data/lib/datadog/appsec/extensions.rb +15 -0
- data/lib/datadog/appsec/instrumentation/gateway/argument.rb +22 -0
- data/lib/datadog/appsec/instrumentation/gateway.rb +64 -0
- data/lib/datadog/appsec/instrumentation.rb +9 -0
- data/lib/datadog/appsec/monitor/gateway/watcher.rb +67 -0
- data/lib/datadog/appsec/monitor/reactive/set_user.rb +58 -0
- data/lib/datadog/appsec/monitor.rb +11 -0
- data/lib/datadog/appsec/processor/actions.rb +49 -0
- data/lib/datadog/appsec/processor/rule_loader.rb +123 -0
- data/lib/datadog/appsec/processor/rule_merger.rb +152 -0
- data/lib/datadog/appsec/processor.rb +171 -0
- data/lib/datadog/appsec/rate_limiter.rb +60 -0
- data/lib/datadog/appsec/reactive/address_hash.rb +22 -0
- data/lib/datadog/appsec/reactive/engine.rb +47 -0
- data/lib/datadog/appsec/reactive/operation.rb +68 -0
- data/lib/datadog/appsec/reactive/subscriber.rb +19 -0
- data/lib/datadog/appsec/remote.rb +129 -0
- data/lib/datadog/appsec/response.rb +151 -0
- data/lib/datadog/appsec/sample_rate.rb +21 -0
- data/lib/datadog/appsec/scope.rb +61 -0
- data/lib/datadog/appsec/utils/http/media_range.rb +201 -0
- data/lib/datadog/appsec/utils/http/media_type.rb +87 -0
- data/lib/datadog/appsec/utils/http.rb +11 -0
- data/lib/datadog/appsec/utils.rb +9 -0
- data/lib/datadog/appsec.rb +60 -0
- data/lib/datadog/auto_instrument.rb +16 -0
- data/lib/datadog/auto_instrument_base.rb +8 -0
- data/lib/datadog/core/buffer/cruby.rb +55 -0
- data/lib/datadog/core/buffer/random.rb +134 -0
- data/lib/datadog/core/buffer/thread_safe.rb +58 -0
- data/lib/datadog/core/chunker.rb +35 -0
- data/lib/datadog/core/configuration/agent_settings_resolver.rb +352 -0
- data/lib/datadog/core/configuration/base.rb +91 -0
- data/lib/datadog/core/configuration/components.rb +177 -0
- data/lib/datadog/core/configuration/ext.rb +45 -0
- data/lib/datadog/core/configuration/option.rb +319 -0
- data/lib/datadog/core/configuration/option_definition.rb +165 -0
- data/lib/datadog/core/configuration/options.rb +128 -0
- data/lib/datadog/core/configuration/settings.rb +786 -0
- data/lib/datadog/core/configuration.rb +296 -0
- data/lib/datadog/core/diagnostics/environment_logger.rb +173 -0
- data/lib/datadog/core/diagnostics/health.rb +19 -0
- data/lib/datadog/core/encoding.rb +74 -0
- data/lib/datadog/core/environment/cgroup.rb +53 -0
- data/lib/datadog/core/environment/class_count.rb +21 -0
- data/lib/datadog/core/environment/container.rb +91 -0
- data/lib/datadog/core/environment/execution.rb +103 -0
- data/lib/datadog/core/environment/ext.rb +45 -0
- data/lib/datadog/core/environment/gc.rb +20 -0
- data/lib/datadog/core/environment/git.rb +25 -0
- data/lib/datadog/core/environment/identity.rb +84 -0
- data/lib/datadog/core/environment/platform.rb +40 -0
- data/lib/datadog/core/environment/socket.rb +24 -0
- data/lib/datadog/core/environment/thread_count.rb +20 -0
- data/lib/datadog/core/environment/variable_helpers.rb +53 -0
- data/lib/datadog/core/environment/vm_cache.rb +64 -0
- data/lib/datadog/core/environment/yjit.rb +58 -0
- data/lib/datadog/core/error.rb +100 -0
- data/lib/datadog/core/extensions.rb +16 -0
- data/lib/datadog/core/git/ext.rb +16 -0
- data/lib/datadog/core/header_collection.rb +43 -0
- data/lib/datadog/core/logger.rb +45 -0
- data/lib/datadog/core/logging/ext.rb +13 -0
- data/lib/datadog/core/metrics/client.rb +199 -0
- data/lib/datadog/core/metrics/ext.rb +18 -0
- data/lib/datadog/core/metrics/helpers.rb +25 -0
- data/lib/datadog/core/metrics/logging.rb +44 -0
- data/lib/datadog/core/metrics/metric.rb +14 -0
- data/lib/datadog/core/metrics/options.rb +52 -0
- data/lib/datadog/core/pin.rb +75 -0
- data/lib/datadog/core/remote/client/capabilities.rb +62 -0
- data/lib/datadog/core/remote/client.rb +234 -0
- data/lib/datadog/core/remote/component.rb +162 -0
- data/lib/datadog/core/remote/configuration/content.rb +111 -0
- data/lib/datadog/core/remote/configuration/digest.rb +62 -0
- data/lib/datadog/core/remote/configuration/path.rb +90 -0
- data/lib/datadog/core/remote/configuration/repository.rb +294 -0
- data/lib/datadog/core/remote/configuration/target.rb +74 -0
- data/lib/datadog/core/remote/configuration.rb +18 -0
- data/lib/datadog/core/remote/dispatcher.rb +59 -0
- data/lib/datadog/core/remote/ext.rb +13 -0
- data/lib/datadog/core/remote/negotiation.rb +70 -0
- data/lib/datadog/core/remote/tie/tracing.rb +39 -0
- data/lib/datadog/core/remote/tie.rb +27 -0
- data/lib/datadog/core/remote/transport/config.rb +60 -0
- data/lib/datadog/core/remote/transport/http/api/instance.rb +39 -0
- data/lib/datadog/core/remote/transport/http/api/spec.rb +21 -0
- data/lib/datadog/core/remote/transport/http/api.rb +58 -0
- data/lib/datadog/core/remote/transport/http/builder.rb +219 -0
- data/lib/datadog/core/remote/transport/http/client.rb +48 -0
- data/lib/datadog/core/remote/transport/http/config.rb +280 -0
- data/lib/datadog/core/remote/transport/http/negotiation.rb +146 -0
- data/lib/datadog/core/remote/transport/http.rb +147 -0
- data/lib/datadog/core/remote/transport/negotiation.rb +62 -0
- data/lib/datadog/core/remote/worker.rb +102 -0
- data/lib/datadog/core/remote.rb +24 -0
- data/lib/datadog/core/runtime/ext.rb +38 -0
- data/lib/datadog/core/runtime/metrics.rb +185 -0
- data/lib/datadog/core/telemetry/client.rb +87 -0
- data/lib/datadog/core/telemetry/collector.rb +248 -0
- data/lib/datadog/core/telemetry/emitter.rb +50 -0
- data/lib/datadog/core/telemetry/event.rb +83 -0
- data/lib/datadog/core/telemetry/ext.rb +15 -0
- data/lib/datadog/core/telemetry/heartbeat.rb +35 -0
- data/lib/datadog/core/telemetry/http/adapters/net.rb +113 -0
- data/lib/datadog/core/telemetry/http/env.rb +20 -0
- data/lib/datadog/core/telemetry/http/ext.rb +22 -0
- data/lib/datadog/core/telemetry/http/response.rb +66 -0
- data/lib/datadog/core/telemetry/http/transport.rb +56 -0
- data/lib/datadog/core/telemetry/v1/app_event.rb +59 -0
- data/lib/datadog/core/telemetry/v1/application.rb +94 -0
- data/lib/datadog/core/telemetry/v1/configuration.rb +27 -0
- data/lib/datadog/core/telemetry/v1/dependency.rb +45 -0
- data/lib/datadog/core/telemetry/v1/host.rb +59 -0
- data/lib/datadog/core/telemetry/v1/install_signature.rb +38 -0
- data/lib/datadog/core/telemetry/v1/integration.rb +66 -0
- data/lib/datadog/core/telemetry/v1/product.rb +36 -0
- data/lib/datadog/core/telemetry/v1/telemetry_request.rb +108 -0
- data/lib/datadog/core/telemetry/v2/app_client_configuration_change.rb +41 -0
- data/lib/datadog/core/telemetry/v2/request.rb +29 -0
- data/lib/datadog/core/transport/ext.rb +43 -0
- data/lib/datadog/core/transport/http/adapters/net.rb +159 -0
- data/lib/datadog/core/transport/http/adapters/registry.rb +29 -0
- data/lib/datadog/core/transport/http/adapters/test.rb +89 -0
- data/lib/datadog/core/transport/http/adapters/unix_socket.rb +83 -0
- data/lib/datadog/core/transport/http/api/endpoint.rb +31 -0
- data/lib/datadog/core/transport/http/api/fallbacks.rb +26 -0
- data/lib/datadog/core/transport/http/api/map.rb +18 -0
- data/lib/datadog/core/transport/http/env.rb +62 -0
- data/lib/datadog/core/transport/http/response.rb +60 -0
- data/lib/datadog/core/transport/parcel.rb +22 -0
- data/lib/datadog/core/transport/request.rb +17 -0
- data/lib/datadog/core/transport/response.rb +64 -0
- data/lib/datadog/core/utils/duration.rb +52 -0
- data/lib/datadog/core/utils/forking.rb +63 -0
- data/lib/datadog/core/utils/hash.rb +79 -0
- data/lib/datadog/core/utils/network.rb +121 -0
- data/lib/datadog/core/utils/only_once.rb +42 -0
- data/lib/datadog/core/utils/safe_dup.rb +40 -0
- data/lib/datadog/core/utils/sequence.rb +26 -0
- data/lib/datadog/core/utils/time.rb +52 -0
- data/lib/datadog/core/utils/url.rb +25 -0
- data/lib/datadog/core/utils.rb +94 -0
- data/lib/datadog/core/vendor/multipart-post/LICENSE +11 -0
- data/lib/datadog/core/vendor/multipart-post/multipart/post/composite_read_io.rb +118 -0
- data/lib/datadog/core/vendor/multipart-post/multipart/post/multipartable.rb +59 -0
- data/lib/datadog/core/vendor/multipart-post/multipart/post/parts.rb +137 -0
- data/lib/datadog/core/vendor/multipart-post/multipart/post/version.rb +11 -0
- data/lib/datadog/core/vendor/multipart-post/multipart/post.rb +10 -0
- data/lib/datadog/core/vendor/multipart-post/multipart.rb +14 -0
- data/lib/datadog/core/vendor/multipart-post/net/http/post/multipart.rb +34 -0
- data/lib/datadog/core/worker.rb +24 -0
- data/lib/datadog/core/workers/async.rb +185 -0
- data/lib/datadog/core/workers/interval_loop.rb +123 -0
- data/lib/datadog/core/workers/polling.rb +59 -0
- data/lib/datadog/core/workers/queue.rb +44 -0
- data/lib/datadog/core/workers/runtime_metrics.rb +62 -0
- data/lib/datadog/core.rb +45 -0
- data/lib/datadog/kit/appsec/events.rb +169 -0
- data/lib/datadog/kit/enable_core_dumps.rb +49 -0
- data/lib/datadog/kit/identity.rb +104 -0
- data/lib/datadog/kit.rb +11 -0
- data/lib/datadog/opentelemetry/api/context.rb +193 -0
- data/lib/datadog/opentelemetry/api/trace/span.rb +14 -0
- data/lib/datadog/opentelemetry/sdk/configurator.rb +37 -0
- data/lib/datadog/opentelemetry/sdk/id_generator.rb +26 -0
- data/lib/datadog/opentelemetry/sdk/propagator.rb +92 -0
- data/lib/datadog/opentelemetry/sdk/span_processor.rb +134 -0
- data/lib/datadog/opentelemetry/sdk/trace/span.rb +167 -0
- data/lib/datadog/opentelemetry/trace.rb +59 -0
- data/lib/datadog/opentelemetry.rb +51 -0
- data/lib/datadog/profiling/collectors/code_provenance.rb +113 -0
- data/lib/datadog/profiling/collectors/cpu_and_wall_time_worker.rb +114 -0
- data/lib/datadog/profiling/collectors/dynamic_sampling_rate.rb +14 -0
- data/lib/datadog/profiling/collectors/idle_sampling_helper.rb +70 -0
- data/lib/datadog/profiling/collectors/info.rb +103 -0
- data/lib/datadog/profiling/collectors/stack.rb +13 -0
- data/lib/datadog/profiling/collectors/thread_context.rb +61 -0
- data/lib/datadog/profiling/component.rb +418 -0
- data/lib/datadog/profiling/exporter.rb +103 -0
- data/lib/datadog/profiling/ext/forking.rb +98 -0
- data/lib/datadog/profiling/ext.rb +35 -0
- data/lib/datadog/profiling/flush.rb +43 -0
- data/lib/datadog/profiling/http_transport.rb +143 -0
- data/lib/datadog/profiling/load_native_extension.rb +28 -0
- data/lib/datadog/profiling/native_extension.rb +20 -0
- data/lib/datadog/profiling/preload.rb +5 -0
- data/lib/datadog/profiling/profiler.rb +64 -0
- data/lib/datadog/profiling/scheduler.rb +137 -0
- data/lib/datadog/profiling/stack_recorder.rb +69 -0
- data/lib/datadog/profiling/tag_builder.rb +60 -0
- data/lib/datadog/profiling/tasks/exec.rb +50 -0
- data/lib/datadog/profiling/tasks/help.rb +18 -0
- data/lib/datadog/profiling/tasks/setup.rb +60 -0
- data/lib/datadog/profiling.rb +152 -0
- data/lib/datadog/tracing/analytics.rb +25 -0
- data/lib/datadog/tracing/buffer.rb +129 -0
- data/lib/datadog/tracing/client_ip.rb +61 -0
- data/lib/datadog/tracing/component.rb +206 -0
- data/lib/datadog/tracing/configuration/dynamic/option.rb +71 -0
- data/lib/datadog/tracing/configuration/dynamic.rb +64 -0
- data/lib/datadog/tracing/configuration/ext.rb +98 -0
- data/lib/datadog/tracing/configuration/http.rb +74 -0
- data/lib/datadog/tracing/configuration/settings.rb +421 -0
- data/lib/datadog/tracing/context.rb +68 -0
- data/lib/datadog/tracing/context_provider.rb +82 -0
- data/lib/datadog/tracing/contrib/action_cable/configuration/settings.rb +39 -0
- data/lib/datadog/tracing/contrib/action_cable/event.rb +71 -0
- data/lib/datadog/tracing/contrib/action_cable/events/broadcast.rb +58 -0
- data/lib/datadog/tracing/contrib/action_cable/events/perform_action.rb +63 -0
- data/lib/datadog/tracing/contrib/action_cable/events/transmit.rb +59 -0
- data/lib/datadog/tracing/contrib/action_cable/events.rb +37 -0
- data/lib/datadog/tracing/contrib/action_cable/ext.rb +33 -0
- data/lib/datadog/tracing/contrib/action_cable/instrumentation.rb +90 -0
- data/lib/datadog/tracing/contrib/action_cable/integration.rb +50 -0
- data/lib/datadog/tracing/contrib/action_cable/patcher.rb +31 -0
- data/lib/datadog/tracing/contrib/action_mailer/configuration/settings.rb +43 -0
- data/lib/datadog/tracing/contrib/action_mailer/event.rb +52 -0
- data/lib/datadog/tracing/contrib/action_mailer/events/deliver.rb +60 -0
- data/lib/datadog/tracing/contrib/action_mailer/events/process.rb +47 -0
- data/lib/datadog/tracing/contrib/action_mailer/events.rb +34 -0
- data/lib/datadog/tracing/contrib/action_mailer/ext.rb +34 -0
- data/lib/datadog/tracing/contrib/action_mailer/integration.rb +50 -0
- data/lib/datadog/tracing/contrib/action_mailer/patcher.rb +29 -0
- data/lib/datadog/tracing/contrib/action_pack/action_controller/instrumentation.rb +138 -0
- data/lib/datadog/tracing/contrib/action_pack/action_controller/patcher.rb +29 -0
- data/lib/datadog/tracing/contrib/action_pack/configuration/settings.rb +40 -0
- data/lib/datadog/tracing/contrib/action_pack/ext.rb +23 -0
- data/lib/datadog/tracing/contrib/action_pack/integration.rb +51 -0
- data/lib/datadog/tracing/contrib/action_pack/patcher.rb +27 -0
- data/lib/datadog/tracing/contrib/action_pack/utils.rb +40 -0
- data/lib/datadog/tracing/contrib/action_view/configuration/settings.rb +43 -0
- data/lib/datadog/tracing/contrib/action_view/event.rb +35 -0
- data/lib/datadog/tracing/contrib/action_view/events/render_partial.rb +54 -0
- data/lib/datadog/tracing/contrib/action_view/events/render_template.rb +57 -0
- data/lib/datadog/tracing/contrib/action_view/events.rb +34 -0
- data/lib/datadog/tracing/contrib/action_view/ext.rb +25 -0
- data/lib/datadog/tracing/contrib/action_view/integration.rb +58 -0
- data/lib/datadog/tracing/contrib/action_view/patcher.rb +34 -0
- data/lib/datadog/tracing/contrib/action_view/utils.rb +36 -0
- data/lib/datadog/tracing/contrib/active_job/configuration/settings.rb +39 -0
- data/lib/datadog/tracing/contrib/active_job/event.rb +58 -0
- data/lib/datadog/tracing/contrib/active_job/events/discard.rb +50 -0
- data/lib/datadog/tracing/contrib/active_job/events/enqueue.rb +49 -0
- data/lib/datadog/tracing/contrib/active_job/events/enqueue_at.rb +49 -0
- data/lib/datadog/tracing/contrib/active_job/events/enqueue_retry.rb +51 -0
- data/lib/datadog/tracing/contrib/active_job/events/perform.rb +49 -0
- data/lib/datadog/tracing/contrib/active_job/events/retry_stopped.rb +50 -0
- data/lib/datadog/tracing/contrib/active_job/events.rb +42 -0
- data/lib/datadog/tracing/contrib/active_job/ext.rb +40 -0
- data/lib/datadog/tracing/contrib/active_job/integration.rb +50 -0
- data/lib/datadog/tracing/contrib/active_job/log_injection.rb +24 -0
- data/lib/datadog/tracing/contrib/active_job/patcher.rb +36 -0
- data/lib/datadog/tracing/contrib/active_model_serializers/configuration/settings.rb +37 -0
- data/lib/datadog/tracing/contrib/active_model_serializers/event.rb +68 -0
- data/lib/datadog/tracing/contrib/active_model_serializers/events/render.rb +45 -0
- data/lib/datadog/tracing/contrib/active_model_serializers/events/serialize.rb +47 -0
- data/lib/datadog/tracing/contrib/active_model_serializers/events.rb +34 -0
- data/lib/datadog/tracing/contrib/active_model_serializers/ext.rb +25 -0
- data/lib/datadog/tracing/contrib/active_model_serializers/integration.rb +45 -0
- data/lib/datadog/tracing/contrib/active_model_serializers/patcher.rb +32 -0
- data/lib/datadog/tracing/contrib/active_record/configuration/makara_resolver.rb +36 -0
- data/lib/datadog/tracing/contrib/active_record/configuration/resolver.rb +147 -0
- data/lib/datadog/tracing/contrib/active_record/configuration/settings.rb +48 -0
- data/lib/datadog/tracing/contrib/active_record/event.rb +30 -0
- data/lib/datadog/tracing/contrib/active_record/events/instantiation.rb +58 -0
- data/lib/datadog/tracing/contrib/active_record/events/sql.rb +77 -0
- data/lib/datadog/tracing/contrib/active_record/events.rb +34 -0
- data/lib/datadog/tracing/contrib/active_record/ext.rb +30 -0
- data/lib/datadog/tracing/contrib/active_record/integration.rb +57 -0
- data/lib/datadog/tracing/contrib/active_record/patcher.rb +27 -0
- data/lib/datadog/tracing/contrib/active_record/utils.rb +128 -0
- data/lib/datadog/tracing/contrib/active_support/cache/instrumentation.rb +186 -0
- data/lib/datadog/tracing/contrib/active_support/cache/patcher.rb +76 -0
- data/lib/datadog/tracing/contrib/active_support/cache/redis.rb +47 -0
- data/lib/datadog/tracing/contrib/active_support/configuration/settings.rb +47 -0
- data/lib/datadog/tracing/contrib/active_support/ext.rb +32 -0
- data/lib/datadog/tracing/contrib/active_support/integration.rb +52 -0
- data/lib/datadog/tracing/contrib/active_support/notifications/event.rb +71 -0
- data/lib/datadog/tracing/contrib/active_support/notifications/subscriber.rb +71 -0
- data/lib/datadog/tracing/contrib/active_support/notifications/subscription.rb +164 -0
- data/lib/datadog/tracing/contrib/active_support/patcher.rb +27 -0
- data/lib/datadog/tracing/contrib/analytics.rb +28 -0
- data/lib/datadog/tracing/contrib/auto_instrument.rb +53 -0
- data/lib/datadog/tracing/contrib/aws/configuration/settings.rb +53 -0
- data/lib/datadog/tracing/contrib/aws/ext.rb +50 -0
- data/lib/datadog/tracing/contrib/aws/instrumentation.rb +119 -0
- data/lib/datadog/tracing/contrib/aws/integration.rb +47 -0
- data/lib/datadog/tracing/contrib/aws/parsed_context.rb +64 -0
- data/lib/datadog/tracing/contrib/aws/patcher.rb +57 -0
- data/lib/datadog/tracing/contrib/aws/service/base.rb +16 -0
- data/lib/datadog/tracing/contrib/aws/service/dynamodb.rb +22 -0
- data/lib/datadog/tracing/contrib/aws/service/eventbridge.rb +22 -0
- data/lib/datadog/tracing/contrib/aws/service/kinesis.rb +32 -0
- data/lib/datadog/tracing/contrib/aws/service/s3.rb +22 -0
- data/lib/datadog/tracing/contrib/aws/service/sns.rb +30 -0
- data/lib/datadog/tracing/contrib/aws/service/sqs.rb +27 -0
- data/lib/datadog/tracing/contrib/aws/service/states.rb +40 -0
- data/lib/datadog/tracing/contrib/aws/services.rb +139 -0
- data/lib/datadog/tracing/contrib/component.rb +41 -0
- data/lib/datadog/tracing/contrib/concurrent_ruby/async_patch.rb +20 -0
- data/lib/datadog/tracing/contrib/concurrent_ruby/configuration/settings.rb +24 -0
- data/lib/datadog/tracing/contrib/concurrent_ruby/context_composite_executor_service.rb +53 -0
- data/lib/datadog/tracing/contrib/concurrent_ruby/ext.rb +16 -0
- data/lib/datadog/tracing/contrib/concurrent_ruby/future_patch.rb +20 -0
- data/lib/datadog/tracing/contrib/concurrent_ruby/integration.rb +44 -0
- data/lib/datadog/tracing/contrib/concurrent_ruby/patcher.rb +49 -0
- data/lib/datadog/tracing/contrib/concurrent_ruby/promises_future_patch.rb +22 -0
- data/lib/datadog/tracing/contrib/configurable.rb +102 -0
- data/lib/datadog/tracing/contrib/configuration/resolver.rb +85 -0
- data/lib/datadog/tracing/contrib/configuration/resolvers/pattern_resolver.rb +43 -0
- data/lib/datadog/tracing/contrib/configuration/settings.rb +43 -0
- data/lib/datadog/tracing/contrib/dalli/configuration/settings.rb +58 -0
- data/lib/datadog/tracing/contrib/dalli/ext.rb +40 -0
- data/lib/datadog/tracing/contrib/dalli/instrumentation.rb +75 -0
- data/lib/datadog/tracing/contrib/dalli/integration.rb +52 -0
- data/lib/datadog/tracing/contrib/dalli/patcher.rb +28 -0
- data/lib/datadog/tracing/contrib/dalli/quantize.rb +26 -0
- data/lib/datadog/tracing/contrib/delayed_job/configuration/settings.rb +49 -0
- data/lib/datadog/tracing/contrib/delayed_job/ext.rb +29 -0
- data/lib/datadog/tracing/contrib/delayed_job/integration.rb +43 -0
- data/lib/datadog/tracing/contrib/delayed_job/patcher.rb +37 -0
- data/lib/datadog/tracing/contrib/delayed_job/plugin.rb +108 -0
- data/lib/datadog/tracing/contrib/delayed_job/server_internal_tracer/worker.rb +34 -0
- data/lib/datadog/tracing/contrib/elasticsearch/configuration/settings.rb +57 -0
- data/lib/datadog/tracing/contrib/elasticsearch/ext.rb +34 -0
- data/lib/datadog/tracing/contrib/elasticsearch/integration.rb +50 -0
- data/lib/datadog/tracing/contrib/elasticsearch/patcher.rb +164 -0
- data/lib/datadog/tracing/contrib/elasticsearch/quantize.rb +87 -0
- data/lib/datadog/tracing/contrib/ethon/configuration/settings.rb +56 -0
- data/lib/datadog/tracing/contrib/ethon/easy_patch.rb +223 -0
- data/lib/datadog/tracing/contrib/ethon/ext.rb +32 -0
- data/lib/datadog/tracing/contrib/ethon/integration.rb +48 -0
- data/lib/datadog/tracing/contrib/ethon/multi_patch.rb +102 -0
- data/lib/datadog/tracing/contrib/ethon/patcher.rb +30 -0
- data/lib/datadog/tracing/contrib/excon/configuration/settings.rb +74 -0
- data/lib/datadog/tracing/contrib/excon/ext.rb +30 -0
- data/lib/datadog/tracing/contrib/excon/integration.rb +48 -0
- data/lib/datadog/tracing/contrib/excon/middleware.rb +196 -0
- data/lib/datadog/tracing/contrib/excon/patcher.rb +31 -0
- data/lib/datadog/tracing/contrib/ext.rb +55 -0
- data/lib/datadog/tracing/contrib/extensions.rb +228 -0
- data/lib/datadog/tracing/contrib/faraday/configuration/settings.rb +77 -0
- data/lib/datadog/tracing/contrib/faraday/connection.rb +22 -0
- data/lib/datadog/tracing/contrib/faraday/ext.rb +30 -0
- data/lib/datadog/tracing/contrib/faraday/integration.rb +48 -0
- data/lib/datadog/tracing/contrib/faraday/middleware.rb +112 -0
- data/lib/datadog/tracing/contrib/faraday/patcher.rb +56 -0
- data/lib/datadog/tracing/contrib/faraday/rack_builder.rb +22 -0
- data/lib/datadog/tracing/contrib/grape/configuration/settings.rb +55 -0
- data/lib/datadog/tracing/contrib/grape/endpoint.rb +256 -0
- data/lib/datadog/tracing/contrib/grape/ext.rb +30 -0
- data/lib/datadog/tracing/contrib/grape/instrumentation.rb +37 -0
- data/lib/datadog/tracing/contrib/grape/integration.rb +44 -0
- data/lib/datadog/tracing/contrib/grape/patcher.rb +33 -0
- data/lib/datadog/tracing/contrib/graphql/configuration/settings.rb +50 -0
- data/lib/datadog/tracing/contrib/graphql/ext.rb +20 -0
- data/lib/datadog/tracing/contrib/graphql/integration.rb +56 -0
- data/lib/datadog/tracing/contrib/graphql/patcher.rb +55 -0
- data/lib/datadog/tracing/contrib/graphql/trace_patcher.rb +24 -0
- data/lib/datadog/tracing/contrib/graphql/tracing_patcher.rb +28 -0
- data/lib/datadog/tracing/contrib/grpc/configuration/settings.rb +58 -0
- data/lib/datadog/tracing/contrib/grpc/datadog_interceptor/client.rb +117 -0
- data/lib/datadog/tracing/contrib/grpc/datadog_interceptor/server.rb +96 -0
- data/lib/datadog/tracing/contrib/grpc/datadog_interceptor.rb +107 -0
- data/lib/datadog/tracing/contrib/grpc/distributed/fetcher.rb +26 -0
- data/lib/datadog/tracing/contrib/grpc/distributed/propagation.rb +46 -0
- data/lib/datadog/tracing/contrib/grpc/ext.rb +29 -0
- data/lib/datadog/tracing/contrib/grpc/formatting.rb +127 -0
- data/lib/datadog/tracing/contrib/grpc/integration.rb +50 -0
- data/lib/datadog/tracing/contrib/grpc/intercept_with_datadog.rb +53 -0
- data/lib/datadog/tracing/contrib/grpc/patcher.rb +34 -0
- data/lib/datadog/tracing/contrib/grpc.rb +45 -0
- data/lib/datadog/tracing/contrib/hanami/action_tracer.rb +47 -0
- data/lib/datadog/tracing/contrib/hanami/configuration/settings.rb +23 -0
- data/lib/datadog/tracing/contrib/hanami/ext.rb +24 -0
- data/lib/datadog/tracing/contrib/hanami/integration.rb +44 -0
- data/lib/datadog/tracing/contrib/hanami/patcher.rb +33 -0
- data/lib/datadog/tracing/contrib/hanami/plugin.rb +23 -0
- data/lib/datadog/tracing/contrib/hanami/renderer_policy_tracing.rb +41 -0
- data/lib/datadog/tracing/contrib/hanami/router_tracing.rb +44 -0
- data/lib/datadog/tracing/contrib/http/circuit_breaker.rb +40 -0
- data/lib/datadog/tracing/contrib/http/configuration/settings.rb +69 -0
- data/lib/datadog/tracing/contrib/http/distributed/fetcher.rb +38 -0
- data/lib/datadog/tracing/contrib/http/distributed/propagation.rb +45 -0
- data/lib/datadog/tracing/contrib/http/ext.rb +29 -0
- data/lib/datadog/tracing/contrib/http/instrumentation.rb +144 -0
- data/lib/datadog/tracing/contrib/http/integration.rb +49 -0
- data/lib/datadog/tracing/contrib/http/patcher.rb +30 -0
- data/lib/datadog/tracing/contrib/http.rb +45 -0
- data/lib/datadog/tracing/contrib/http_annotation_helper.rb +17 -0
- data/lib/datadog/tracing/contrib/httpclient/configuration/settings.rb +68 -0
- data/lib/datadog/tracing/contrib/httpclient/ext.rb +30 -0
- data/lib/datadog/tracing/contrib/httpclient/instrumentation.rb +137 -0
- data/lib/datadog/tracing/contrib/httpclient/integration.rb +48 -0
- data/lib/datadog/tracing/contrib/httpclient/patcher.rb +42 -0
- data/lib/datadog/tracing/contrib/httprb/configuration/settings.rb +68 -0
- data/lib/datadog/tracing/contrib/httprb/ext.rb +29 -0
- data/lib/datadog/tracing/contrib/httprb/instrumentation.rb +145 -0
- data/lib/datadog/tracing/contrib/httprb/integration.rb +48 -0
- data/lib/datadog/tracing/contrib/httprb/patcher.rb +42 -0
- data/lib/datadog/tracing/contrib/integration.rb +78 -0
- data/lib/datadog/tracing/contrib/kafka/configuration/settings.rb +39 -0
- data/lib/datadog/tracing/contrib/kafka/consumer_event.rb +19 -0
- data/lib/datadog/tracing/contrib/kafka/consumer_group_event.rb +18 -0
- data/lib/datadog/tracing/contrib/kafka/event.rb +53 -0
- data/lib/datadog/tracing/contrib/kafka/events/connection/request.rb +42 -0
- data/lib/datadog/tracing/contrib/kafka/events/consumer/process_batch.rb +49 -0
- data/lib/datadog/tracing/contrib/kafka/events/consumer/process_message.rb +47 -0
- data/lib/datadog/tracing/contrib/kafka/events/consumer_group/heartbeat.rb +47 -0
- data/lib/datadog/tracing/contrib/kafka/events/consumer_group/join_group.rb +37 -0
- data/lib/datadog/tracing/contrib/kafka/events/consumer_group/leave_group.rb +37 -0
- data/lib/datadog/tracing/contrib/kafka/events/consumer_group/sync_group.rb +37 -0
- data/lib/datadog/tracing/contrib/kafka/events/produce_operation/send_messages.rb +41 -0
- data/lib/datadog/tracing/contrib/kafka/events/producer/deliver_messages.rb +44 -0
- data/lib/datadog/tracing/contrib/kafka/events.rb +48 -0
- data/lib/datadog/tracing/contrib/kafka/ext.rb +55 -0
- data/lib/datadog/tracing/contrib/kafka/integration.rb +44 -0
- data/lib/datadog/tracing/contrib/kafka/patcher.rb +29 -0
- data/lib/datadog/tracing/contrib/lograge/configuration/settings.rb +24 -0
- data/lib/datadog/tracing/contrib/lograge/ext.rb +15 -0
- data/lib/datadog/tracing/contrib/lograge/instrumentation.rb +31 -0
- data/lib/datadog/tracing/contrib/lograge/integration.rb +50 -0
- data/lib/datadog/tracing/contrib/lograge/patcher.rb +29 -0
- data/lib/datadog/tracing/contrib/mongodb/configuration/settings.rb +56 -0
- data/lib/datadog/tracing/contrib/mongodb/ext.rb +38 -0
- data/lib/datadog/tracing/contrib/mongodb/instrumentation.rb +47 -0
- data/lib/datadog/tracing/contrib/mongodb/integration.rb +48 -0
- data/lib/datadog/tracing/contrib/mongodb/parsers.rb +49 -0
- data/lib/datadog/tracing/contrib/mongodb/patcher.rb +34 -0
- data/lib/datadog/tracing/contrib/mongodb/subscribers.rb +141 -0
- data/lib/datadog/tracing/contrib/mysql2/configuration/settings.rb +64 -0
- data/lib/datadog/tracing/contrib/mysql2/ext.rb +28 -0
- data/lib/datadog/tracing/contrib/mysql2/instrumentation.rb +95 -0
- data/lib/datadog/tracing/contrib/mysql2/integration.rb +43 -0
- data/lib/datadog/tracing/contrib/mysql2/patcher.rb +31 -0
- data/lib/datadog/tracing/contrib/opensearch/configuration/settings.rb +54 -0
- data/lib/datadog/tracing/contrib/opensearch/ext.rb +38 -0
- data/lib/datadog/tracing/contrib/opensearch/integration.rb +44 -0
- data/lib/datadog/tracing/contrib/opensearch/patcher.rb +135 -0
- data/lib/datadog/tracing/contrib/opensearch/quantize.rb +81 -0
- data/lib/datadog/tracing/contrib/patchable.rb +109 -0
- data/lib/datadog/tracing/contrib/patcher.rb +85 -0
- data/lib/datadog/tracing/contrib/pg/configuration/settings.rb +64 -0
- data/lib/datadog/tracing/contrib/pg/ext.rb +35 -0
- data/lib/datadog/tracing/contrib/pg/instrumentation.rb +211 -0
- data/lib/datadog/tracing/contrib/pg/integration.rb +43 -0
- data/lib/datadog/tracing/contrib/pg/patcher.rb +31 -0
- data/lib/datadog/tracing/contrib/presto/configuration/settings.rb +52 -0
- data/lib/datadog/tracing/contrib/presto/ext.rb +38 -0
- data/lib/datadog/tracing/contrib/presto/instrumentation.rb +138 -0
- data/lib/datadog/tracing/contrib/presto/integration.rb +43 -0
- data/lib/datadog/tracing/contrib/presto/patcher.rb +37 -0
- data/lib/datadog/tracing/contrib/propagation/sql_comment/comment.rb +41 -0
- data/lib/datadog/tracing/contrib/propagation/sql_comment/ext.rb +33 -0
- data/lib/datadog/tracing/contrib/propagation/sql_comment/mode.rb +28 -0
- data/lib/datadog/tracing/contrib/propagation/sql_comment.rb +55 -0
- data/lib/datadog/tracing/contrib/que/configuration/settings.rb +55 -0
- data/lib/datadog/tracing/contrib/que/ext.rb +33 -0
- data/lib/datadog/tracing/contrib/que/integration.rb +44 -0
- data/lib/datadog/tracing/contrib/que/patcher.rb +26 -0
- data/lib/datadog/tracing/contrib/que/tracer.rb +63 -0
- data/lib/datadog/tracing/contrib/racecar/configuration/settings.rb +47 -0
- data/lib/datadog/tracing/contrib/racecar/event.rb +81 -0
- data/lib/datadog/tracing/contrib/racecar/events/batch.rb +38 -0
- data/lib/datadog/tracing/contrib/racecar/events/consume.rb +35 -0
- data/lib/datadog/tracing/contrib/racecar/events/message.rb +38 -0
- data/lib/datadog/tracing/contrib/racecar/events.rb +36 -0
- data/lib/datadog/tracing/contrib/racecar/ext.rb +33 -0
- data/lib/datadog/tracing/contrib/racecar/integration.rb +44 -0
- data/lib/datadog/tracing/contrib/racecar/patcher.rb +29 -0
- data/lib/datadog/tracing/contrib/rack/configuration/settings.rb +59 -0
- data/lib/datadog/tracing/contrib/rack/ext.rb +30 -0
- data/lib/datadog/tracing/contrib/rack/header_collection.rb +40 -0
- data/lib/datadog/tracing/contrib/rack/header_tagging.rb +63 -0
- data/lib/datadog/tracing/contrib/rack/integration.rb +50 -0
- data/lib/datadog/tracing/contrib/rack/middlewares.rb +265 -0
- data/lib/datadog/tracing/contrib/rack/patcher.rb +119 -0
- data/lib/datadog/tracing/contrib/rack/request_queue.rb +48 -0
- data/lib/datadog/tracing/contrib/rack/trace_proxy_middleware.rb +52 -0
- data/lib/datadog/tracing/contrib/rails/auto_instrument_railtie.rb +10 -0
- data/lib/datadog/tracing/contrib/rails/configuration/settings.rb +76 -0
- data/lib/datadog/tracing/contrib/rails/ext.rb +23 -0
- data/lib/datadog/tracing/contrib/rails/framework.rb +148 -0
- data/lib/datadog/tracing/contrib/rails/integration.rb +52 -0
- data/lib/datadog/tracing/contrib/rails/log_injection.rb +29 -0
- data/lib/datadog/tracing/contrib/rails/middlewares.rb +46 -0
- data/lib/datadog/tracing/contrib/rails/patcher.rb +88 -0
- data/lib/datadog/tracing/contrib/rails/railtie.rb +19 -0
- data/lib/datadog/tracing/contrib/rails/utils.rb +26 -0
- data/lib/datadog/tracing/contrib/rake/configuration/settings.rb +55 -0
- data/lib/datadog/tracing/contrib/rake/ext.rb +27 -0
- data/lib/datadog/tracing/contrib/rake/instrumentation.rb +103 -0
- data/lib/datadog/tracing/contrib/rake/integration.rb +43 -0
- data/lib/datadog/tracing/contrib/rake/patcher.rb +33 -0
- data/lib/datadog/tracing/contrib/redis/configuration/resolver.rb +49 -0
- data/lib/datadog/tracing/contrib/redis/configuration/settings.rb +57 -0
- data/lib/datadog/tracing/contrib/redis/ext.rb +35 -0
- data/lib/datadog/tracing/contrib/redis/instrumentation.rb +53 -0
- data/lib/datadog/tracing/contrib/redis/integration.rb +80 -0
- data/lib/datadog/tracing/contrib/redis/patcher.rb +92 -0
- data/lib/datadog/tracing/contrib/redis/quantize.rb +80 -0
- data/lib/datadog/tracing/contrib/redis/tags.rb +68 -0
- data/lib/datadog/tracing/contrib/redis/trace_middleware.rb +85 -0
- data/lib/datadog/tracing/contrib/redis/vendor/LICENSE +20 -0
- data/lib/datadog/tracing/contrib/redis/vendor/resolver.rb +160 -0
- data/lib/datadog/tracing/contrib/registerable.rb +50 -0
- data/lib/datadog/tracing/contrib/registry.rb +52 -0
- data/lib/datadog/tracing/contrib/resque/configuration/settings.rb +42 -0
- data/lib/datadog/tracing/contrib/resque/ext.rb +22 -0
- data/lib/datadog/tracing/contrib/resque/integration.rb +48 -0
- data/lib/datadog/tracing/contrib/resque/patcher.rb +29 -0
- data/lib/datadog/tracing/contrib/resque/resque_job.rb +106 -0
- data/lib/datadog/tracing/contrib/rest_client/configuration/settings.rb +55 -0
- data/lib/datadog/tracing/contrib/rest_client/ext.rb +28 -0
- data/lib/datadog/tracing/contrib/rest_client/integration.rb +43 -0
- data/lib/datadog/tracing/contrib/rest_client/patcher.rb +28 -0
- data/lib/datadog/tracing/contrib/rest_client/request_patch.rb +129 -0
- data/lib/datadog/tracing/contrib/roda/configuration/settings.rb +38 -0
- data/lib/datadog/tracing/contrib/roda/ext.rb +19 -0
- data/lib/datadog/tracing/contrib/roda/instrumentation.rb +76 -0
- data/lib/datadog/tracing/contrib/roda/integration.rb +45 -0
- data/lib/datadog/tracing/contrib/roda/patcher.rb +30 -0
- data/lib/datadog/tracing/contrib/semantic_logger/configuration/settings.rb +24 -0
- data/lib/datadog/tracing/contrib/semantic_logger/ext.rb +15 -0
- data/lib/datadog/tracing/contrib/semantic_logger/instrumentation.rb +35 -0
- data/lib/datadog/tracing/contrib/semantic_logger/integration.rb +52 -0
- data/lib/datadog/tracing/contrib/semantic_logger/patcher.rb +29 -0
- data/lib/datadog/tracing/contrib/sequel/configuration/settings.rb +37 -0
- data/lib/datadog/tracing/contrib/sequel/database.rb +62 -0
- data/lib/datadog/tracing/contrib/sequel/dataset.rb +67 -0
- data/lib/datadog/tracing/contrib/sequel/ext.rb +23 -0
- data/lib/datadog/tracing/contrib/sequel/integration.rb +43 -0
- data/lib/datadog/tracing/contrib/sequel/patcher.rb +37 -0
- data/lib/datadog/tracing/contrib/sequel/utils.rb +90 -0
- data/lib/datadog/tracing/contrib/shoryuken/configuration/settings.rb +43 -0
- data/lib/datadog/tracing/contrib/shoryuken/ext.rb +27 -0
- data/lib/datadog/tracing/contrib/shoryuken/integration.rb +44 -0
- data/lib/datadog/tracing/contrib/shoryuken/patcher.rb +28 -0
- data/lib/datadog/tracing/contrib/shoryuken/tracer.rb +65 -0
- data/lib/datadog/tracing/contrib/sidekiq/client_tracer.rb +62 -0
- data/lib/datadog/tracing/contrib/sidekiq/configuration/settings.rb +47 -0
- data/lib/datadog/tracing/contrib/sidekiq/distributed/propagation.rb +46 -0
- data/lib/datadog/tracing/contrib/sidekiq/ext.rb +44 -0
- data/lib/datadog/tracing/contrib/sidekiq/integration.rb +61 -0
- data/lib/datadog/tracing/contrib/sidekiq/patcher.rb +90 -0
- data/lib/datadog/tracing/contrib/sidekiq/server_internal_tracer/heartbeat.rb +61 -0
- data/lib/datadog/tracing/contrib/sidekiq/server_internal_tracer/job_fetch.rb +36 -0
- data/lib/datadog/tracing/contrib/sidekiq/server_internal_tracer/redis_info.rb +34 -0
- data/lib/datadog/tracing/contrib/sidekiq/server_internal_tracer/scheduled_poller.rb +57 -0
- data/lib/datadog/tracing/contrib/sidekiq/server_internal_tracer/stop.rb +34 -0
- data/lib/datadog/tracing/contrib/sidekiq/server_tracer.rb +88 -0
- data/lib/datadog/tracing/contrib/sidekiq/utils.rb +44 -0
- data/lib/datadog/tracing/contrib/sidekiq.rb +37 -0
- data/lib/datadog/tracing/contrib/sinatra/configuration/settings.rb +46 -0
- data/lib/datadog/tracing/contrib/sinatra/env.rb +38 -0
- data/lib/datadog/tracing/contrib/sinatra/ext.rb +31 -0
- data/lib/datadog/tracing/contrib/sinatra/framework.rb +116 -0
- data/lib/datadog/tracing/contrib/sinatra/integration.rb +43 -0
- data/lib/datadog/tracing/contrib/sinatra/patcher.rb +75 -0
- data/lib/datadog/tracing/contrib/sinatra/tracer.rb +86 -0
- data/lib/datadog/tracing/contrib/sinatra/tracer_middleware.rb +109 -0
- data/lib/datadog/tracing/contrib/sneakers/configuration/settings.rb +43 -0
- data/lib/datadog/tracing/contrib/sneakers/ext.rb +27 -0
- data/lib/datadog/tracing/contrib/sneakers/integration.rb +44 -0
- data/lib/datadog/tracing/contrib/sneakers/patcher.rb +27 -0
- data/lib/datadog/tracing/contrib/sneakers/tracer.rb +60 -0
- data/lib/datadog/tracing/contrib/span_attribute_schema.rb +92 -0
- data/lib/datadog/tracing/contrib/status_range_env_parser.rb +33 -0
- data/lib/datadog/tracing/contrib/status_range_matcher.rb +25 -0
- data/lib/datadog/tracing/contrib/stripe/configuration/settings.rb +37 -0
- data/lib/datadog/tracing/contrib/stripe/ext.rb +27 -0
- data/lib/datadog/tracing/contrib/stripe/integration.rb +43 -0
- data/lib/datadog/tracing/contrib/stripe/patcher.rb +28 -0
- data/lib/datadog/tracing/contrib/stripe/request.rb +67 -0
- data/lib/datadog/tracing/contrib/sucker_punch/configuration/settings.rb +39 -0
- data/lib/datadog/tracing/contrib/sucker_punch/exception_handler.rb +28 -0
- data/lib/datadog/tracing/contrib/sucker_punch/ext.rb +28 -0
- data/lib/datadog/tracing/contrib/sucker_punch/instrumentation.rb +104 -0
- data/lib/datadog/tracing/contrib/sucker_punch/integration.rb +43 -0
- data/lib/datadog/tracing/contrib/sucker_punch/patcher.rb +35 -0
- data/lib/datadog/tracing/contrib/trilogy/configuration/settings.rb +58 -0
- data/lib/datadog/tracing/contrib/trilogy/ext.rb +27 -0
- data/lib/datadog/tracing/contrib/trilogy/instrumentation.rb +94 -0
- data/lib/datadog/tracing/contrib/trilogy/integration.rb +43 -0
- data/lib/datadog/tracing/contrib/trilogy/patcher.rb +31 -0
- data/lib/datadog/tracing/contrib/utils/database.rb +31 -0
- data/lib/datadog/tracing/contrib/utils/quantization/hash.rb +111 -0
- data/lib/datadog/tracing/contrib/utils/quantization/http.rb +179 -0
- data/lib/datadog/tracing/contrib.rb +81 -0
- data/lib/datadog/tracing/correlation.rb +103 -0
- data/lib/datadog/tracing/diagnostics/environment_logger.rb +159 -0
- data/lib/datadog/tracing/diagnostics/ext.rb +36 -0
- data/lib/datadog/tracing/diagnostics/health.rb +40 -0
- data/lib/datadog/tracing/distributed/b3_multi.rb +73 -0
- data/lib/datadog/tracing/distributed/b3_single.rb +69 -0
- data/lib/datadog/tracing/distributed/datadog.rb +200 -0
- data/lib/datadog/tracing/distributed/datadog_tags_codec.rb +84 -0
- data/lib/datadog/tracing/distributed/fetcher.rb +21 -0
- data/lib/datadog/tracing/distributed/helpers.rb +65 -0
- data/lib/datadog/tracing/distributed/none.rb +18 -0
- data/lib/datadog/tracing/distributed/propagation.rb +121 -0
- data/lib/datadog/tracing/distributed/trace_context.rb +436 -0
- data/lib/datadog/tracing/event.rb +76 -0
- data/lib/datadog/tracing/flush.rb +96 -0
- data/lib/datadog/tracing/metadata/analytics.rb +26 -0
- data/lib/datadog/tracing/metadata/errors.rb +24 -0
- data/lib/datadog/tracing/metadata/ext.rb +193 -0
- data/lib/datadog/tracing/metadata/tagging.rb +131 -0
- data/lib/datadog/tracing/metadata.rb +20 -0
- data/lib/datadog/tracing/pipeline/span_filter.rb +46 -0
- data/lib/datadog/tracing/pipeline/span_processor.rb +39 -0
- data/lib/datadog/tracing/pipeline.rb +63 -0
- data/lib/datadog/tracing/remote.rb +78 -0
- data/lib/datadog/tracing/runtime/metrics.rb +17 -0
- data/lib/datadog/tracing/sampling/all_sampler.rb +24 -0
- data/lib/datadog/tracing/sampling/ext.rb +56 -0
- data/lib/datadog/tracing/sampling/matcher.rb +65 -0
- data/lib/datadog/tracing/sampling/priority_sampler.rb +160 -0
- data/lib/datadog/tracing/sampling/rate_by_key_sampler.rb +87 -0
- data/lib/datadog/tracing/sampling/rate_by_service_sampler.rb +63 -0
- data/lib/datadog/tracing/sampling/rate_limiter.rb +185 -0
- data/lib/datadog/tracing/sampling/rate_sampler.rb +58 -0
- data/lib/datadog/tracing/sampling/rule.rb +61 -0
- data/lib/datadog/tracing/sampling/rule_sampler.rb +148 -0
- data/lib/datadog/tracing/sampling/sampler.rb +32 -0
- data/lib/datadog/tracing/sampling/span/ext.rb +25 -0
- data/lib/datadog/tracing/sampling/span/matcher.rb +89 -0
- data/lib/datadog/tracing/sampling/span/rule.rb +78 -0
- data/lib/datadog/tracing/sampling/span/rule_parser.rb +104 -0
- data/lib/datadog/tracing/sampling/span/sampler.rb +77 -0
- data/lib/datadog/tracing/span.rb +207 -0
- data/lib/datadog/tracing/span_operation.rb +498 -0
- data/lib/datadog/tracing/sync_writer.rb +67 -0
- data/lib/datadog/tracing/trace_digest.rb +185 -0
- data/lib/datadog/tracing/trace_operation.rb +492 -0
- data/lib/datadog/tracing/trace_segment.rb +222 -0
- data/lib/datadog/tracing/tracer.rb +531 -0
- data/lib/datadog/tracing/transport/http/api/instance.rb +37 -0
- data/lib/datadog/tracing/transport/http/api/spec.rb +19 -0
- data/lib/datadog/tracing/transport/http/api.rb +43 -0
- data/lib/datadog/tracing/transport/http/builder.rb +162 -0
- data/lib/datadog/tracing/transport/http/client.rb +57 -0
- data/lib/datadog/tracing/transport/http/statistics.rb +47 -0
- data/lib/datadog/tracing/transport/http/traces.rb +152 -0
- data/lib/datadog/tracing/transport/http.rb +97 -0
- data/lib/datadog/tracing/transport/io/client.rb +89 -0
- data/lib/datadog/tracing/transport/io/response.rb +27 -0
- data/lib/datadog/tracing/transport/io/traces.rb +101 -0
- data/lib/datadog/tracing/transport/io.rb +30 -0
- data/lib/datadog/tracing/transport/serializable_trace.rb +126 -0
- data/lib/datadog/tracing/transport/statistics.rb +77 -0
- data/lib/datadog/tracing/transport/trace_formatter.rb +240 -0
- data/lib/datadog/tracing/transport/traces.rb +224 -0
- data/lib/datadog/tracing/utils.rb +83 -0
- data/lib/datadog/tracing/workers/trace_writer.rb +196 -0
- data/lib/datadog/tracing/workers.rb +125 -0
- data/lib/datadog/tracing/writer.rb +188 -0
- data/lib/datadog/tracing.rb +169 -0
- data/lib/datadog/version.rb +26 -0
- data/lib/datadog.rb +10 -0
- metadata +886 -0
@@ -0,0 +1,207 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative '../core/utils/safe_dup'
|
4
|
+
require_relative 'utils'
|
5
|
+
|
6
|
+
require_relative 'metadata/ext'
|
7
|
+
require_relative 'metadata'
|
8
|
+
|
9
|
+
module Datadog
|
10
|
+
module Tracing
|
11
|
+
# Represents a logical unit of work in the system. Each trace consists of one or more spans.
|
12
|
+
# Each span consists of a start time and a duration. For example, a span can describe the time
|
13
|
+
# spent on a distributed call on a separate machine, or the time spent in a small component
|
14
|
+
# within a larger operation. Spans can be nested within each other, and in those instances
|
15
|
+
# will have a parent-child relationship.
|
16
|
+
# @public_api
|
17
|
+
class Span
|
18
|
+
include Metadata
|
19
|
+
|
20
|
+
attr_accessor \
|
21
|
+
:end_time,
|
22
|
+
:id,
|
23
|
+
:meta,
|
24
|
+
:metrics,
|
25
|
+
:name,
|
26
|
+
:parent_id,
|
27
|
+
:resource,
|
28
|
+
:service,
|
29
|
+
:type,
|
30
|
+
:start_time,
|
31
|
+
:status,
|
32
|
+
:trace_id
|
33
|
+
|
34
|
+
attr_writer \
|
35
|
+
:duration
|
36
|
+
|
37
|
+
# Create a new span manually. Call the <tt>start()</tt> method to start the time
|
38
|
+
# measurement and then <tt>stop()</tt> once the timing operation is over.
|
39
|
+
#
|
40
|
+
# * +service+: the service name for this span
|
41
|
+
# * +resource+: the resource this span refers, or +name+ if it's missing.
|
42
|
+
# +nil+ can be used as a placeholder, when the resource value is not yet known at +#initialize+ time.
|
43
|
+
# * +type+: the type of the span (such as +http+, +db+ and so on)
|
44
|
+
# * +parent_id+: the identifier of the parent span
|
45
|
+
# * +trace_id+: the identifier of the root span for this trace
|
46
|
+
# * +service_entry+: whether it is a service entry span.
|
47
|
+
def initialize(
|
48
|
+
name,
|
49
|
+
duration: nil,
|
50
|
+
end_time: nil,
|
51
|
+
id: nil,
|
52
|
+
meta: nil,
|
53
|
+
metrics: nil,
|
54
|
+
parent_id: 0,
|
55
|
+
resource: name,
|
56
|
+
service: nil,
|
57
|
+
start_time: nil,
|
58
|
+
status: 0,
|
59
|
+
type: nil,
|
60
|
+
trace_id: nil,
|
61
|
+
service_entry: nil
|
62
|
+
)
|
63
|
+
@name = Core::Utils::SafeDup.frozen_or_dup(name)
|
64
|
+
@service = Core::Utils::SafeDup.frozen_or_dup(service)
|
65
|
+
@resource = Core::Utils::SafeDup.frozen_or_dup(resource)
|
66
|
+
@type = Core::Utils::SafeDup.frozen_or_dup(type)
|
67
|
+
|
68
|
+
@id = id || Tracing::Utils.next_id
|
69
|
+
@parent_id = parent_id || 0
|
70
|
+
@trace_id = trace_id || Tracing::Utils.next_id
|
71
|
+
|
72
|
+
@meta = meta || {}
|
73
|
+
@metrics = metrics || {}
|
74
|
+
@status = status || 0
|
75
|
+
|
76
|
+
# start_time and end_time track wall clock. In Ruby, wall clock
|
77
|
+
# has less accuracy than monotonic clock, so if possible we look to only use wall clock
|
78
|
+
# to measure duration when a time is supplied by the user, or if monotonic clock
|
79
|
+
# is unsupported.
|
80
|
+
@start_time = start_time
|
81
|
+
@end_time = end_time
|
82
|
+
|
83
|
+
# duration_start and duration_end track monotonic clock, and may remain nil in cases where it
|
84
|
+
# is known that we have to use wall clock to measure duration.
|
85
|
+
@duration = duration
|
86
|
+
|
87
|
+
@service_entry = service_entry
|
88
|
+
|
89
|
+
# Mark with the service entry span metric, if applicable
|
90
|
+
set_metric(Metadata::Ext::TAG_TOP_LEVEL, 1.0) if service_entry
|
91
|
+
end
|
92
|
+
|
93
|
+
# Return whether the duration is started or not
|
94
|
+
def started?
|
95
|
+
!@start_time.nil?
|
96
|
+
end
|
97
|
+
|
98
|
+
# Return whether the duration is stopped or not.
|
99
|
+
def stopped?
|
100
|
+
!@end_time.nil?
|
101
|
+
end
|
102
|
+
alias :finished? :stopped?
|
103
|
+
|
104
|
+
def duration
|
105
|
+
return @duration if @duration
|
106
|
+
return @end_time - @start_time if @start_time && @end_time
|
107
|
+
end
|
108
|
+
|
109
|
+
def set_error(e)
|
110
|
+
@status = Metadata::Ext::Errors::STATUS
|
111
|
+
super
|
112
|
+
end
|
113
|
+
|
114
|
+
# Spans with the same ID are considered the same span
|
115
|
+
def ==(other)
|
116
|
+
other.instance_of?(Span) &&
|
117
|
+
@id == other.id
|
118
|
+
end
|
119
|
+
|
120
|
+
# Return a string representation of the span.
|
121
|
+
def to_s
|
122
|
+
"Span(name:#{@name},sid:#{@id},tid:#{@trace_id},pid:#{@parent_id})"
|
123
|
+
end
|
124
|
+
|
125
|
+
# Return the hash representation of the current span.
|
126
|
+
# TODO: Change this to reflect attributes when serialization
|
127
|
+
# isn't handled by this method.
|
128
|
+
def to_hash
|
129
|
+
h = {
|
130
|
+
error: @status,
|
131
|
+
meta: @meta,
|
132
|
+
metrics: @metrics,
|
133
|
+
name: @name,
|
134
|
+
parent_id: @parent_id,
|
135
|
+
resource: @resource,
|
136
|
+
service: @service,
|
137
|
+
span_id: @id,
|
138
|
+
trace_id: @trace_id,
|
139
|
+
type: @type
|
140
|
+
}
|
141
|
+
|
142
|
+
if stopped?
|
143
|
+
h[:start] = start_time_nano
|
144
|
+
h[:duration] = duration_nano
|
145
|
+
end
|
146
|
+
|
147
|
+
h
|
148
|
+
end
|
149
|
+
|
150
|
+
# Return a human readable version of the span
|
151
|
+
def pretty_print(q)
|
152
|
+
start_time = (self.start_time.to_f * 1e9).to_i
|
153
|
+
end_time = (self.end_time.to_f * 1e9).to_i
|
154
|
+
q.group 0 do
|
155
|
+
q.breakable
|
156
|
+
q.text "Name: #{@name}\n"
|
157
|
+
q.text "Span ID: #{@id}\n"
|
158
|
+
q.text "Parent ID: #{@parent_id}\n"
|
159
|
+
q.text "Trace ID: #{@trace_id}\n"
|
160
|
+
q.text "Type: #{@type}\n"
|
161
|
+
q.text "Service: #{@service}\n"
|
162
|
+
q.text "Resource: #{@resource}\n"
|
163
|
+
q.text "Error: #{@status}\n"
|
164
|
+
q.text "Start: #{start_time}\n"
|
165
|
+
q.text "End: #{end_time}\n"
|
166
|
+
q.text "Duration: #{duration.to_f}\n"
|
167
|
+
q.group(2, 'Tags: [', "]\n") do
|
168
|
+
q.breakable
|
169
|
+
q.seplist @meta.each do |key, value|
|
170
|
+
q.text "#{key} => #{value}"
|
171
|
+
end
|
172
|
+
end
|
173
|
+
q.group(2, 'Metrics: [', ']') do
|
174
|
+
q.breakable
|
175
|
+
q.seplist @metrics.each do |key, value|
|
176
|
+
q.text "#{key} => #{value}"
|
177
|
+
end
|
178
|
+
end
|
179
|
+
end
|
180
|
+
end
|
181
|
+
|
182
|
+
private
|
183
|
+
|
184
|
+
# Used for serialization
|
185
|
+
# @return [Integer] in nanoseconds since Epoch
|
186
|
+
def start_time_nano
|
187
|
+
@start_time.to_i * 1000000000 + @start_time.nsec
|
188
|
+
end
|
189
|
+
|
190
|
+
# Used for serialization
|
191
|
+
# @return [Integer] in nanoseconds since Epoch
|
192
|
+
def duration_nano
|
193
|
+
(duration * 1e9).to_i
|
194
|
+
end
|
195
|
+
|
196
|
+
# https://docs.datadoghq.com/tracing/visualization/#service-entry-span
|
197
|
+
# A span is a service entry span when it is the entrypoint method for a request to a service.
|
198
|
+
# You can visualize this within Datadog APM when the color of the immediate parent on a flame graph is a different
|
199
|
+
# color. Services are also listed on the right when viewing a flame graph.
|
200
|
+
#
|
201
|
+
# @return [Boolean] `true` if the span is a serivce entry span
|
202
|
+
def service_entry?
|
203
|
+
@service_entry == true
|
204
|
+
end
|
205
|
+
end
|
206
|
+
end
|
207
|
+
end
|
@@ -0,0 +1,498 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'time'
|
4
|
+
|
5
|
+
require_relative '../core/environment/identity'
|
6
|
+
require_relative '../core/utils'
|
7
|
+
require_relative '../core/utils/time'
|
8
|
+
require_relative '../core/utils/safe_dup'
|
9
|
+
|
10
|
+
require_relative 'event'
|
11
|
+
require_relative 'metadata'
|
12
|
+
require_relative 'metadata/ext'
|
13
|
+
require_relative 'span'
|
14
|
+
require_relative 'utils'
|
15
|
+
|
16
|
+
module Datadog
|
17
|
+
module Tracing
|
18
|
+
# Represents the act of taking a span measurement.
|
19
|
+
# It gives a Span a context which can be used to
|
20
|
+
# build a Span. When completed, it yields the Span.
|
21
|
+
#
|
22
|
+
# @public_api
|
23
|
+
class SpanOperation
|
24
|
+
include Metadata
|
25
|
+
|
26
|
+
# Span attributes
|
27
|
+
# NOTE: In the future, we should drop the me
|
28
|
+
attr_reader \
|
29
|
+
:end_time,
|
30
|
+
:id,
|
31
|
+
:name,
|
32
|
+
:parent_id,
|
33
|
+
:resource,
|
34
|
+
:service,
|
35
|
+
:start_time,
|
36
|
+
:trace_id,
|
37
|
+
:type
|
38
|
+
|
39
|
+
attr_accessor \
|
40
|
+
:status
|
41
|
+
|
42
|
+
def initialize(
|
43
|
+
name,
|
44
|
+
events: nil,
|
45
|
+
on_error: nil,
|
46
|
+
parent_id: 0,
|
47
|
+
resource: name,
|
48
|
+
service: nil,
|
49
|
+
start_time: nil,
|
50
|
+
tags: nil,
|
51
|
+
trace_id: nil,
|
52
|
+
type: nil
|
53
|
+
)
|
54
|
+
# Ensure dynamically created strings are UTF-8 encoded.
|
55
|
+
#
|
56
|
+
# All strings created in Ruby land are UTF-8. The only sources of non-UTF-8 string are:
|
57
|
+
# * Strings explicitly encoded as non-UTF-8.
|
58
|
+
# * Some natively created string, although most natively created strings are UTF-8.
|
59
|
+
self.name = name
|
60
|
+
self.service = service
|
61
|
+
self.type = type
|
62
|
+
self.resource = resource
|
63
|
+
|
64
|
+
@id = Tracing::Utils.next_id
|
65
|
+
@parent_id = parent_id || 0
|
66
|
+
@trace_id = trace_id || Tracing::Utils::TraceId.next_id
|
67
|
+
|
68
|
+
@status = 0
|
69
|
+
|
70
|
+
# start_time and end_time track wall clock. In Ruby, wall clock
|
71
|
+
# has less accuracy than monotonic clock, so if possible we look to only use wall clock
|
72
|
+
# to measure duration when a time is supplied by the user, or if monotonic clock
|
73
|
+
# is unsupported.
|
74
|
+
@start_time = nil
|
75
|
+
@end_time = nil
|
76
|
+
|
77
|
+
# duration_start and duration_end track monotonic clock, and may remain nil in cases where it
|
78
|
+
# is known that we have to use wall clock to measure duration.
|
79
|
+
@duration_start = nil
|
80
|
+
@duration_end = nil
|
81
|
+
|
82
|
+
# Set tags if provided.
|
83
|
+
set_tags(tags) if tags
|
84
|
+
|
85
|
+
# Some other SpanOperation-specific behavior
|
86
|
+
@events = events || Events.new
|
87
|
+
@span = nil
|
88
|
+
|
89
|
+
# Subscribe :on_error event
|
90
|
+
@events.on_error.wrap_default(&on_error) if on_error.is_a?(Proc)
|
91
|
+
|
92
|
+
# Start the span with start time, if given.
|
93
|
+
start(start_time) if start_time
|
94
|
+
end
|
95
|
+
|
96
|
+
# Operation name.
|
97
|
+
# @!attribute [rw] name
|
98
|
+
# @return [String]
|
99
|
+
def name=(name)
|
100
|
+
raise ArgumentError, "SpanOperation name can't be nil" unless name
|
101
|
+
|
102
|
+
@name = Core::Utils.utf8_encode(name)
|
103
|
+
end
|
104
|
+
|
105
|
+
# Span type.
|
106
|
+
# @!attribute [rw] type
|
107
|
+
# @return [String
|
108
|
+
def type=(type)
|
109
|
+
@type = type.nil? ? nil : Core::Utils.utf8_encode(type) # Allow this to be explicitly set to nil
|
110
|
+
end
|
111
|
+
|
112
|
+
# Service name.
|
113
|
+
# @!attribute [rw] service
|
114
|
+
# @return [String
|
115
|
+
def service=(service)
|
116
|
+
@service = service.nil? ? nil : Core::Utils.utf8_encode(service) # Allow this to be explicitly set to nil
|
117
|
+
end
|
118
|
+
|
119
|
+
# Span resource.
|
120
|
+
# @!attribute [rw] resource
|
121
|
+
# @return [String
|
122
|
+
def resource=(resource)
|
123
|
+
@resource = resource.nil? ? nil : Core::Utils.utf8_encode(resource) # Allow this to be explicitly set to nil
|
124
|
+
end
|
125
|
+
|
126
|
+
def measure
|
127
|
+
raise ArgumentError, 'Must provide block to measure!' unless block_given?
|
128
|
+
# TODO: Should we just invoke the block and skip tracing instead?
|
129
|
+
raise AlreadyStartedError if started?
|
130
|
+
|
131
|
+
return_value = nil
|
132
|
+
|
133
|
+
begin
|
134
|
+
# If span fails to start, don't prevent the operation from
|
135
|
+
# running, to minimize impact on normal application function.
|
136
|
+
begin
|
137
|
+
start
|
138
|
+
rescue StandardError => e
|
139
|
+
Datadog.logger.debug { "Failed to start span: #{e}" }
|
140
|
+
ensure
|
141
|
+
# We should yield to the provided block when possible, as this
|
142
|
+
# block is application code that we don't want to hinder.
|
143
|
+
# * We don't yield during a fatal error, as the application is likely trying to
|
144
|
+
# end its execution (either due to a system error or graceful shutdown).
|
145
|
+
return_value = yield(self) unless e && !e.is_a?(StandardError)
|
146
|
+
end
|
147
|
+
# rubocop:disable Lint/RescueException
|
148
|
+
# Here we really want to catch *any* exception, not only StandardError,
|
149
|
+
# as we really have no clue of what is in the block,
|
150
|
+
# and it is user code which should be executed no matter what.
|
151
|
+
# It's not a problem since we re-raise it afterwards so for example a
|
152
|
+
# SignalException::Interrupt would still bubble up.
|
153
|
+
rescue Exception => e
|
154
|
+
# Stop the span first, so timing is a more accurate.
|
155
|
+
# If the span failed to start, timing may be inaccurate,
|
156
|
+
# but this is not really a serious concern.
|
157
|
+
stop
|
158
|
+
|
159
|
+
# Trigger the on_error event
|
160
|
+
events.on_error.publish(self, e)
|
161
|
+
|
162
|
+
# We must finish the span to trigger callbacks,
|
163
|
+
# and build the final span.
|
164
|
+
finish
|
165
|
+
|
166
|
+
raise e
|
167
|
+
# Use an ensure block here to make sure the span closes.
|
168
|
+
# NOTE: It's not sufficient to use "else": when a function
|
169
|
+
# uses "return", it will skip "else".
|
170
|
+
ensure
|
171
|
+
# Finish the span
|
172
|
+
# NOTE: If an error was raised, this "finish" might be redundant.
|
173
|
+
finish unless finished?
|
174
|
+
end
|
175
|
+
# rubocop:enable Lint/RescueException
|
176
|
+
|
177
|
+
return_value
|
178
|
+
end
|
179
|
+
|
180
|
+
def start(start_time = nil)
|
181
|
+
# Span can only be started once
|
182
|
+
return self if started?
|
183
|
+
|
184
|
+
# Trigger before_start event
|
185
|
+
events.before_start.publish(self)
|
186
|
+
|
187
|
+
# Start the span
|
188
|
+
@start_time = start_time || Core::Utils::Time.now.utc
|
189
|
+
@duration_start = start_time.nil? ? duration_marker : nil
|
190
|
+
|
191
|
+
self
|
192
|
+
end
|
193
|
+
|
194
|
+
# Mark the span stopped at the current time
|
195
|
+
def stop(stop_time = nil)
|
196
|
+
# A span should not be stopped twice. Note that this is not thread-safe,
|
197
|
+
# stop is called from multiple threads, a given span might be stopped
|
198
|
+
# several times. Again, one should not do this, so this test is more a
|
199
|
+
# fallback to avoid very bad things and protect you in most common cases.
|
200
|
+
return if stopped?
|
201
|
+
|
202
|
+
now = Core::Utils::Time.now.utc
|
203
|
+
|
204
|
+
# Provide a default start_time if unset.
|
205
|
+
# Using `now` here causes duration to be 0; this is expected
|
206
|
+
# behavior when start_time is unknown.
|
207
|
+
start(stop_time || now) unless started?
|
208
|
+
|
209
|
+
@end_time = stop_time || now
|
210
|
+
@duration_end = stop_time.nil? ? duration_marker : nil
|
211
|
+
|
212
|
+
# Trigger after_stop event
|
213
|
+
events.after_stop.publish(self)
|
214
|
+
|
215
|
+
self
|
216
|
+
end
|
217
|
+
|
218
|
+
# Return whether the duration is started or not
|
219
|
+
def started?
|
220
|
+
!@start_time.nil?
|
221
|
+
end
|
222
|
+
|
223
|
+
# Return whether the duration is stopped or not.
|
224
|
+
def stopped?
|
225
|
+
!@end_time.nil?
|
226
|
+
end
|
227
|
+
|
228
|
+
# for backwards compatibility
|
229
|
+
def start_time=(time)
|
230
|
+
time.tap { start(time) }
|
231
|
+
end
|
232
|
+
|
233
|
+
# for backwards compatibility
|
234
|
+
def end_time=(time)
|
235
|
+
time.tap { stop(time) }
|
236
|
+
end
|
237
|
+
|
238
|
+
def finish(end_time = nil)
|
239
|
+
# Returned memoized span if already finished
|
240
|
+
return span if finished?
|
241
|
+
|
242
|
+
# Stop timing
|
243
|
+
stop(end_time)
|
244
|
+
|
245
|
+
# Build span
|
246
|
+
# Memoize for performance reasons
|
247
|
+
@span = build_span
|
248
|
+
|
249
|
+
# Trigger after_finish event
|
250
|
+
events.after_finish.publish(span, self)
|
251
|
+
|
252
|
+
span
|
253
|
+
end
|
254
|
+
|
255
|
+
def finished?
|
256
|
+
!span.nil?
|
257
|
+
end
|
258
|
+
|
259
|
+
def duration
|
260
|
+
return @duration_end - @duration_start if @duration_start && @duration_end
|
261
|
+
return @end_time - @start_time if @start_time && @end_time
|
262
|
+
end
|
263
|
+
|
264
|
+
def set_error(e)
|
265
|
+
@status = Metadata::Ext::Errors::STATUS
|
266
|
+
super
|
267
|
+
end
|
268
|
+
|
269
|
+
# Return a string representation of the span.
|
270
|
+
def to_s
|
271
|
+
"SpanOperation(name:#{@name},sid:#{@id},tid:#{@trace_id},pid:#{@parent_id})"
|
272
|
+
end
|
273
|
+
|
274
|
+
# Return the hash representation of the current span.
|
275
|
+
def to_hash
|
276
|
+
h = {
|
277
|
+
error: @status,
|
278
|
+
id: @id,
|
279
|
+
meta: meta,
|
280
|
+
metrics: metrics,
|
281
|
+
name: @name,
|
282
|
+
parent_id: @parent_id,
|
283
|
+
resource: @resource,
|
284
|
+
service: @service,
|
285
|
+
trace_id: @trace_id,
|
286
|
+
type: @type
|
287
|
+
}
|
288
|
+
|
289
|
+
if stopped?
|
290
|
+
h[:start] = start_time_nano
|
291
|
+
h[:duration] = duration_nano
|
292
|
+
end
|
293
|
+
|
294
|
+
h
|
295
|
+
end
|
296
|
+
|
297
|
+
# Return a human readable version of the span
|
298
|
+
def pretty_print(q)
|
299
|
+
start_time = (self.start_time.to_f * 1e9).to_i
|
300
|
+
end_time = (self.end_time.to_f * 1e9).to_i
|
301
|
+
q.group 0 do
|
302
|
+
q.breakable
|
303
|
+
q.text "Name: #{@name}\n"
|
304
|
+
q.text "Span ID: #{@id}\n"
|
305
|
+
q.text "Parent ID: #{@parent_id}\n"
|
306
|
+
q.text "Trace ID: #{@trace_id}\n"
|
307
|
+
q.text "Type: #{@type}\n"
|
308
|
+
q.text "Service: #{@service}\n"
|
309
|
+
q.text "Resource: #{@resource}\n"
|
310
|
+
q.text "Error: #{@status}\n"
|
311
|
+
q.text "Start: #{start_time}\n"
|
312
|
+
q.text "End: #{end_time}\n"
|
313
|
+
q.text "Duration: #{duration.to_f if stopped?}\n"
|
314
|
+
q.group(2, 'Tags: [', "]\n") do
|
315
|
+
q.breakable
|
316
|
+
q.seplist meta.each do |key, value|
|
317
|
+
q.text "#{key} => #{value}"
|
318
|
+
end
|
319
|
+
end
|
320
|
+
q.group(2, 'Metrics: [', ']') do
|
321
|
+
q.breakable
|
322
|
+
q.seplist metrics.each do |key, value|
|
323
|
+
q.text "#{key} => #{value}"
|
324
|
+
end
|
325
|
+
end
|
326
|
+
end
|
327
|
+
end
|
328
|
+
|
329
|
+
# Callback behavior
|
330
|
+
class Events
|
331
|
+
include Tracing::Events
|
332
|
+
|
333
|
+
DEFAULT_ON_ERROR = proc { |span_op, error| span_op.set_error(error) unless span_op.nil? }
|
334
|
+
|
335
|
+
attr_reader \
|
336
|
+
:after_finish,
|
337
|
+
:after_stop,
|
338
|
+
:before_start
|
339
|
+
|
340
|
+
def initialize(on_error: nil)
|
341
|
+
@after_finish = AfterFinish.new
|
342
|
+
@after_stop = AfterStop.new
|
343
|
+
@before_start = BeforeStart.new
|
344
|
+
end
|
345
|
+
|
346
|
+
# This event is lazily initialized as error paths
|
347
|
+
# are normally less common that non-error paths.
|
348
|
+
def on_error
|
349
|
+
@on_error ||= OnError.new(DEFAULT_ON_ERROR)
|
350
|
+
end
|
351
|
+
|
352
|
+
# Triggered when the span is finished, regardless of error.
|
353
|
+
class AfterFinish < Tracing::Event
|
354
|
+
def initialize
|
355
|
+
super(:after_finish)
|
356
|
+
end
|
357
|
+
end
|
358
|
+
|
359
|
+
# Triggered when the span is stopped, regardless of error.
|
360
|
+
class AfterStop < Tracing::Event
|
361
|
+
def initialize
|
362
|
+
super(:after_stop)
|
363
|
+
end
|
364
|
+
end
|
365
|
+
|
366
|
+
# Triggered just before the span is started.
|
367
|
+
class BeforeStart < Tracing::Event
|
368
|
+
def initialize
|
369
|
+
super(:before_start)
|
370
|
+
end
|
371
|
+
end
|
372
|
+
|
373
|
+
# Triggered when the span raises an error during measurement.
|
374
|
+
class OnError
|
375
|
+
def initialize(default)
|
376
|
+
@handler = default
|
377
|
+
end
|
378
|
+
|
379
|
+
# Call custom error handler but fallback to default behavior on failure.
|
380
|
+
|
381
|
+
# DEV: Revisit this before full 1.0 release.
|
382
|
+
# It seems like OnError wants to behave like a middleware stack,
|
383
|
+
# where each "subscriber"'s executed is chained to the previous one.
|
384
|
+
# This is different from how {Tracing::Event} works, and might be incompatible.
|
385
|
+
def wrap_default
|
386
|
+
original = @handler
|
387
|
+
|
388
|
+
@handler = proc do |op, error|
|
389
|
+
begin
|
390
|
+
yield(op, error)
|
391
|
+
rescue StandardError => e
|
392
|
+
Datadog.logger.debug do
|
393
|
+
"Custom on_error handler #{@handler} failed, using fallback behavior. \
|
394
|
+
Cause: #{e.class.name} #{e.message} Location: #{Array(e.backtrace).first}"
|
395
|
+
end
|
396
|
+
|
397
|
+
original.call(op, error) if original
|
398
|
+
end
|
399
|
+
end
|
400
|
+
end
|
401
|
+
|
402
|
+
def publish(*args)
|
403
|
+
begin
|
404
|
+
@handler.call(*args)
|
405
|
+
rescue StandardError => e
|
406
|
+
Datadog.logger.debug do
|
407
|
+
"Error in on_error handler '#{@default}': #{e.class.name} #{e.message} at #{Array(e.backtrace).first}"
|
408
|
+
end
|
409
|
+
end
|
410
|
+
|
411
|
+
true
|
412
|
+
end
|
413
|
+
end
|
414
|
+
end
|
415
|
+
|
416
|
+
# Error when the span attempts to start again after being started
|
417
|
+
class AlreadyStartedError < StandardError
|
418
|
+
def message
|
419
|
+
'Cannot measure an already started span!'
|
420
|
+
end
|
421
|
+
end
|
422
|
+
|
423
|
+
private
|
424
|
+
|
425
|
+
# Keep span reference private: we don't want users
|
426
|
+
# modifying the finalized span from the operation after
|
427
|
+
# it has been finished.
|
428
|
+
attr_reader \
|
429
|
+
:events,
|
430
|
+
:span
|
431
|
+
|
432
|
+
# Stored only for `service_entry` calculation.
|
433
|
+
# Use `parent_id` for the effective parent span id.
|
434
|
+
attr_reader :parent
|
435
|
+
|
436
|
+
# Create a Span from the operation which represents
|
437
|
+
# the finalized measurement. We #dup here to prevent
|
438
|
+
# mutation by reference; when this span is returned,
|
439
|
+
# we don't want this SpanOperation to modify it further.
|
440
|
+
def build_span
|
441
|
+
Span.new(
|
442
|
+
@name,
|
443
|
+
duration: duration,
|
444
|
+
end_time: @end_time,
|
445
|
+
id: @id,
|
446
|
+
meta: Core::Utils::SafeDup.frozen_or_dup(meta),
|
447
|
+
metrics: Core::Utils::SafeDup.frozen_or_dup(metrics),
|
448
|
+
parent_id: @parent_id,
|
449
|
+
resource: @resource,
|
450
|
+
service: @service,
|
451
|
+
start_time: @start_time,
|
452
|
+
status: @status,
|
453
|
+
type: @type,
|
454
|
+
trace_id: @trace_id,
|
455
|
+
service_entry: parent.nil? || (service && parent.service != service)
|
456
|
+
)
|
457
|
+
end
|
458
|
+
|
459
|
+
# Set this span's parent, setting this span's trace_id to the parent's trace_id.
|
460
|
+
#
|
461
|
+
# If the parent is nil, set this span as the root span.
|
462
|
+
#
|
463
|
+
# DEV: This method creates a false expectation that
|
464
|
+
# `self.parent.id == self.parent_id`, which is not the case
|
465
|
+
# for distributed traces, as the parent Span object does not exist
|
466
|
+
# in this application. `#parent_id` is the only reliable parent
|
467
|
+
# identifier. We should remove the ability to set a parent Span
|
468
|
+
# object in the future.
|
469
|
+
def parent=(parent)
|
470
|
+
@parent = parent # Stored only for `service_entry` calculation.
|
471
|
+
|
472
|
+
if parent.nil?
|
473
|
+
@trace_id = @id
|
474
|
+
@parent_id = 0
|
475
|
+
else
|
476
|
+
@trace_id = parent.trace_id
|
477
|
+
@parent_id = parent.id
|
478
|
+
end
|
479
|
+
end
|
480
|
+
|
481
|
+
def duration_marker
|
482
|
+
Core::Utils::Time.get_time
|
483
|
+
end
|
484
|
+
|
485
|
+
# Used for serialization
|
486
|
+
# @return [Integer] in nanoseconds since Epoch
|
487
|
+
def start_time_nano
|
488
|
+
@start_time.to_i * 1000000000 + @start_time.nsec
|
489
|
+
end
|
490
|
+
|
491
|
+
# Used for serialization
|
492
|
+
# @return [Integer] in nanoseconds since Epoch
|
493
|
+
def duration_nano
|
494
|
+
(duration * 1e9).to_i
|
495
|
+
end
|
496
|
+
end
|
497
|
+
end
|
498
|
+
end
|