ls-trace 0.1.1
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/.circleci/config.yml +673 -0
- data/.circleci/images/primary/Dockerfile-2.0.0 +73 -0
- data/.circleci/images/primary/Dockerfile-2.1.10 +73 -0
- data/.circleci/images/primary/Dockerfile-2.2.10 +73 -0
- data/.circleci/images/primary/Dockerfile-2.3.8 +75 -0
- data/.circleci/images/primary/Dockerfile-2.4.6 +73 -0
- data/.circleci/images/primary/Dockerfile-2.5.6 +73 -0
- data/.circleci/images/primary/Dockerfile-2.6.4 +73 -0
- data/.dockerignore +1 -0
- data/.env +24 -0
- data/.github/CODEOWNERS +1 -0
- data/.gitignore +59 -0
- data/.rspec +1 -0
- data/.rubocop.yml +77 -0
- data/.yardopts +5 -0
- data/Appraisals +820 -0
- data/CHANGELOG.md +1051 -0
- data/CONTRIBUTING.md +85 -0
- data/Gemfile +7 -0
- data/LICENSE +24 -0
- data/README.md +108 -0
- data/Rakefile +635 -0
- data/benchmarks/postgres_database.yml +9 -0
- data/benchmarks/sidekiq_test.rb +154 -0
- data/ddtrace.gemspec +63 -0
- data/docker-compose.yml +276 -0
- data/docs/DevelopmentGuide.md +195 -0
- data/docs/GettingStarted.md +1981 -0
- data/lib/ddtrace.rb +63 -0
- data/lib/ddtrace/analytics.rb +29 -0
- data/lib/ddtrace/augmentation.rb +13 -0
- data/lib/ddtrace/augmentation/method_wrapper.rb +20 -0
- data/lib/ddtrace/augmentation/method_wrapping.rb +38 -0
- data/lib/ddtrace/augmentation/shim.rb +102 -0
- data/lib/ddtrace/buffer.rb +119 -0
- data/lib/ddtrace/configuration.rb +30 -0
- data/lib/ddtrace/configuration/base.rb +82 -0
- data/lib/ddtrace/configuration/dependency_resolver.rb +24 -0
- data/lib/ddtrace/configuration/option.rb +55 -0
- data/lib/ddtrace/configuration/option_definition.rb +127 -0
- data/lib/ddtrace/configuration/option_definition_set.rb +18 -0
- data/lib/ddtrace/configuration/option_set.rb +6 -0
- data/lib/ddtrace/configuration/options.rb +107 -0
- data/lib/ddtrace/configuration/pin_setup.rb +30 -0
- data/lib/ddtrace/configuration/settings.rb +105 -0
- data/lib/ddtrace/context.rb +284 -0
- data/lib/ddtrace/context_flush.rb +132 -0
- data/lib/ddtrace/contrib/action_pack/action_controller/instrumentation.rb +144 -0
- data/lib/ddtrace/contrib/action_pack/action_controller/patcher.rb +37 -0
- data/lib/ddtrace/contrib/action_pack/configuration/settings.rb +27 -0
- data/lib/ddtrace/contrib/action_pack/ext.rb +16 -0
- data/lib/ddtrace/contrib/action_pack/integration.rb +36 -0
- data/lib/ddtrace/contrib/action_pack/patcher.rb +29 -0
- data/lib/ddtrace/contrib/action_pack/utils.rb +36 -0
- data/lib/ddtrace/contrib/action_view/configuration/settings.rb +26 -0
- data/lib/ddtrace/contrib/action_view/ext.rb +17 -0
- data/lib/ddtrace/contrib/action_view/instrumentation/partial_renderer.rb +78 -0
- data/lib/ddtrace/contrib/action_view/instrumentation/template_renderer.rb +167 -0
- data/lib/ddtrace/contrib/action_view/integration.rb +43 -0
- data/lib/ddtrace/contrib/action_view/patcher.rb +53 -0
- data/lib/ddtrace/contrib/action_view/utils.rb +32 -0
- data/lib/ddtrace/contrib/active_model_serializers/configuration/settings.rb +25 -0
- data/lib/ddtrace/contrib/active_model_serializers/event.rb +65 -0
- data/lib/ddtrace/contrib/active_model_serializers/events.rb +30 -0
- data/lib/ddtrace/contrib/active_model_serializers/events/render.rb +32 -0
- data/lib/ddtrace/contrib/active_model_serializers/events/serialize.rb +35 -0
- data/lib/ddtrace/contrib/active_model_serializers/ext.rb +17 -0
- data/lib/ddtrace/contrib/active_model_serializers/integration.rb +39 -0
- data/lib/ddtrace/contrib/active_model_serializers/patcher.rb +36 -0
- data/lib/ddtrace/contrib/active_record/configuration/resolver.rb +46 -0
- data/lib/ddtrace/contrib/active_record/configuration/settings.rb +30 -0
- data/lib/ddtrace/contrib/active_record/event.rb +30 -0
- data/lib/ddtrace/contrib/active_record/events.rb +30 -0
- data/lib/ddtrace/contrib/active_record/events/instantiation.rb +57 -0
- data/lib/ddtrace/contrib/active_record/events/sql.rb +64 -0
- data/lib/ddtrace/contrib/active_record/ext.rb +21 -0
- data/lib/ddtrace/contrib/active_record/integration.rb +44 -0
- data/lib/ddtrace/contrib/active_record/patcher.rb +29 -0
- data/lib/ddtrace/contrib/active_record/utils.rb +76 -0
- data/lib/ddtrace/contrib/active_support/cache/instrumentation.rb +157 -0
- data/lib/ddtrace/contrib/active_support/cache/patcher.rb +62 -0
- data/lib/ddtrace/contrib/active_support/cache/redis.rb +47 -0
- data/lib/ddtrace/contrib/active_support/configuration/settings.rb +25 -0
- data/lib/ddtrace/contrib/active_support/ext.rb +21 -0
- data/lib/ddtrace/contrib/active_support/integration.rb +38 -0
- data/lib/ddtrace/contrib/active_support/notifications/event.rb +62 -0
- data/lib/ddtrace/contrib/active_support/notifications/subscriber.rb +66 -0
- data/lib/ddtrace/contrib/active_support/notifications/subscription.rb +159 -0
- data/lib/ddtrace/contrib/active_support/patcher.rb +29 -0
- data/lib/ddtrace/contrib/analytics.rb +20 -0
- data/lib/ddtrace/contrib/aws/configuration/settings.rb +25 -0
- data/lib/ddtrace/contrib/aws/ext.rb +20 -0
- data/lib/ddtrace/contrib/aws/instrumentation.rb +56 -0
- data/lib/ddtrace/contrib/aws/integration.rb +36 -0
- data/lib/ddtrace/contrib/aws/parsed_context.rb +56 -0
- data/lib/ddtrace/contrib/aws/patcher.rb +49 -0
- data/lib/ddtrace/contrib/aws/services.rb +115 -0
- data/lib/ddtrace/contrib/concurrent_ruby/configuration/settings.rb +15 -0
- data/lib/ddtrace/contrib/concurrent_ruby/context_composite_executor_service.rb +35 -0
- data/lib/ddtrace/contrib/concurrent_ruby/ext.rb +11 -0
- data/lib/ddtrace/contrib/concurrent_ruby/future_patch.rb +23 -0
- data/lib/ddtrace/contrib/concurrent_ruby/integration.rb +32 -0
- data/lib/ddtrace/contrib/concurrent_ruby/patcher.rb +35 -0
- data/lib/ddtrace/contrib/configurable.rb +59 -0
- data/lib/ddtrace/contrib/configuration/resolver.rb +12 -0
- data/lib/ddtrace/contrib/configuration/settings.rb +35 -0
- data/lib/ddtrace/contrib/dalli/configuration/settings.rb +25 -0
- data/lib/ddtrace/contrib/dalli/ext.rb +17 -0
- data/lib/ddtrace/contrib/dalli/instrumentation.rb +50 -0
- data/lib/ddtrace/contrib/dalli/integration.rb +36 -0
- data/lib/ddtrace/contrib/dalli/patcher.rb +73 -0
- data/lib/ddtrace/contrib/dalli/quantize.rb +22 -0
- data/lib/ddtrace/contrib/delayed_job/configuration/settings.rb +25 -0
- data/lib/ddtrace/contrib/delayed_job/ext.rb +18 -0
- data/lib/ddtrace/contrib/delayed_job/integration.rb +32 -0
- data/lib/ddtrace/contrib/delayed_job/patcher.rb +34 -0
- data/lib/ddtrace/contrib/delayed_job/plugin.rb +57 -0
- data/lib/ddtrace/contrib/elasticsearch/configuration/settings.rb +26 -0
- data/lib/ddtrace/contrib/elasticsearch/ext.rb +19 -0
- data/lib/ddtrace/contrib/elasticsearch/integration.rb +37 -0
- data/lib/ddtrace/contrib/elasticsearch/patcher.rb +124 -0
- data/lib/ddtrace/contrib/elasticsearch/quantize.rb +80 -0
- data/lib/ddtrace/contrib/ethon/configuration/settings.rb +26 -0
- data/lib/ddtrace/contrib/ethon/easy_patch.rb +139 -0
- data/lib/ddtrace/contrib/ethon/ext.rb +15 -0
- data/lib/ddtrace/contrib/ethon/integration.rb +31 -0
- data/lib/ddtrace/contrib/ethon/multi_patch.rb +80 -0
- data/lib/ddtrace/contrib/ethon/patcher.rb +27 -0
- data/lib/ddtrace/contrib/excon/configuration/settings.rb +28 -0
- data/lib/ddtrace/contrib/excon/ext.rb +14 -0
- data/lib/ddtrace/contrib/excon/integration.rb +32 -0
- data/lib/ddtrace/contrib/excon/middleware.rb +154 -0
- data/lib/ddtrace/contrib/excon/patcher.rb +34 -0
- data/lib/ddtrace/contrib/extensions.rb +59 -0
- data/lib/ddtrace/contrib/faraday/configuration/settings.rb +33 -0
- data/lib/ddtrace/contrib/faraday/ext.rb +14 -0
- data/lib/ddtrace/contrib/faraday/integration.rb +36 -0
- data/lib/ddtrace/contrib/faraday/middleware.rb +93 -0
- data/lib/ddtrace/contrib/faraday/patcher.rb +82 -0
- data/lib/ddtrace/contrib/faraday/rack_builder.rb +18 -0
- data/lib/ddtrace/contrib/grape/configuration/settings.rb +27 -0
- data/lib/ddtrace/contrib/grape/endpoint.rb +199 -0
- data/lib/ddtrace/contrib/grape/ext.rb +19 -0
- data/lib/ddtrace/contrib/grape/instrumentation.rb +33 -0
- data/lib/ddtrace/contrib/grape/integration.rb +36 -0
- data/lib/ddtrace/contrib/grape/patcher.rb +79 -0
- data/lib/ddtrace/contrib/graphql/configuration/settings.rb +27 -0
- data/lib/ddtrace/contrib/graphql/ext.rb +13 -0
- data/lib/ddtrace/contrib/graphql/integration.rb +38 -0
- data/lib/ddtrace/contrib/graphql/patcher.rb +63 -0
- data/lib/ddtrace/contrib/grpc/configuration/settings.rb +25 -0
- data/lib/ddtrace/contrib/grpc/datadog_interceptor.rb +74 -0
- data/lib/ddtrace/contrib/grpc/datadog_interceptor/client.rb +56 -0
- data/lib/ddtrace/contrib/grpc/datadog_interceptor/server.rb +73 -0
- data/lib/ddtrace/contrib/grpc/ext.rb +15 -0
- data/lib/ddtrace/contrib/grpc/integration.rb +36 -0
- data/lib/ddtrace/contrib/grpc/intercept_with_datadog.rb +49 -0
- data/lib/ddtrace/contrib/grpc/patcher.rb +78 -0
- data/lib/ddtrace/contrib/http/circuit_breaker.rb +63 -0
- data/lib/ddtrace/contrib/http/configuration/settings.rb +26 -0
- data/lib/ddtrace/contrib/http/ext.rb +14 -0
- data/lib/ddtrace/contrib/http/instrumentation.rb +114 -0
- data/lib/ddtrace/contrib/http/integration.rb +32 -0
- data/lib/ddtrace/contrib/http/patcher.rb +32 -0
- data/lib/ddtrace/contrib/integration.rb +16 -0
- data/lib/ddtrace/contrib/mongodb/configuration/settings.rb +28 -0
- data/lib/ddtrace/contrib/mongodb/ext.rb +20 -0
- data/lib/ddtrace/contrib/mongodb/instrumentation.rb +68 -0
- data/lib/ddtrace/contrib/mongodb/integration.rb +36 -0
- data/lib/ddtrace/contrib/mongodb/parsers.rb +68 -0
- data/lib/ddtrace/contrib/mongodb/patcher.rb +37 -0
- data/lib/ddtrace/contrib/mongodb/subscribers.rb +108 -0
- data/lib/ddtrace/contrib/mysql2/configuration/settings.rb +25 -0
- data/lib/ddtrace/contrib/mysql2/ext.rb +15 -0
- data/lib/ddtrace/contrib/mysql2/instrumentation.rb +60 -0
- data/lib/ddtrace/contrib/mysql2/integration.rb +32 -0
- data/lib/ddtrace/contrib/mysql2/patcher.rb +33 -0
- data/lib/ddtrace/contrib/patchable.rb +42 -0
- data/lib/ddtrace/contrib/patcher.rb +28 -0
- data/lib/ddtrace/contrib/racecar/configuration/settings.rb +25 -0
- data/lib/ddtrace/contrib/racecar/event.rb +67 -0
- data/lib/ddtrace/contrib/racecar/events.rb +30 -0
- data/lib/ddtrace/contrib/racecar/events/batch.rb +27 -0
- data/lib/ddtrace/contrib/racecar/events/message.rb +27 -0
- data/lib/ddtrace/contrib/racecar/ext.rb +21 -0
- data/lib/ddtrace/contrib/racecar/integration.rb +36 -0
- data/lib/ddtrace/contrib/racecar/patcher.rb +32 -0
- data/lib/ddtrace/contrib/rack/configuration/settings.rb +41 -0
- data/lib/ddtrace/contrib/rack/ext.rb +18 -0
- data/lib/ddtrace/contrib/rack/integration.rb +32 -0
- data/lib/ddtrace/contrib/rack/middlewares.rb +283 -0
- data/lib/ddtrace/contrib/rack/patcher.rb +72 -0
- data/lib/ddtrace/contrib/rack/request_queue.rb +39 -0
- data/lib/ddtrace/contrib/rails/configuration/settings.rb +80 -0
- data/lib/ddtrace/contrib/rails/ext.rb +12 -0
- data/lib/ddtrace/contrib/rails/framework.rb +100 -0
- data/lib/ddtrace/contrib/rails/integration.rb +37 -0
- data/lib/ddtrace/contrib/rails/middlewares.rb +38 -0
- data/lib/ddtrace/contrib/rails/patcher.rb +78 -0
- data/lib/ddtrace/contrib/rails/railtie.rb +17 -0
- data/lib/ddtrace/contrib/rails/utils.rb +20 -0
- data/lib/ddtrace/contrib/rake/configuration/settings.rb +27 -0
- data/lib/ddtrace/contrib/rake/ext.rb +18 -0
- data/lib/ddtrace/contrib/rake/instrumentation.rb +84 -0
- data/lib/ddtrace/contrib/rake/integration.rb +32 -0
- data/lib/ddtrace/contrib/rake/patcher.rb +36 -0
- data/lib/ddtrace/contrib/redis/configuration/settings.rb +25 -0
- data/lib/ddtrace/contrib/redis/ext.rb +18 -0
- data/lib/ddtrace/contrib/redis/integration.rb +36 -0
- data/lib/ddtrace/contrib/redis/patcher.rb +94 -0
- data/lib/ddtrace/contrib/redis/quantize.rb +47 -0
- data/lib/ddtrace/contrib/redis/tags.rb +38 -0
- data/lib/ddtrace/contrib/registerable.rb +33 -0
- data/lib/ddtrace/contrib/registry.rb +42 -0
- data/lib/ddtrace/contrib/resque/configuration/settings.rb +26 -0
- data/lib/ddtrace/contrib/resque/ext.rb +14 -0
- data/lib/ddtrace/contrib/resque/integration.rb +37 -0
- data/lib/ddtrace/contrib/resque/patcher.rb +35 -0
- data/lib/ddtrace/contrib/resque/resque_job.rb +76 -0
- data/lib/ddtrace/contrib/rest_client/configuration/settings.rb +26 -0
- data/lib/ddtrace/contrib/rest_client/ext.rb +14 -0
- data/lib/ddtrace/contrib/rest_client/integration.rb +31 -0
- data/lib/ddtrace/contrib/rest_client/patcher.rb +25 -0
- data/lib/ddtrace/contrib/rest_client/request_patch.rb +89 -0
- data/lib/ddtrace/contrib/sequel/configuration/settings.rb +23 -0
- data/lib/ddtrace/contrib/sequel/database.rb +61 -0
- data/lib/ddtrace/contrib/sequel/dataset.rb +62 -0
- data/lib/ddtrace/contrib/sequel/ext.rb +15 -0
- data/lib/ddtrace/contrib/sequel/integration.rb +32 -0
- data/lib/ddtrace/contrib/sequel/patcher.rb +39 -0
- data/lib/ddtrace/contrib/sequel/utils.rb +46 -0
- data/lib/ddtrace/contrib/shoryuken/configuration/settings.rb +24 -0
- data/lib/ddtrace/contrib/shoryuken/ext.rb +18 -0
- data/lib/ddtrace/contrib/shoryuken/integration.rb +35 -0
- data/lib/ddtrace/contrib/shoryuken/patcher.rb +30 -0
- data/lib/ddtrace/contrib/shoryuken/tracer.rb +45 -0
- data/lib/ddtrace/contrib/sidekiq/client_tracer.rb +43 -0
- data/lib/ddtrace/contrib/sidekiq/configuration/settings.rb +26 -0
- data/lib/ddtrace/contrib/sidekiq/ext.rb +21 -0
- data/lib/ddtrace/contrib/sidekiq/integration.rb +36 -0
- data/lib/ddtrace/contrib/sidekiq/patcher.rb +40 -0
- data/lib/ddtrace/contrib/sidekiq/server_tracer.rb +58 -0
- data/lib/ddtrace/contrib/sidekiq/tracing.rb +28 -0
- data/lib/ddtrace/contrib/sinatra/configuration/settings.rb +34 -0
- data/lib/ddtrace/contrib/sinatra/env.rb +38 -0
- data/lib/ddtrace/contrib/sinatra/ext.rb +18 -0
- data/lib/ddtrace/contrib/sinatra/headers.rb +31 -0
- data/lib/ddtrace/contrib/sinatra/integration.rb +36 -0
- data/lib/ddtrace/contrib/sinatra/patcher.rb +33 -0
- data/lib/ddtrace/contrib/sinatra/tracer.rb +84 -0
- data/lib/ddtrace/contrib/sinatra/tracer_middleware.rb +72 -0
- data/lib/ddtrace/contrib/sucker_punch/configuration/settings.rb +25 -0
- data/lib/ddtrace/contrib/sucker_punch/exception_handler.rb +26 -0
- data/lib/ddtrace/contrib/sucker_punch/ext.rb +18 -0
- data/lib/ddtrace/contrib/sucker_punch/instrumentation.rb +70 -0
- data/lib/ddtrace/contrib/sucker_punch/integration.rb +36 -0
- data/lib/ddtrace/contrib/sucker_punch/patcher.rb +48 -0
- data/lib/ddtrace/correlation.rb +28 -0
- data/lib/ddtrace/diagnostics/health.rb +30 -0
- data/lib/ddtrace/distributed_tracing/headers/b3.rb +44 -0
- data/lib/ddtrace/distributed_tracing/headers/b3_single.rb +56 -0
- data/lib/ddtrace/distributed_tracing/headers/datadog.rb +42 -0
- data/lib/ddtrace/distributed_tracing/headers/headers.rb +70 -0
- data/lib/ddtrace/distributed_tracing/headers/helpers.rb +45 -0
- data/lib/ddtrace/encoding.rb +65 -0
- data/lib/ddtrace/environment.rb +23 -0
- data/lib/ddtrace/error.rb +27 -0
- data/lib/ddtrace/ext/analytics.rb +11 -0
- data/lib/ddtrace/ext/app_types.rb +11 -0
- data/lib/ddtrace/ext/diagnostics.rb +25 -0
- data/lib/ddtrace/ext/distributed.rb +33 -0
- data/lib/ddtrace/ext/errors.rb +10 -0
- data/lib/ddtrace/ext/forced_tracing.rb +25 -0
- data/lib/ddtrace/ext/http.rb +46 -0
- data/lib/ddtrace/ext/manual_tracing.rb +9 -0
- data/lib/ddtrace/ext/metrics.rb +15 -0
- data/lib/ddtrace/ext/net.rb +10 -0
- data/lib/ddtrace/ext/priority.rb +16 -0
- data/lib/ddtrace/ext/runtime.rb +26 -0
- data/lib/ddtrace/ext/sql.rb +8 -0
- data/lib/ddtrace/ext/transport.rb +17 -0
- data/lib/ddtrace/forced_tracing.rb +36 -0
- data/lib/ddtrace/logger.rb +39 -0
- data/lib/ddtrace/metrics.rb +215 -0
- data/lib/ddtrace/monkey.rb +58 -0
- data/lib/ddtrace/opentracer.rb +40 -0
- data/lib/ddtrace/opentracer/binary_propagator.rb +24 -0
- data/lib/ddtrace/opentracer/carrier.rb +6 -0
- data/lib/ddtrace/opentracer/distributed_headers.rb +52 -0
- data/lib/ddtrace/opentracer/global_tracer.rb +15 -0
- data/lib/ddtrace/opentracer/propagator.rb +22 -0
- data/lib/ddtrace/opentracer/rack_propagator.rb +60 -0
- data/lib/ddtrace/opentracer/scope.rb +15 -0
- data/lib/ddtrace/opentracer/scope_manager.rb +6 -0
- data/lib/ddtrace/opentracer/span.rb +98 -0
- data/lib/ddtrace/opentracer/span_context.rb +14 -0
- data/lib/ddtrace/opentracer/span_context_factory.rb +23 -0
- data/lib/ddtrace/opentracer/text_map_propagator.rb +75 -0
- data/lib/ddtrace/opentracer/thread_local_scope.rb +30 -0
- data/lib/ddtrace/opentracer/thread_local_scope_manager.rb +40 -0
- data/lib/ddtrace/opentracer/tracer.rb +208 -0
- data/lib/ddtrace/patcher.rb +47 -0
- data/lib/ddtrace/pin.rb +114 -0
- data/lib/ddtrace/pipeline.rb +46 -0
- data/lib/ddtrace/pipeline/span_filter.rb +38 -0
- data/lib/ddtrace/pipeline/span_processor.rb +20 -0
- data/lib/ddtrace/propagation/grpc_propagator.rb +61 -0
- data/lib/ddtrace/propagation/http_propagator.rb +75 -0
- data/lib/ddtrace/provider.rb +21 -0
- data/lib/ddtrace/quantization/hash.rb +103 -0
- data/lib/ddtrace/quantization/http.rb +86 -0
- data/lib/ddtrace/runtime/cgroup.rb +44 -0
- data/lib/ddtrace/runtime/class_count.rb +17 -0
- data/lib/ddtrace/runtime/container.rb +73 -0
- data/lib/ddtrace/runtime/gc.rb +16 -0
- data/lib/ddtrace/runtime/identity.rb +41 -0
- data/lib/ddtrace/runtime/metrics.rb +93 -0
- data/lib/ddtrace/runtime/object_space.rb +19 -0
- data/lib/ddtrace/runtime/socket.rb +14 -0
- data/lib/ddtrace/runtime/thread_count.rb +16 -0
- data/lib/ddtrace/sampler.rb +195 -0
- data/lib/ddtrace/span.rb +260 -0
- data/lib/ddtrace/sync_writer.rb +62 -0
- data/lib/ddtrace/tracer.rb +459 -0
- data/lib/ddtrace/transport/http.rb +91 -0
- data/lib/ddtrace/transport/http/adapters/net.rb +112 -0
- data/lib/ddtrace/transport/http/adapters/registry.rb +24 -0
- data/lib/ddtrace/transport/http/adapters/test.rb +77 -0
- data/lib/ddtrace/transport/http/adapters/unix_socket.rb +64 -0
- data/lib/ddtrace/transport/http/api.rb +46 -0
- data/lib/ddtrace/transport/http/api/endpoint.rb +27 -0
- data/lib/ddtrace/transport/http/api/fallbacks.rb +22 -0
- data/lib/ddtrace/transport/http/api/instance.rb +29 -0
- data/lib/ddtrace/transport/http/api/map.rb +14 -0
- data/lib/ddtrace/transport/http/api/spec.rb +15 -0
- data/lib/ddtrace/transport/http/builder.rb +165 -0
- data/lib/ddtrace/transport/http/client.rb +107 -0
- data/lib/ddtrace/transport/http/env.rb +48 -0
- data/lib/ddtrace/transport/http/response.rb +26 -0
- data/lib/ddtrace/transport/http/statistics.rb +30 -0
- data/lib/ddtrace/transport/http/traces.rb +140 -0
- data/lib/ddtrace/transport/parcel.rb +13 -0
- data/lib/ddtrace/transport/request.rb +13 -0
- data/lib/ddtrace/transport/response.rb +49 -0
- data/lib/ddtrace/transport/statistics.rb +72 -0
- data/lib/ddtrace/transport/traces.rb +33 -0
- data/lib/ddtrace/utils.rb +65 -0
- data/lib/ddtrace/utils/database.rb +25 -0
- data/lib/ddtrace/utils/time.rb +14 -0
- data/lib/ddtrace/vendor/active_record/connection_specification.rb +301 -0
- data/lib/ddtrace/version.rb +12 -0
- data/lib/ddtrace/workers.rb +125 -0
- data/lib/ddtrace/writer.rb +157 -0
- data/tasks/release_gem.rake +28 -0
- metadata +682 -0
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
require 'ddtrace/ext/manual_tracing'
|
|
2
|
+
require 'ddtrace/tracer'
|
|
3
|
+
|
|
4
|
+
module Datadog
|
|
5
|
+
module Ext
|
|
6
|
+
# Defines constants for forced tracing
|
|
7
|
+
module ForcedTracing
|
|
8
|
+
@deprecation_warning_shown = false
|
|
9
|
+
|
|
10
|
+
def self.const_missing(name)
|
|
11
|
+
super unless Ext::ManualTracing.const_defined?(name)
|
|
12
|
+
|
|
13
|
+
# Only log each deprecation warning once (safeguard against log spam)
|
|
14
|
+
unless @deprecation_warning_shown
|
|
15
|
+
Datadog::Tracer.log.warn(
|
|
16
|
+
'forced tracing: Datadog::Ext::ForcedTracing has been renamed to Datadog::Ext::ManualTracing'
|
|
17
|
+
)
|
|
18
|
+
@deprecation_warning_shown = true
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
Ext::ManualTracing.const_get(name)
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
module Datadog
|
|
2
|
+
module Ext
|
|
3
|
+
module HTTP
|
|
4
|
+
BASE_URL = 'http.base_url'.freeze
|
|
5
|
+
ERROR_RANGE = 500...600
|
|
6
|
+
METHOD = 'http.method'.freeze
|
|
7
|
+
STATUS_CODE = 'http.status_code'.freeze
|
|
8
|
+
TEMPLATE = 'template'.freeze
|
|
9
|
+
TYPE_INBOUND = 'web'.freeze
|
|
10
|
+
TYPE_OUTBOUND = 'http'.freeze
|
|
11
|
+
TYPE_PROXY = 'proxy'.freeze
|
|
12
|
+
URL = 'http.url'.freeze
|
|
13
|
+
|
|
14
|
+
# General header functionality
|
|
15
|
+
module Headers
|
|
16
|
+
module_function
|
|
17
|
+
|
|
18
|
+
def to_tag(name)
|
|
19
|
+
name.to_s.downcase.gsub(/[-\s]/, '_')
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
# Request headers
|
|
24
|
+
module RequestHeaders
|
|
25
|
+
PREFIX = 'http.request.headers'.freeze
|
|
26
|
+
|
|
27
|
+
module_function
|
|
28
|
+
|
|
29
|
+
def to_tag(name)
|
|
30
|
+
"#{PREFIX}.#{Headers.to_tag(name)}"
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
# Response headers
|
|
35
|
+
module ResponseHeaders
|
|
36
|
+
PREFIX = 'http.response.headers'.freeze
|
|
37
|
+
|
|
38
|
+
module_function
|
|
39
|
+
|
|
40
|
+
def to_tag(name)
|
|
41
|
+
"#{PREFIX}.#{Headers.to_tag(name)}"
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
end
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
module Datadog
|
|
2
|
+
module Ext
|
|
3
|
+
module Metrics
|
|
4
|
+
DEFAULT_HOST = '127.0.0.1'.freeze
|
|
5
|
+
DEFAULT_PORT = 8125
|
|
6
|
+
ENV_DEFAULT_HOST = 'DD_AGENT_HOST'.freeze
|
|
7
|
+
ENV_DEFAULT_PORT = 'DD_METRIC_AGENT_PORT'.freeze
|
|
8
|
+
|
|
9
|
+
TAG_LANG = 'language'.freeze
|
|
10
|
+
TAG_LANG_INTERPRETER = 'language-interpreter'.freeze
|
|
11
|
+
TAG_LANG_VERSION = 'language-version'.freeze
|
|
12
|
+
TAG_TRACER_VERSION = 'tracer-version'.freeze
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
module Datadog
|
|
2
|
+
module Ext
|
|
3
|
+
# Priority is a hint given to the backend so that it knows which traces to reject or kept.
|
|
4
|
+
# In a distributed context, it should be set before any context propagation (fork, RPC calls) to be effective.
|
|
5
|
+
module Priority
|
|
6
|
+
# Use this to explicitely inform the backend that a trace should be rejected and not stored.
|
|
7
|
+
USER_REJECT = -1
|
|
8
|
+
# Used by the builtin sampler to inform the backend that a trace should be rejected and not stored.
|
|
9
|
+
AUTO_REJECT = 0
|
|
10
|
+
# Used by the builtin sampler to inform the backend that a trace should be kept and stored.
|
|
11
|
+
AUTO_KEEP = 1
|
|
12
|
+
# Use this to explicitely inform the backend that a trace should be kept and stored.
|
|
13
|
+
USER_KEEP = 2
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
require 'ddtrace/version'
|
|
2
|
+
|
|
3
|
+
module Datadog
|
|
4
|
+
module Ext
|
|
5
|
+
module Runtime
|
|
6
|
+
# Identity
|
|
7
|
+
LANG = 'ruby'.freeze
|
|
8
|
+
LANG_INTERPRETER = (RUBY_ENGINE + '-' + RUBY_PLATFORM).freeze
|
|
9
|
+
LANG_VERSION = RUBY_VERSION
|
|
10
|
+
TRACER_VERSION = Datadog::VERSION::STRING
|
|
11
|
+
|
|
12
|
+
TAG_LANG = 'language'.freeze
|
|
13
|
+
|
|
14
|
+
# Metrics
|
|
15
|
+
module Metrics
|
|
16
|
+
ENV_ENABLED = 'DD_RUNTIME_METRICS_ENABLED'.freeze
|
|
17
|
+
|
|
18
|
+
METRIC_CLASS_COUNT = 'runtime.ruby.class_count'.freeze
|
|
19
|
+
METRIC_GC_PREFIX = 'runtime.ruby.gc'.freeze
|
|
20
|
+
METRIC_THREAD_COUNT = 'runtime.ruby.thread_count'.freeze
|
|
21
|
+
|
|
22
|
+
TAG_SERVICE = 'service'.freeze
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
module Datadog
|
|
2
|
+
module Ext
|
|
3
|
+
module Transport
|
|
4
|
+
module HTTP
|
|
5
|
+
DEFAULT_HOST = '127.0.0.1'.freeze
|
|
6
|
+
DEFAULT_PORT = 8126
|
|
7
|
+
ENV_DEFAULT_HOST = 'DD_AGENT_HOST'.freeze
|
|
8
|
+
ENV_DEFAULT_PORT = 'DD_TRACE_AGENT_PORT'.freeze
|
|
9
|
+
HEADER_CONTAINER_ID = 'Datadog-Container-ID'.freeze
|
|
10
|
+
HEADER_META_LANG = 'Datadog-Meta-Lang'.freeze
|
|
11
|
+
HEADER_META_LANG_VERSION = 'Datadog-Meta-Lang-Version'.freeze
|
|
12
|
+
HEADER_META_LANG_INTERPRETER = 'Datadog-Meta-Lang-Interpreter'.freeze
|
|
13
|
+
HEADER_META_TRACER_VERSION = 'Datadog-Meta-Tracer-Version'.freeze
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
require 'ddtrace/ext/manual_tracing'
|
|
2
|
+
require 'ddtrace/ext/priority'
|
|
3
|
+
|
|
4
|
+
module Datadog
|
|
5
|
+
# Defines analytics behavior
|
|
6
|
+
module ForcedTracing
|
|
7
|
+
class << self
|
|
8
|
+
def keep(span)
|
|
9
|
+
return if span.nil? || span.context.nil?
|
|
10
|
+
span.context.sampling_priority = Datadog::Ext::Priority::USER_KEEP
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def drop(span)
|
|
14
|
+
return if span.nil? || span.context.nil?
|
|
15
|
+
span.context.sampling_priority = Datadog::Ext::Priority::USER_REJECT
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
# Extension for Datadog::Span
|
|
20
|
+
module Span
|
|
21
|
+
def set_tag(key, value)
|
|
22
|
+
# Configure sampling priority if they give us a forced tracing tag
|
|
23
|
+
# DEV: Do not set if the value they give us is explicitly "false"
|
|
24
|
+
case key
|
|
25
|
+
when Ext::ManualTracing::TAG_KEEP
|
|
26
|
+
ForcedTracing.keep(self) unless value == false
|
|
27
|
+
when Ext::ManualTracing::TAG_DROP
|
|
28
|
+
ForcedTracing.drop(self) unless value == false
|
|
29
|
+
else
|
|
30
|
+
# Otherwise, set the tag normally.
|
|
31
|
+
super if defined?(super)
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
end
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
require 'logger'
|
|
2
|
+
|
|
3
|
+
module Datadog
|
|
4
|
+
LOG_PREFIX = 'ddtrace'.freeze
|
|
5
|
+
|
|
6
|
+
# A custom logger with minor enhancements:
|
|
7
|
+
# - progname defaults to ddtrace to clearly identify Datadog dd-trace-rb related messages
|
|
8
|
+
# - adds last caller stack-trace info to know where the message comes from
|
|
9
|
+
class Logger < ::Logger
|
|
10
|
+
def initialize(*args, &block)
|
|
11
|
+
super
|
|
12
|
+
self.progname = LOG_PREFIX
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def add(severity, message = nil, progname = nil, &block)
|
|
16
|
+
where = ''
|
|
17
|
+
|
|
18
|
+
# We are in debug mode, or this is an error, add stack trace to help debugging
|
|
19
|
+
if debug? || severity >= ::Logger::ERROR
|
|
20
|
+
c = caller
|
|
21
|
+
where = "(#{c[1]}) " if c.length > 1
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
if message.nil?
|
|
25
|
+
if block_given?
|
|
26
|
+
super(severity, message, progname) do
|
|
27
|
+
"[#{self.progname}] #{where}#{yield}"
|
|
28
|
+
end
|
|
29
|
+
else
|
|
30
|
+
super(severity, message, "[#{self.progname}] #{where}#{progname}")
|
|
31
|
+
end
|
|
32
|
+
else
|
|
33
|
+
super(severity, "[#{self.progname}] #{where}#{message}")
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
alias log add
|
|
38
|
+
end
|
|
39
|
+
end
|
|
@@ -0,0 +1,215 @@
|
|
|
1
|
+
require 'ddtrace/ext/metrics'
|
|
2
|
+
|
|
3
|
+
require 'set'
|
|
4
|
+
require 'logger'
|
|
5
|
+
require 'ddtrace/utils/time'
|
|
6
|
+
require 'ddtrace/runtime/identity'
|
|
7
|
+
|
|
8
|
+
module Datadog
|
|
9
|
+
# Acts as client for sending metrics (via Statsd)
|
|
10
|
+
# Wraps a Statsd client with default tags and additional configuration.
|
|
11
|
+
class Metrics
|
|
12
|
+
attr_reader :statsd
|
|
13
|
+
|
|
14
|
+
def initialize(options = {})
|
|
15
|
+
@statsd = options.fetch(:statsd) { default_statsd_client if supported? }
|
|
16
|
+
@enabled = options.fetch(:enabled, true)
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def supported?
|
|
20
|
+
version = Gem.loaded_specs['dogstatsd-ruby'] \
|
|
21
|
+
&& Gem.loaded_specs['dogstatsd-ruby'].version
|
|
22
|
+
|
|
23
|
+
!version.nil? && (version >= Gem::Version.new('3.3.0'))
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def enabled?
|
|
27
|
+
@enabled
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def enabled=(enabled)
|
|
31
|
+
@enabled = (enabled == true)
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def default_hostname
|
|
35
|
+
ENV.fetch(Datadog::Ext::Metrics::ENV_DEFAULT_HOST, Datadog::Ext::Metrics::DEFAULT_HOST)
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def default_port
|
|
39
|
+
ENV.fetch(Datadog::Ext::Metrics::ENV_DEFAULT_PORT, Datadog::Ext::Metrics::DEFAULT_PORT).to_i
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
def default_statsd_client
|
|
43
|
+
require 'datadog/statsd' unless defined?(::Datadog::Statsd)
|
|
44
|
+
|
|
45
|
+
# Create a StatsD client that points to the agent.
|
|
46
|
+
Datadog::Statsd.new(default_hostname, default_port)
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
def configure(options = {})
|
|
50
|
+
@statsd = options[:statsd] if options.key?(:statsd)
|
|
51
|
+
self.enabled = options[:enabled] if options.key?(:enabled)
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
def send_stats?
|
|
55
|
+
enabled? && !statsd.nil?
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
def count(stat, value = nil, options = nil, &block)
|
|
59
|
+
return unless send_stats? && statsd.respond_to?(:count)
|
|
60
|
+
value, options = yield if block_given?
|
|
61
|
+
raise ArgumentError if value.nil?
|
|
62
|
+
|
|
63
|
+
statsd.count(stat, value, metric_options(options))
|
|
64
|
+
rescue StandardError => e
|
|
65
|
+
Datadog::Tracer.log.error("Failed to send count stat. Cause: #{e.message} Source: #{e.backtrace.first}")
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
def distribution(stat, value = nil, options = nil, &block)
|
|
69
|
+
return unless send_stats? && statsd.respond_to?(:distribution)
|
|
70
|
+
value, options = yield if block_given?
|
|
71
|
+
raise ArgumentError if value.nil?
|
|
72
|
+
|
|
73
|
+
statsd.distribution(stat, value, metric_options(options))
|
|
74
|
+
rescue StandardError => e
|
|
75
|
+
Datadog::Tracer.log.error("Failed to send distribution stat. Cause: #{e.message} Source: #{e.backtrace.first}")
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
def increment(stat, options = nil)
|
|
79
|
+
return unless send_stats? && statsd.respond_to?(:increment)
|
|
80
|
+
options = yield if block_given?
|
|
81
|
+
|
|
82
|
+
statsd.increment(stat, metric_options(options))
|
|
83
|
+
rescue StandardError => e
|
|
84
|
+
Datadog::Tracer.log.error("Failed to send increment stat. Cause: #{e.message} Source: #{e.backtrace.first}")
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
def gauge(stat, value = nil, options = nil, &block)
|
|
88
|
+
return unless send_stats? && statsd.respond_to?(:gauge)
|
|
89
|
+
value, options = yield if block_given?
|
|
90
|
+
raise ArgumentError if value.nil?
|
|
91
|
+
|
|
92
|
+
statsd.gauge(stat, value, metric_options(options))
|
|
93
|
+
rescue StandardError => e
|
|
94
|
+
Datadog::Tracer.log.error("Failed to send gauge stat. Cause: #{e.message} Source: #{e.backtrace.first}")
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
def time(stat, options = nil)
|
|
98
|
+
return yield unless send_stats?
|
|
99
|
+
|
|
100
|
+
# Calculate time, send it as a distribution.
|
|
101
|
+
start = Utils::Time.get_time
|
|
102
|
+
return yield
|
|
103
|
+
ensure
|
|
104
|
+
begin
|
|
105
|
+
if send_stats? && !start.nil?
|
|
106
|
+
finished = Utils::Time.get_time
|
|
107
|
+
distribution(stat, ((finished - start) * 1000), options)
|
|
108
|
+
end
|
|
109
|
+
rescue StandardError => e
|
|
110
|
+
Datadog::Tracer.log.error("Failed to send time stat. Cause: #{e.message} Source: #{e.backtrace.first}")
|
|
111
|
+
end
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
def send_metrics(metrics)
|
|
115
|
+
metrics.each { |m| send(m.type, *[m.name, m.value, m.options].compact) }
|
|
116
|
+
end
|
|
117
|
+
|
|
118
|
+
Metric = Struct.new(:type, :name, :value, :options) do
|
|
119
|
+
def initialize(*args)
|
|
120
|
+
super
|
|
121
|
+
self.options = options || {}
|
|
122
|
+
end
|
|
123
|
+
end
|
|
124
|
+
|
|
125
|
+
# For defining and adding default options to metrics
|
|
126
|
+
module Options
|
|
127
|
+
DEFAULT = {
|
|
128
|
+
tags: DEFAULT_TAGS = [
|
|
129
|
+
"#{Ext::Metrics::TAG_LANG}:#{Runtime::Identity.lang}".freeze,
|
|
130
|
+
"#{Ext::Metrics::TAG_LANG_INTERPRETER}:#{Runtime::Identity.lang_interpreter}".freeze,
|
|
131
|
+
"#{Ext::Metrics::TAG_LANG_VERSION}:#{Runtime::Identity.lang_version}".freeze,
|
|
132
|
+
"#{Ext::Metrics::TAG_TRACER_VERSION}:#{Runtime::Identity.tracer_version}".freeze
|
|
133
|
+
].freeze
|
|
134
|
+
}.freeze
|
|
135
|
+
|
|
136
|
+
def metric_options(options = nil)
|
|
137
|
+
return default_metric_options if options.nil?
|
|
138
|
+
|
|
139
|
+
default_metric_options.merge(options) do |key, old_value, new_value|
|
|
140
|
+
case key
|
|
141
|
+
when :tags
|
|
142
|
+
old_value.dup.concat(new_value).uniq
|
|
143
|
+
else
|
|
144
|
+
new_value
|
|
145
|
+
end
|
|
146
|
+
end
|
|
147
|
+
end
|
|
148
|
+
|
|
149
|
+
def default_metric_options
|
|
150
|
+
# Return dupes, so that the constant isn't modified,
|
|
151
|
+
# and defaults are unfrozen for mutation in Statsd.
|
|
152
|
+
DEFAULT.dup.tap do |options|
|
|
153
|
+
options[:tags] = options[:tags].dup
|
|
154
|
+
end
|
|
155
|
+
end
|
|
156
|
+
end
|
|
157
|
+
|
|
158
|
+
# For defining and adding helpers to metrics
|
|
159
|
+
module Helpers
|
|
160
|
+
[
|
|
161
|
+
:count,
|
|
162
|
+
:distribution,
|
|
163
|
+
:increment,
|
|
164
|
+
:gauge,
|
|
165
|
+
:time
|
|
166
|
+
].each do |metric_type|
|
|
167
|
+
define_method(metric_type) do |name, stat|
|
|
168
|
+
name = name.to_sym
|
|
169
|
+
define_method(name) do |*args, &block|
|
|
170
|
+
send(metric_type, stat, *args, &block)
|
|
171
|
+
end
|
|
172
|
+
end
|
|
173
|
+
end
|
|
174
|
+
end
|
|
175
|
+
|
|
176
|
+
module Logging
|
|
177
|
+
# Surrogate for Datadog::Statsd to log elsewhere
|
|
178
|
+
class Adapter
|
|
179
|
+
attr_accessor :logger
|
|
180
|
+
|
|
181
|
+
def initialize(logger = nil)
|
|
182
|
+
@logger = logger || Logger.new(STDOUT).tap do |l|
|
|
183
|
+
l.level = Logger::INFO
|
|
184
|
+
l.progname = nil
|
|
185
|
+
l.formatter = proc do |_severity, datetime, _progname, msg|
|
|
186
|
+
stat = JSON.parse(msg[3..-1]) # Trim off leading progname...
|
|
187
|
+
"#{JSON.dump(timestamp: datetime.to_i, message: 'Metric sent.', metric: stat)}\n"
|
|
188
|
+
end
|
|
189
|
+
end
|
|
190
|
+
end
|
|
191
|
+
|
|
192
|
+
def count(stat, value, options = nil)
|
|
193
|
+
logger.info({ stat: stat, type: :count, value: value, options: options }.to_json)
|
|
194
|
+
end
|
|
195
|
+
|
|
196
|
+
def distribution(stat, value, options = nil)
|
|
197
|
+
logger.info({ stat: stat, type: :distribution, value: value, options: options }.to_json)
|
|
198
|
+
end
|
|
199
|
+
|
|
200
|
+
def increment(stat, options = nil)
|
|
201
|
+
logger.info({ stat: stat, type: :increment, options: options }.to_json)
|
|
202
|
+
end
|
|
203
|
+
|
|
204
|
+
def gauge(stat, value, options = nil)
|
|
205
|
+
logger.info({ stat: stat, type: :gauge, value: value, options: options }.to_json)
|
|
206
|
+
end
|
|
207
|
+
end
|
|
208
|
+
end
|
|
209
|
+
|
|
210
|
+
# Make available on for both class and instance.
|
|
211
|
+
include Options
|
|
212
|
+
extend Options
|
|
213
|
+
extend Helpers
|
|
214
|
+
end
|
|
215
|
+
end
|