ddtrace 0.41.0 → 0.46.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.circleci/config.yml +223 -126
- data/.circleci/images/primary/Dockerfile-3.0.0 +73 -0
- data/.github/workflows/add-milestone-to-pull-requests.yml +42 -0
- data/.github/workflows/create-next-milestone.yml +20 -0
- data/.rubocop.yml +250 -7
- data/.rubocop_todo.yml +396 -0
- data/.simplecov +3 -0
- data/Appraisals +429 -135
- data/CHANGELOG.md +1158 -354
- data/CONTRIBUTING.md +2 -2
- data/Gemfile +40 -3
- data/README.md +1 -0
- data/Rakefile +236 -29
- data/ddtrace.gemspec +4 -35
- data/docker-compose.yml +30 -0
- data/docs/DevelopmentGuide.md +40 -2
- data/docs/GettingStarted.md +186 -16
- data/integration/README.md +68 -0
- data/integration/apps/rack/.dockerignore +1 -0
- data/integration/apps/rack/.envrc.sample +1 -0
- data/integration/apps/rack/.gitignore +4 -0
- data/integration/apps/rack/.rspec +1 -0
- data/integration/apps/rack/Dockerfile +25 -0
- data/integration/apps/rack/Dockerfile-ci +11 -0
- data/integration/apps/rack/Gemfile +24 -0
- data/integration/apps/rack/README.md +93 -0
- data/integration/apps/rack/app/acme.rb +80 -0
- data/integration/apps/rack/app/datadog.rb +17 -0
- data/integration/apps/rack/bin/run +22 -0
- data/integration/apps/rack/bin/setup +17 -0
- data/integration/apps/rack/bin/test +24 -0
- data/integration/apps/rack/config.ru +6 -0
- data/integration/apps/rack/config/puma.rb +14 -0
- data/integration/apps/rack/config/unicorn.rb +23 -0
- data/integration/apps/rack/docker-compose.ci.yml +62 -0
- data/integration/apps/rack/docker-compose.yml +78 -0
- data/integration/apps/rack/script/build-images +38 -0
- data/integration/apps/rack/script/ci +50 -0
- data/integration/apps/rack/spec/integration/basic_spec.rb +10 -0
- data/integration/apps/rack/spec/spec_helper.rb +16 -0
- data/integration/apps/rack/spec/support/integration_helper.rb +22 -0
- data/integration/apps/rails-five/.dockerignore +1 -0
- data/integration/apps/rails-five/.env +3 -0
- data/integration/apps/rails-five/.envrc.sample +1 -0
- data/integration/apps/rails-five/.gitignore +30 -0
- data/integration/apps/rails-five/Dockerfile +25 -0
- data/integration/apps/rails-five/Dockerfile-ci +11 -0
- data/integration/apps/rails-five/Gemfile +104 -0
- data/integration/apps/rails-five/README.md +94 -0
- data/integration/apps/rails-five/Rakefile +6 -0
- data/integration/apps/rails-five/app/channels/application_cable/channel.rb +4 -0
- data/integration/apps/rails-five/app/channels/application_cable/connection.rb +4 -0
- data/integration/apps/rails-five/app/controllers/application_controller.rb +2 -0
- data/integration/apps/rails-five/app/controllers/basic_controller.rb +36 -0
- data/integration/apps/rails-five/app/controllers/concerns/.keep +0 -0
- data/integration/apps/rails-five/app/controllers/health_controller.rb +9 -0
- data/integration/apps/rails-five/app/controllers/jobs_controller.rb +12 -0
- data/integration/apps/rails-five/app/jobs/application_job.rb +2 -0
- data/integration/apps/rails-five/app/jobs/test_job.rb +12 -0
- data/integration/apps/rails-five/app/mailers/application_mailer.rb +4 -0
- data/integration/apps/rails-five/app/models/application_record.rb +3 -0
- data/integration/apps/rails-five/app/models/concerns/.keep +0 -0
- data/integration/apps/rails-five/app/models/test.rb +2 -0
- data/integration/apps/rails-five/app/views/layouts/mailer.html.erb +13 -0
- data/integration/apps/rails-five/app/views/layouts/mailer.text.erb +1 -0
- data/integration/apps/rails-five/bin/bundle +3 -0
- data/integration/apps/rails-five/bin/rails +9 -0
- data/integration/apps/rails-five/bin/rake +9 -0
- data/integration/apps/rails-five/bin/run +24 -0
- data/integration/apps/rails-five/bin/setup +27 -0
- data/integration/apps/rails-five/bin/spring +17 -0
- data/integration/apps/rails-five/bin/test +21 -0
- data/integration/apps/rails-five/bin/update +28 -0
- data/integration/apps/rails-five/config.ru +5 -0
- data/integration/apps/rails-five/config/application.rb +97 -0
- data/integration/apps/rails-five/config/boot.rb +4 -0
- data/integration/apps/rails-five/config/cable.yml +10 -0
- data/integration/apps/rails-five/config/credentials.yml.enc +1 -0
- data/integration/apps/rails-five/config/database.yml +28 -0
- data/integration/apps/rails-five/config/environment.rb +5 -0
- data/integration/apps/rails-five/config/environments/development.rb +51 -0
- data/integration/apps/rails-five/config/environments/production.rb +82 -0
- data/integration/apps/rails-five/config/environments/test.rb +43 -0
- data/integration/apps/rails-five/config/initializers/datadog.rb +18 -0
- data/integration/apps/rails-five/config/initializers/filter_parameter_logging.rb +4 -0
- data/integration/apps/rails-five/config/initializers/resque.rb +4 -0
- data/integration/apps/rails-five/config/initializers/rollbar.rb +5 -0
- data/integration/apps/rails-five/config/initializers/wrap_parameters.rb +14 -0
- data/integration/apps/rails-five/config/locales/en.yml +33 -0
- data/integration/apps/rails-five/config/puma.rb +24 -0
- data/integration/apps/rails-five/config/routes.rb +11 -0
- data/integration/apps/rails-five/config/spring.rb +6 -0
- data/integration/apps/rails-five/config/unicorn.rb +29 -0
- data/integration/apps/rails-five/db/migrate/20190927215052_create_tests.rb +11 -0
- data/integration/apps/rails-five/db/schema.rb +23 -0
- data/integration/apps/rails-five/db/seeds.rb +7 -0
- data/integration/apps/rails-five/docker-compose.ci.yml +98 -0
- data/integration/apps/rails-five/docker-compose.yml +100 -0
- data/integration/apps/rails-five/lib/tasks/.keep +0 -0
- data/integration/apps/rails-five/log/.keep +0 -0
- data/integration/apps/rails-five/public/robots.txt +1 -0
- data/integration/apps/rails-five/script/build-images +35 -0
- data/integration/apps/rails-five/script/ci +50 -0
- data/integration/apps/rails-five/spec/integration/basic_spec.rb +10 -0
- data/integration/apps/rails-five/spec/spec_helper.rb +16 -0
- data/integration/apps/rails-five/spec/support/integration_helper.rb +22 -0
- data/integration/apps/rails-five/storage/.keep +0 -0
- data/integration/apps/rails-five/tmp/.keep +0 -0
- data/integration/apps/rails-five/vendor/.keep +0 -0
- data/integration/apps/ruby/.dockerignore +1 -0
- data/integration/apps/ruby/.envrc.sample +1 -0
- data/integration/apps/ruby/.gitignore +2 -0
- data/integration/apps/ruby/Dockerfile +25 -0
- data/integration/apps/ruby/Dockerfile-ci +11 -0
- data/integration/apps/ruby/Gemfile +11 -0
- data/integration/apps/ruby/README.md +70 -0
- data/integration/apps/ruby/agent.yaml +3 -0
- data/integration/apps/ruby/app/datadog.rb +13 -0
- data/integration/apps/ruby/app/fibonacci.rb +58 -0
- data/integration/apps/ruby/bin/run +20 -0
- data/integration/apps/ruby/bin/setup +17 -0
- data/integration/apps/ruby/bin/test +21 -0
- data/integration/apps/ruby/docker-compose.ci.yml +51 -0
- data/integration/apps/ruby/docker-compose.yml +63 -0
- data/integration/apps/ruby/script/build-images +38 -0
- data/integration/apps/ruby/script/ci +50 -0
- data/integration/images/agent/Dockerfile +2 -0
- data/integration/images/agent/agent.yaml +3 -0
- data/integration/images/include/datadog/analyzer.rb +71 -0
- data/integration/images/include/datadog/demo_env.rb +101 -0
- data/integration/images/include/http-health-check +33 -0
- data/integration/images/ruby/2.0/Dockerfile +54 -0
- data/integration/images/ruby/2.1/Dockerfile +54 -0
- data/integration/images/ruby/2.2/Dockerfile +54 -0
- data/integration/images/ruby/2.3/Dockerfile +70 -0
- data/integration/images/ruby/2.4/Dockerfile +54 -0
- data/integration/images/ruby/2.5/Dockerfile +54 -0
- data/integration/images/ruby/2.6/Dockerfile +54 -0
- data/integration/images/ruby/2.7/Dockerfile +54 -0
- data/integration/images/ruby/3.0/Dockerfile +54 -0
- data/integration/images/wrk/Dockerfile +33 -0
- data/integration/images/wrk/scripts/entrypoint.sh +17 -0
- data/integration/images/wrk/scripts/scenarios/basic/default.lua +1 -0
- data/integration/images/wrk/scripts/scenarios/basic/fibonacci.lua +1 -0
- data/integration/script/build-images +43 -0
- data/lib/ddtrace.rb +10 -5
- data/lib/ddtrace/analytics.rb +2 -0
- data/lib/ddtrace/auto_instrument.rb +3 -0
- data/lib/ddtrace/auto_instrument_base.rb +6 -0
- data/lib/ddtrace/buffer.rb +230 -134
- data/lib/ddtrace/configuration.rb +21 -5
- data/lib/ddtrace/configuration/base.rb +1 -1
- data/lib/ddtrace/configuration/components.rb +2 -2
- data/lib/ddtrace/configuration/option_definition.rb +1 -3
- data/lib/ddtrace/configuration/options.rb +2 -3
- data/lib/ddtrace/configuration/settings.rb +21 -5
- data/lib/ddtrace/context.rb +23 -6
- data/lib/ddtrace/context_provider.rb +18 -5
- data/lib/ddtrace/contrib/action_cable/event.rb +1 -0
- data/lib/ddtrace/contrib/action_cable/integration.rb +7 -0
- data/lib/ddtrace/contrib/action_pack/action_controller/instrumentation.rb +1 -3
- data/lib/ddtrace/contrib/action_pack/integration.rb +7 -0
- data/lib/ddtrace/contrib/action_view/event.rb +1 -5
- data/lib/ddtrace/contrib/action_view/events/render_partial.rb +1 -0
- data/lib/ddtrace/contrib/action_view/events/render_template.rb +1 -0
- data/lib/ddtrace/contrib/action_view/integration.rb +7 -0
- data/lib/ddtrace/contrib/action_view/utils.rb +1 -1
- data/lib/ddtrace/contrib/active_record/configuration/resolver.rb +17 -5
- data/lib/ddtrace/contrib/active_record/integration.rb +7 -0
- data/lib/ddtrace/contrib/active_record/utils.rb +68 -21
- data/lib/ddtrace/contrib/active_support/cache/instrumentation.rb +104 -3
- data/lib/ddtrace/contrib/active_support/cache/patcher.rb +21 -0
- data/lib/ddtrace/contrib/active_support/ext.rb +3 -0
- data/lib/ddtrace/contrib/active_support/integration.rb +7 -1
- data/lib/ddtrace/contrib/active_support/notifications/event.rb +12 -1
- data/lib/ddtrace/contrib/active_support/notifications/subscriber.rb +1 -0
- data/lib/ddtrace/contrib/active_support/notifications/subscription.rb +9 -5
- data/lib/ddtrace/contrib/auto_instrument.rb +49 -0
- data/lib/ddtrace/contrib/aws/instrumentation.rb +2 -1
- data/lib/ddtrace/contrib/aws/patcher.rb +1 -1
- data/lib/ddtrace/contrib/aws/services.rb +2 -0
- data/lib/ddtrace/contrib/configurable.rb +2 -0
- data/lib/ddtrace/contrib/configuration/resolvers/pattern_resolver.rb +6 -8
- data/lib/ddtrace/contrib/cucumber/configuration/settings.rb +28 -0
- data/lib/ddtrace/contrib/cucumber/ext.rb +17 -0
- data/lib/ddtrace/contrib/cucumber/formatter.rb +98 -0
- data/lib/ddtrace/contrib/cucumber/instrumentation.rb +24 -0
- data/lib/ddtrace/contrib/cucumber/integration.rb +45 -0
- data/lib/ddtrace/contrib/cucumber/patcher.rb +23 -0
- data/lib/ddtrace/contrib/dalli/patcher.rb +0 -38
- data/lib/ddtrace/contrib/delayed_job/configuration/settings.rb +2 -0
- data/lib/ddtrace/contrib/delayed_job/ext.rb +2 -0
- data/lib/ddtrace/contrib/delayed_job/plugin.rb +38 -15
- data/lib/ddtrace/contrib/elasticsearch/quantize.rb +3 -2
- data/lib/ddtrace/contrib/ethon/easy_patch.rb +11 -10
- data/lib/ddtrace/contrib/ethon/ext.rb +1 -0
- data/lib/ddtrace/contrib/excon/middleware.rb +9 -7
- data/lib/ddtrace/contrib/extensions.rb +28 -1
- data/lib/ddtrace/contrib/faraday/middleware.rb +1 -3
- data/lib/ddtrace/contrib/faraday/patcher.rb +0 -36
- data/lib/ddtrace/contrib/grape/configuration/settings.rb +7 -0
- data/lib/ddtrace/contrib/grape/endpoint.rb +47 -21
- data/lib/ddtrace/contrib/grape/ext.rb +1 -0
- data/lib/ddtrace/contrib/grape/patcher.rb +0 -42
- data/lib/ddtrace/contrib/grpc/datadog_interceptor.rb +8 -8
- data/lib/ddtrace/contrib/grpc/datadog_interceptor/client.rb +1 -1
- data/lib/ddtrace/contrib/grpc/datadog_interceptor/server.rb +1 -0
- data/lib/ddtrace/contrib/grpc/patcher.rb +0 -36
- data/lib/ddtrace/contrib/http/circuit_breaker.rb +1 -3
- data/lib/ddtrace/contrib/http/instrumentation.rb +7 -7
- data/lib/ddtrace/contrib/httpclient/configuration/settings.rb +32 -0
- data/lib/ddtrace/contrib/httpclient/ext.rb +17 -0
- data/lib/ddtrace/contrib/httpclient/instrumentation.rb +151 -0
- data/lib/ddtrace/contrib/httpclient/integration.rb +43 -0
- data/lib/ddtrace/contrib/httpclient/patcher.rb +35 -0
- data/lib/ddtrace/contrib/httprb/instrumentation.rb +5 -6
- data/lib/ddtrace/contrib/kafka/event.rb +1 -1
- data/lib/ddtrace/contrib/mongodb/instrumentation.rb +2 -0
- data/lib/ddtrace/contrib/mongodb/subscribers.rb +2 -3
- data/lib/ddtrace/contrib/patchable.rb +18 -7
- data/lib/ddtrace/contrib/patcher.rb +1 -1
- data/lib/ddtrace/contrib/qless/configuration/settings.rb +35 -0
- data/lib/ddtrace/contrib/qless/ext.rb +20 -0
- data/lib/ddtrace/contrib/qless/integration.rb +38 -0
- data/lib/ddtrace/contrib/qless/patcher.rb +35 -0
- data/lib/ddtrace/contrib/qless/qless_job.rb +73 -0
- data/lib/ddtrace/contrib/qless/tracer_cleaner.rb +33 -0
- data/lib/ddtrace/contrib/que/configuration/settings.rb +1 -0
- data/lib/ddtrace/contrib/que/ext.rb +19 -19
- data/lib/ddtrace/contrib/que/tracer.rb +3 -2
- data/lib/ddtrace/contrib/racecar/event.rb +1 -0
- data/lib/ddtrace/contrib/rack/configuration/settings.rb +3 -3
- data/lib/ddtrace/contrib/rack/integration.rb +7 -0
- data/lib/ddtrace/contrib/rack/middlewares.rb +6 -11
- data/lib/ddtrace/contrib/rack/patcher.rb +1 -3
- data/lib/ddtrace/contrib/rack/request_queue.rb +6 -1
- data/lib/ddtrace/contrib/rails/auto_instrument_railtie.rb +10 -0
- data/lib/ddtrace/contrib/rails/patcher.rb +19 -5
- data/lib/ddtrace/contrib/rails/utils.rb +4 -0
- data/lib/ddtrace/contrib/rake/instrumentation.rb +4 -2
- data/lib/ddtrace/contrib/rake/integration.rb +1 -1
- data/lib/ddtrace/contrib/redis/configuration/resolver.rb +3 -1
- data/lib/ddtrace/contrib/redis/configuration/settings.rb +5 -0
- data/lib/ddtrace/contrib/redis/ext.rb +1 -0
- data/lib/ddtrace/contrib/redis/patcher.rb +20 -3
- data/lib/ddtrace/contrib/redis/quantize.rb +28 -0
- data/lib/ddtrace/contrib/redis/tags.rb +5 -1
- data/lib/ddtrace/contrib/redis/vendor/LICENSE +20 -0
- data/lib/ddtrace/contrib/redis/vendor/resolver.rb +6 -7
- data/lib/ddtrace/contrib/registry.rb +2 -2
- data/lib/ddtrace/contrib/resque/configuration/settings.rb +1 -0
- data/lib/ddtrace/contrib/resque/integration.rb +1 -1
- data/lib/ddtrace/contrib/resque/resque_job.rb +3 -1
- data/lib/ddtrace/contrib/rest_client/request_patch.rb +1 -3
- data/lib/ddtrace/contrib/rspec/configuration/settings.rb +28 -0
- data/lib/ddtrace/contrib/rspec/example.rb +75 -0
- data/lib/ddtrace/contrib/rspec/ext.rb +16 -0
- data/lib/ddtrace/contrib/rspec/integration.rb +46 -0
- data/lib/ddtrace/contrib/rspec/patcher.rb +23 -0
- data/lib/ddtrace/contrib/sequel/utils.rb +5 -6
- data/lib/ddtrace/contrib/shoryuken/configuration/settings.rb +1 -0
- data/lib/ddtrace/contrib/shoryuken/tracer.rb +3 -1
- data/lib/ddtrace/contrib/sidekiq/configuration/settings.rb +1 -0
- data/lib/ddtrace/contrib/sidekiq/server_tracer.rb +5 -7
- data/lib/ddtrace/contrib/sidekiq/tracing.rb +0 -1
- data/lib/ddtrace/contrib/sinatra/env.rb +1 -3
- data/lib/ddtrace/contrib/sinatra/headers.rb +1 -3
- data/lib/ddtrace/contrib/sinatra/tracer.rb +1 -3
- data/lib/ddtrace/contrib/sinatra/tracer_middleware.rb +5 -5
- data/lib/ddtrace/contrib/sneakers/configuration/settings.rb +1 -0
- data/lib/ddtrace/contrib/sneakers/ext.rb +11 -11
- data/lib/ddtrace/contrib/sneakers/tracer.rb +16 -21
- data/lib/ddtrace/contrib/status_code_matcher.rb +69 -0
- data/lib/ddtrace/correlation.rb +1 -0
- data/lib/ddtrace/diagnostics/environment_logger.rb +2 -1
- data/lib/ddtrace/distributed_tracing/headers/headers.rb +1 -0
- data/lib/ddtrace/distributed_tracing/headers/helpers.rb +1 -3
- data/lib/ddtrace/ext/app_types.rb +1 -0
- data/lib/ddtrace/ext/ci.rb +297 -0
- data/lib/ddtrace/ext/distributed.rb +8 -2
- data/lib/ddtrace/ext/git.rb +11 -0
- data/lib/ddtrace/ext/http.rb +1 -1
- data/lib/ddtrace/ext/runtime.rb +2 -1
- data/lib/ddtrace/ext/test.rb +24 -0
- data/lib/ddtrace/forced_tracing.rb +2 -0
- data/lib/ddtrace/logger.rb +1 -1
- data/lib/ddtrace/metrics.rb +10 -6
- data/lib/ddtrace/opentracer/distributed_headers.rb +3 -0
- data/lib/ddtrace/opentracer/span.rb +2 -6
- data/lib/ddtrace/opentracer/thread_local_scope.rb +1 -0
- data/lib/ddtrace/patcher.rb +2 -3
- data/lib/ddtrace/pin.rb +3 -52
- data/lib/ddtrace/pipeline/span_filter.rb +1 -1
- data/lib/ddtrace/propagation/grpc_propagator.rb +17 -4
- data/lib/ddtrace/propagation/http_propagator.rb +17 -2
- data/lib/ddtrace/quantization/http.rb +1 -0
- data/lib/ddtrace/runtime/cgroup.rb +1 -1
- data/lib/ddtrace/runtime/container.rb +2 -2
- data/lib/ddtrace/runtime/identity.rb +4 -5
- data/lib/ddtrace/sampler.rb +1 -1
- data/lib/ddtrace/sampling/rate_limiter.rb +65 -16
- data/lib/ddtrace/sampling/rule_sampler.rb +1 -0
- data/lib/ddtrace/span.rb +7 -7
- data/lib/ddtrace/sync_writer.rb +7 -10
- data/lib/ddtrace/tracer.rb +23 -10
- data/lib/ddtrace/transport/http.rb +1 -3
- data/lib/ddtrace/transport/http/adapters/net.rb +9 -4
- data/lib/ddtrace/transport/http/adapters/registry.rb +1 -0
- data/lib/ddtrace/transport/http/adapters/unix_socket.rb +2 -4
- data/lib/ddtrace/transport/http/builder.rb +2 -0
- data/lib/ddtrace/transport/http/traces.rb +2 -3
- data/lib/ddtrace/transport/io.rb +1 -1
- data/lib/ddtrace/transport/traces.rb +3 -0
- data/lib/ddtrace/utils.rb +10 -11
- data/lib/ddtrace/utils/forking.rb +52 -0
- data/lib/ddtrace/utils/time.rb +25 -1
- data/lib/ddtrace/vendor/active_record/MIT-LICENSE +20 -0
- data/lib/ddtrace/version.rb +1 -1
- data/lib/ddtrace/workers.rb +5 -0
- data/lib/ddtrace/workers/async.rb +8 -0
- data/lib/ddtrace/workers/loop.rb +3 -0
- data/lib/ddtrace/workers/polling.rb +1 -0
- data/lib/ddtrace/workers/runtime_metrics.rb +7 -3
- data/lib/ddtrace/workers/trace_writer.rb +9 -10
- data/lib/ddtrace/writer.rb +22 -4
- metadata +168 -358
- data/lib/ddtrace/augmentation.rb +0 -13
- data/lib/ddtrace/augmentation/method_wrapper.rb +0 -20
- data/lib/ddtrace/augmentation/method_wrapping.rb +0 -38
- data/lib/ddtrace/augmentation/shim.rb +0 -102
- data/lib/ddtrace/monkey.rb +0 -58
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
require 'ddtrace/contrib/patcher'
|
|
2
|
+
require 'ddtrace/contrib/httpclient/instrumentation'
|
|
3
|
+
|
|
4
|
+
module Datadog
|
|
5
|
+
module Contrib
|
|
6
|
+
# Datadog Httpclient integration.
|
|
7
|
+
module Httpclient
|
|
8
|
+
# Patcher enables patching of 'httpclient' module.
|
|
9
|
+
module Patcher
|
|
10
|
+
include Contrib::Patcher
|
|
11
|
+
|
|
12
|
+
module_function
|
|
13
|
+
|
|
14
|
+
def patched?
|
|
15
|
+
done?(:httpclient)
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def target_version
|
|
19
|
+
Integration.version
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
# patch applies our patch
|
|
23
|
+
def patch
|
|
24
|
+
do_once(:httpclient) do
|
|
25
|
+
begin
|
|
26
|
+
::HTTPClient.send(:include, Instrumentation)
|
|
27
|
+
rescue StandardError => e
|
|
28
|
+
Datadog::Logger.error("Unable to apply httpclient integration: #{e}")
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
end
|
|
@@ -40,7 +40,7 @@ module Datadog
|
|
|
40
40
|
# Add additional request specific tags to the span.
|
|
41
41
|
annotate_span_with_request!(span, req, request_options)
|
|
42
42
|
rescue StandardError => e
|
|
43
|
-
logger.error("error preparing span for http.rb request: #{e},
|
|
43
|
+
logger.error("error preparing span for http.rb request: #{e}, Source: #{e.backtrace}")
|
|
44
44
|
ensure
|
|
45
45
|
res = super(req, options)
|
|
46
46
|
end
|
|
@@ -103,7 +103,7 @@ module Datadog
|
|
|
103
103
|
Datadog::Pin.new(
|
|
104
104
|
service,
|
|
105
105
|
app: Ext::APP,
|
|
106
|
-
app_type: Datadog::Ext::
|
|
106
|
+
app_type: Datadog::Ext::HTTP::TYPE_OUTBOUND,
|
|
107
107
|
tracer: -> { config[:tracer] }
|
|
108
108
|
)
|
|
109
109
|
end
|
|
@@ -126,7 +126,7 @@ module Datadog
|
|
|
126
126
|
Datadog::Pin.new(
|
|
127
127
|
service,
|
|
128
128
|
app: Ext::APP,
|
|
129
|
-
app_type: Datadog::Ext::
|
|
129
|
+
app_type: Datadog::Ext::HTTP::TYPE_OUTBOUND,
|
|
130
130
|
tracer: -> { config[:tracer] }
|
|
131
131
|
)
|
|
132
132
|
end
|
|
@@ -145,15 +145,14 @@ module Datadog
|
|
|
145
145
|
end
|
|
146
146
|
|
|
147
147
|
def should_skip_distributed_tracing?(pin)
|
|
148
|
-
if pin.config && pin.config.key?(:distributed_tracing)
|
|
149
|
-
return !pin.config[:distributed_tracing]
|
|
150
|
-
end
|
|
148
|
+
return !pin.config[:distributed_tracing] if pin.config && pin.config.key?(:distributed_tracing)
|
|
151
149
|
|
|
152
150
|
!Datadog.configuration[:httprb][:distributed_tracing]
|
|
153
151
|
end
|
|
154
152
|
|
|
155
153
|
def set_analytics_sample_rate(span, request_options)
|
|
156
154
|
return unless analytics_enabled?(request_options)
|
|
155
|
+
|
|
157
156
|
Contrib::Analytics.set_sample_rate(span, request_options[:analytics_sample_rate])
|
|
158
157
|
end
|
|
159
158
|
end
|
|
@@ -23,6 +23,7 @@ module Datadog
|
|
|
23
23
|
return unless respond_to? :cluster
|
|
24
24
|
return unless cluster.respond_to? :addresses
|
|
25
25
|
return unless cluster.addresses.respond_to? :first
|
|
26
|
+
|
|
26
27
|
Datadog::Pin.get_from(cluster.addresses.first)
|
|
27
28
|
end
|
|
28
29
|
|
|
@@ -31,6 +32,7 @@ module Datadog
|
|
|
31
32
|
return unless respond_to? :cluster
|
|
32
33
|
return unless cluster.respond_to? :addresses
|
|
33
34
|
return unless cluster.addresses.respond_to? :each
|
|
35
|
+
|
|
34
36
|
# attach the PIN to all cluster addresses. One of them is used
|
|
35
37
|
# when executing a Command and it is attached to the Monitoring
|
|
36
38
|
# Event instance.
|
|
@@ -29,9 +29,7 @@ module Datadog
|
|
|
29
29
|
span.set_tag(Datadog::Ext::Integration::TAG_PEER_SERVICE, span.service)
|
|
30
30
|
|
|
31
31
|
# Set analytics sample rate
|
|
32
|
-
if analytics_enabled?
|
|
33
|
-
Contrib::Analytics.set_sample_rate(span, analytics_sample_rate)
|
|
34
|
-
end
|
|
32
|
+
Contrib::Analytics.set_sample_rate(span, analytics_sample_rate) if analytics_enabled?
|
|
35
33
|
|
|
36
34
|
# add operation tags; the full query is stored and used as a resource,
|
|
37
35
|
# since it has been quantized and reduced
|
|
@@ -92,6 +90,7 @@ module Datadog
|
|
|
92
90
|
|
|
93
91
|
def clear_span(event)
|
|
94
92
|
return if Thread.current[:datadog_mongo_span].nil?
|
|
93
|
+
|
|
95
94
|
Thread.current[:datadog_mongo_span].delete(event.request_id)
|
|
96
95
|
end
|
|
97
96
|
|
|
@@ -42,16 +42,27 @@ module Datadog
|
|
|
42
42
|
|
|
43
43
|
def patch
|
|
44
44
|
if !self.class.patchable? || patcher.nil?
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
45
|
+
return {
|
|
46
|
+
name: self.class.name,
|
|
47
|
+
available: self.class.available?,
|
|
48
|
+
loaded: self.class.loaded?,
|
|
49
|
+
compatible: self.class.compatible?,
|
|
50
|
+
patchable: self.class.patchable?
|
|
51
|
+
}
|
|
52
52
|
end
|
|
53
53
|
|
|
54
54
|
patcher.patch
|
|
55
|
+
true
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
# Can the patch for this integration be applied automatically?
|
|
59
|
+
# For example: test integrations should only be applied
|
|
60
|
+
# by the user explicitly setting `c.use :rspec`
|
|
61
|
+
# and rails sub-modules are auto-instrumented by enabling rails
|
|
62
|
+
# so auto-instrumenting them on their own will cause changes in
|
|
63
|
+
# service naming behavior
|
|
64
|
+
def auto_instrument?
|
|
65
|
+
true
|
|
55
66
|
end
|
|
56
67
|
end
|
|
57
68
|
end
|
|
@@ -8,7 +8,7 @@ module Datadog
|
|
|
8
8
|
base.send(:include, Datadog::Patcher)
|
|
9
9
|
|
|
10
10
|
base.singleton_class.send(:prepend, CommonMethods)
|
|
11
|
-
base.send(:prepend, CommonMethods) if base.
|
|
11
|
+
base.send(:prepend, CommonMethods) if base.instance_of?(Class)
|
|
12
12
|
end
|
|
13
13
|
|
|
14
14
|
# Prepended instance methods for all patchers
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
require 'ddtrace/contrib/configuration/settings'
|
|
2
|
+
require 'ddtrace/contrib/qless/ext'
|
|
3
|
+
|
|
4
|
+
module Datadog
|
|
5
|
+
module Contrib
|
|
6
|
+
module Qless
|
|
7
|
+
module Configuration
|
|
8
|
+
# Custom settings for the Qless integration
|
|
9
|
+
class Settings < Contrib::Configuration::Settings
|
|
10
|
+
option :analytics_enabled do |o|
|
|
11
|
+
o.default { env_to_bool(Ext::ENV_ANALYTICS_ENABLED, false) }
|
|
12
|
+
o.lazy
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
option :analytics_sample_rate do |o|
|
|
16
|
+
o.default { env_to_float(Ext::ENV_ANALYTICS_SAMPLE_RATE, 1.0) }
|
|
17
|
+
o.lazy
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
option :tag_job_data do |o|
|
|
21
|
+
o.default { env_to_bool(Ext::ENV_TAG_JOB_DATA, false) }
|
|
22
|
+
o.lazy
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
option :tag_job_tags do |o|
|
|
26
|
+
o.default { env_to_bool(Ext::ENV_TAG_JOB_TAGS, false) }
|
|
27
|
+
o.lazy
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
option :service_name, default: Ext::SERVICE_NAME
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
end
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
module Datadog
|
|
2
|
+
module Contrib
|
|
3
|
+
module Qless
|
|
4
|
+
# Qless integration constants
|
|
5
|
+
module Ext
|
|
6
|
+
APP = 'qless'.freeze
|
|
7
|
+
ENV_ANALYTICS_ENABLED = 'DD_QLESS_ANALYTICS_ENABLED'.freeze
|
|
8
|
+
ENV_ANALYTICS_SAMPLE_RATE = 'DD_QLESS_ANALYTICS_SAMPLE_RATE'.freeze
|
|
9
|
+
ENV_TAG_JOB_DATA = 'DD_QLESS_TAG_JOB_DATA'.freeze
|
|
10
|
+
ENV_TAG_JOB_TAGS = 'DD_QLESS_TAG_JOB_TAGS'.freeze
|
|
11
|
+
SERVICE_NAME = 'qless'.freeze
|
|
12
|
+
SPAN_JOB = 'qless.job'.freeze
|
|
13
|
+
TAG_JOB_ID = 'qless.job.id'.freeze
|
|
14
|
+
TAG_JOB_DATA = 'qless.job.data'.freeze
|
|
15
|
+
TAG_JOB_QUEUE = 'qless.job.queue'.freeze
|
|
16
|
+
TAG_JOB_TAGS = 'qless.job.tags'.freeze
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
require 'ddtrace/contrib/integration'
|
|
2
|
+
require 'ddtrace/contrib/qless/configuration/settings'
|
|
3
|
+
require 'ddtrace/contrib/qless/patcher'
|
|
4
|
+
|
|
5
|
+
module Datadog
|
|
6
|
+
module Contrib
|
|
7
|
+
module Qless
|
|
8
|
+
# Description of Qless integration
|
|
9
|
+
class Integration
|
|
10
|
+
include Contrib::Integration
|
|
11
|
+
|
|
12
|
+
MINIMUM_VERSION = Gem::Version.new('0.10.0')
|
|
13
|
+
|
|
14
|
+
register_as :qless, auto_patch: true
|
|
15
|
+
|
|
16
|
+
def self.version
|
|
17
|
+
Gem.loaded_specs['qless'] && Gem.loaded_specs['qless'].version
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def self.loaded?
|
|
21
|
+
!defined?(::Qless).nil?
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def self.compatible?
|
|
25
|
+
super && version >= MINIMUM_VERSION
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def default_configuration
|
|
29
|
+
Configuration::Settings.new
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def patcher
|
|
33
|
+
Patcher
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
end
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
require 'ddtrace/contrib/patcher'
|
|
2
|
+
require 'ddtrace/ext/app_types'
|
|
3
|
+
|
|
4
|
+
module Datadog
|
|
5
|
+
module Contrib
|
|
6
|
+
module Qless
|
|
7
|
+
# Patcher enables patching of 'qless' module.
|
|
8
|
+
module Patcher
|
|
9
|
+
include Contrib::Patcher
|
|
10
|
+
|
|
11
|
+
module_function
|
|
12
|
+
|
|
13
|
+
def target_version
|
|
14
|
+
Integration.version
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def patch
|
|
18
|
+
require_relative 'qless_job'
|
|
19
|
+
require_relative 'tracer_cleaner'
|
|
20
|
+
|
|
21
|
+
# Instrument all Qless Workers
|
|
22
|
+
::Qless::Workers::BaseWorker.class_eval do
|
|
23
|
+
# These are executed in inverse order of listing here
|
|
24
|
+
include QlessJob
|
|
25
|
+
include TracerCleaner
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def get_option(option)
|
|
30
|
+
Datadog.configuration[:qless].get_option(option)
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
end
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
require 'ddtrace/ext/app_types'
|
|
2
|
+
require 'ddtrace/contrib/analytics'
|
|
3
|
+
require 'qless'
|
|
4
|
+
|
|
5
|
+
module Datadog
|
|
6
|
+
module Contrib
|
|
7
|
+
module Qless
|
|
8
|
+
# Uses Qless job hooks to create traces
|
|
9
|
+
module QlessJob
|
|
10
|
+
def around_perform(job)
|
|
11
|
+
return super unless datadog_configuration && tracer
|
|
12
|
+
|
|
13
|
+
tracer.trace(Ext::SPAN_JOB, span_options) do |span|
|
|
14
|
+
span.resource = job.klass_name
|
|
15
|
+
span.span_type = Datadog::Ext::AppTypes::WORKER
|
|
16
|
+
span.set_tag(Ext::TAG_JOB_ID, job.jid)
|
|
17
|
+
span.set_tag(Ext::TAG_JOB_QUEUE, job.queue_name)
|
|
18
|
+
|
|
19
|
+
tag_job_tags = datadog_configuration[:tag_job_tags]
|
|
20
|
+
span.set_tag(Ext::TAG_JOB_TAGS, job.tags) if tag_job_tags
|
|
21
|
+
|
|
22
|
+
tag_job_data = datadog_configuration[:tag_job_data]
|
|
23
|
+
if tag_job_data && !job.data.empty?
|
|
24
|
+
job_data = job.data.with_indifferent_access
|
|
25
|
+
formatted_data = job_data.except(:tags).map do |key, value|
|
|
26
|
+
"#{key}:#{value}".underscore
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
span.set_tag(Ext::TAG_JOB_DATA, formatted_data)
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
# Set analytics sample rate
|
|
33
|
+
if Contrib::Analytics.enabled?(datadog_configuration[:analytics_enabled])
|
|
34
|
+
Contrib::Analytics.set_sample_rate(span, datadog_configuration[:analytics_sample_rate])
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
# Measure service stats
|
|
38
|
+
Contrib::Analytics.set_measured(span)
|
|
39
|
+
|
|
40
|
+
super
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
def after_fork
|
|
45
|
+
configuration = Datadog.configuration[:qless]
|
|
46
|
+
return if configuration.nil?
|
|
47
|
+
|
|
48
|
+
# Add a pin, marking the job as forked.
|
|
49
|
+
# Used to trigger shutdown in forks for performance reasons.
|
|
50
|
+
# Cleanup happens in the TracerCleaner class
|
|
51
|
+
Datadog::Pin.new(
|
|
52
|
+
configuration[:service_name],
|
|
53
|
+
config: { forked: true }
|
|
54
|
+
).onto(::Qless)
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
private
|
|
58
|
+
|
|
59
|
+
def span_options
|
|
60
|
+
{ service: datadog_configuration[:service_name] }
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
def tracer
|
|
64
|
+
datadog_configuration.tracer
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
def datadog_configuration
|
|
68
|
+
Datadog.configuration[:qless]
|
|
69
|
+
end
|
|
70
|
+
end
|
|
71
|
+
end
|
|
72
|
+
end
|
|
73
|
+
end
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
module Datadog
|
|
2
|
+
module Contrib
|
|
3
|
+
module Qless
|
|
4
|
+
# Shutdown Tracer in forks for performance reasons
|
|
5
|
+
module TracerCleaner
|
|
6
|
+
def around_perform(job)
|
|
7
|
+
return super unless datadog_configuration && tracer
|
|
8
|
+
|
|
9
|
+
super.tap do
|
|
10
|
+
tracer.shutdown! if forked?
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
private
|
|
15
|
+
|
|
16
|
+
def forked?
|
|
17
|
+
pin = Datadog::Pin.get_from(::Qless)
|
|
18
|
+
return false unless pin
|
|
19
|
+
|
|
20
|
+
pin.config[:forked] == true
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def tracer
|
|
24
|
+
datadog_configuration.tracer
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def datadog_configuration
|
|
28
|
+
Datadog.configuration[:qless]
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
@@ -5,25 +5,25 @@ module Datadog
|
|
|
5
5
|
module Que
|
|
6
6
|
# Que integration constants
|
|
7
7
|
module Ext
|
|
8
|
-
APP = 'que'
|
|
9
|
-
ENV_ANALYTICS_ENABLED = 'DD_TRACE_QUE_ANALYTICS_ENABLED'
|
|
10
|
-
ENV_ANALYTICS_ENABLED_OLD = 'DD_QUE_ANALYTICS_ENABLED'
|
|
11
|
-
ENV_ANALYTICS_SAMPLE_RATE = 'DD_TRACE_QUE_ANALYTICS_SAMPLE_RATE'
|
|
12
|
-
ENV_ANALYTICS_SAMPLE_RATE_OLD = 'DD_QUE_ANALYTICS_SAMPLE_RATE'
|
|
13
|
-
ENV_ENABLED = 'DD_TRACE_QUE_ENABLED'
|
|
14
|
-
ENV_TAG_ARGS_ENABLED = 'DD_TRACE_QUE_TAG_ARGS_ENABLED'
|
|
15
|
-
ENV_TAG_DATA_ENABLED = 'DD_TRACE_QUE_TAG_DATA_ENABLED'
|
|
16
|
-
SERVICE_NAME = 'que'
|
|
17
|
-
SPAN_JOB = 'que.job'
|
|
18
|
-
TAG_JOB_ARGS = 'que.job.args'
|
|
19
|
-
TAG_JOB_DATA = 'que.job.data'
|
|
20
|
-
TAG_JOB_ERROR_COUNT = 'que.job.error_count'
|
|
21
|
-
TAG_JOB_EXPIRED_AT = 'que.job.expired_at'
|
|
22
|
-
TAG_JOB_FINISHED_AT = 'que.job.finished_at'
|
|
23
|
-
TAG_JOB_ID = 'que.job.id'
|
|
24
|
-
TAG_JOB_PRIORITY = 'que.job.priority'
|
|
25
|
-
TAG_JOB_QUEUE = 'que.job.queue'
|
|
26
|
-
TAG_JOB_RUN_AT = 'que.job.run_at'
|
|
8
|
+
APP = 'que'
|
|
9
|
+
ENV_ANALYTICS_ENABLED = 'DD_TRACE_QUE_ANALYTICS_ENABLED'
|
|
10
|
+
ENV_ANALYTICS_ENABLED_OLD = 'DD_QUE_ANALYTICS_ENABLED'
|
|
11
|
+
ENV_ANALYTICS_SAMPLE_RATE = 'DD_TRACE_QUE_ANALYTICS_SAMPLE_RATE'
|
|
12
|
+
ENV_ANALYTICS_SAMPLE_RATE_OLD = 'DD_QUE_ANALYTICS_SAMPLE_RATE'
|
|
13
|
+
ENV_ENABLED = 'DD_TRACE_QUE_ENABLED'
|
|
14
|
+
ENV_TAG_ARGS_ENABLED = 'DD_TRACE_QUE_TAG_ARGS_ENABLED'
|
|
15
|
+
ENV_TAG_DATA_ENABLED = 'DD_TRACE_QUE_TAG_DATA_ENABLED'
|
|
16
|
+
SERVICE_NAME = 'que'
|
|
17
|
+
SPAN_JOB = 'que.job'
|
|
18
|
+
TAG_JOB_ARGS = 'que.job.args'
|
|
19
|
+
TAG_JOB_DATA = 'que.job.data'
|
|
20
|
+
TAG_JOB_ERROR_COUNT = 'que.job.error_count'
|
|
21
|
+
TAG_JOB_EXPIRED_AT = 'que.job.expired_at'
|
|
22
|
+
TAG_JOB_FINISHED_AT = 'que.job.finished_at'
|
|
23
|
+
TAG_JOB_ID = 'que.job.id'
|
|
24
|
+
TAG_JOB_PRIORITY = 'que.job.priority'
|
|
25
|
+
TAG_JOB_QUEUE = 'que.job.queue'
|
|
26
|
+
TAG_JOB_RUN_AT = 'que.job.run_at'
|
|
27
27
|
end
|
|
28
28
|
end
|
|
29
29
|
end
|