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
|
@@ -9,8 +9,9 @@ module Datadog
|
|
|
9
9
|
class Tracer
|
|
10
10
|
def call(job)
|
|
11
11
|
trace_options = {
|
|
12
|
-
service:
|
|
13
|
-
span_type: Datadog::Ext::AppTypes::WORKER
|
|
12
|
+
service: configuration[:service_name],
|
|
13
|
+
span_type: Datadog::Ext::AppTypes::WORKER,
|
|
14
|
+
on_error: configuration[:error_handler]
|
|
14
15
|
}
|
|
15
16
|
|
|
16
17
|
tracer.trace(Ext::SPAN_JOB, trace_options) do |request_span|
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
require 'ddtrace/contrib/integration'
|
|
2
2
|
require 'ddtrace/contrib/rack/configuration/settings'
|
|
3
3
|
require 'ddtrace/contrib/rack/patcher'
|
|
4
|
+
require 'ddtrace/contrib/rails/utils'
|
|
4
5
|
|
|
5
6
|
module Datadog
|
|
6
7
|
module Contrib
|
|
@@ -25,6 +26,12 @@ module Datadog
|
|
|
25
26
|
super && version >= MINIMUM_VERSION
|
|
26
27
|
end
|
|
27
28
|
|
|
29
|
+
# enabled by rails integration so should only auto instrument
|
|
30
|
+
# if detected that it is being used without rails
|
|
31
|
+
def auto_instrument?
|
|
32
|
+
!Datadog::Contrib::Rails::Utils.railtie_supported?
|
|
33
|
+
end
|
|
34
|
+
|
|
28
35
|
def default_configuration
|
|
29
36
|
Configuration::Settings.new
|
|
30
37
|
end
|
|
@@ -53,7 +53,7 @@ module Datadog
|
|
|
53
53
|
tracer.provider.context = context if context.trace_id
|
|
54
54
|
end
|
|
55
55
|
|
|
56
|
-
#
|
|
56
|
+
# Create a root Span to keep track of frontend web servers
|
|
57
57
|
# (i.e. Apache, nginx) if the header is properly set
|
|
58
58
|
frontend_span = compute_queue_time(env, tracer)
|
|
59
59
|
|
|
@@ -131,7 +131,8 @@ module Datadog
|
|
|
131
131
|
end
|
|
132
132
|
|
|
133
133
|
# rubocop:disable Metrics/AbcSize
|
|
134
|
-
# rubocop:disable Metrics/
|
|
134
|
+
# rubocop:disable Metrics/CyclomaticComplexity
|
|
135
|
+
# rubocop:disable Metrics/PerceivedComplexity
|
|
135
136
|
def set_request_tags!(request_span, env, status, headers, response, original_env)
|
|
136
137
|
# http://www.rubydoc.info/github/rack/rack/file/SPEC
|
|
137
138
|
# The source of truth in Rack is the PATH_INFO key that holds the
|
|
@@ -199,9 +200,7 @@ module Datadog
|
|
|
199
200
|
|
|
200
201
|
# detect if the status code is a 5xx and flag the request span as an error
|
|
201
202
|
# unless it has been already set by the underlying framework
|
|
202
|
-
if status.to_s.start_with?('5') && request_span.status.zero?
|
|
203
|
-
request_span.status = 1
|
|
204
|
-
end
|
|
203
|
+
request_span.status = 1 if status.to_s.start_with?('5') && request_span.status.zero?
|
|
205
204
|
end
|
|
206
205
|
|
|
207
206
|
private
|
|
@@ -258,9 +257,7 @@ module Datadog
|
|
|
258
257
|
whitelist = configuration[:headers][:request] || []
|
|
259
258
|
whitelist.each do |header|
|
|
260
259
|
rack_header = header_to_rack_header(header)
|
|
261
|
-
if env.key?(rack_header)
|
|
262
|
-
result[Datadog::Ext::HTTP::RequestHeaders.to_tag(header)] = env[rack_header]
|
|
263
|
-
end
|
|
260
|
+
result[Datadog::Ext::HTTP::RequestHeaders.to_tag(header)] = env[rack_header] if env.key?(rack_header)
|
|
264
261
|
end
|
|
265
262
|
end
|
|
266
263
|
end
|
|
@@ -275,9 +272,7 @@ module Datadog
|
|
|
275
272
|
# Try a case-insensitive lookup
|
|
276
273
|
uppercased_header = header.to_s.upcase
|
|
277
274
|
matching_header = headers.keys.find { |h| h.upcase == uppercased_header }
|
|
278
|
-
if matching_header
|
|
279
|
-
result[Datadog::Ext::HTTP::ResponseHeaders.to_tag(header)] = headers[matching_header]
|
|
280
|
-
end
|
|
275
|
+
result[Datadog::Ext::HTTP::ResponseHeaders.to_tag(header)] = headers[matching_header] if matching_header
|
|
281
276
|
end
|
|
282
277
|
end
|
|
283
278
|
end
|
|
@@ -53,9 +53,7 @@ module Datadog
|
|
|
53
53
|
end
|
|
54
54
|
end
|
|
55
55
|
|
|
56
|
-
following = if middleware.instance_variable_defined?('@app')
|
|
57
|
-
middleware.instance_variable_get('@app')
|
|
58
|
-
end
|
|
56
|
+
following = (middleware.instance_variable_get('@app') if middleware.instance_variable_defined?('@app'))
|
|
59
57
|
|
|
60
58
|
retain_middleware_name(following)
|
|
61
59
|
end
|
|
@@ -1,7 +1,12 @@
|
|
|
1
1
|
module Datadog
|
|
2
2
|
module Contrib
|
|
3
3
|
module Rack
|
|
4
|
-
#
|
|
4
|
+
# Retrieves the time spent in an upstream proxy
|
|
5
|
+
# for the current Rack request.
|
|
6
|
+
#
|
|
7
|
+
# This time captures the request delay introduced but
|
|
8
|
+
# such proxy before the request made it to the Ruby
|
|
9
|
+
# process.
|
|
5
10
|
module QueueTime
|
|
6
11
|
REQUEST_START = 'HTTP_X_REQUEST_START'.freeze
|
|
7
12
|
QUEUE_START = 'HTTP_X_QUEUE_START'.freeze
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
require 'ddtrace'
|
|
2
|
+
|
|
3
|
+
# Railtie to include AutoInstrumentation in rails loading
|
|
4
|
+
class DatadogAutoInstrumentRailtie < Rails::Railtie
|
|
5
|
+
# we want to load before config initializers so that any user supplied config
|
|
6
|
+
# in config/initializers/datadog.rb will take precedence
|
|
7
|
+
initializer 'datadog.start_tracer', before: :load_config_initializers do
|
|
8
|
+
Datadog::Contrib::AutoInstrument.patch_all
|
|
9
|
+
end
|
|
10
|
+
end
|
|
@@ -53,16 +53,30 @@ module Datadog
|
|
|
53
53
|
end
|
|
54
54
|
|
|
55
55
|
def add_logger(app)
|
|
56
|
+
should_warn = true
|
|
56
57
|
# check if lograge key exists
|
|
57
|
-
|
|
58
|
+
# Note: Rails executes initializers sequentially based on alphabetical order,
|
|
59
|
+
# and lograge config could occur after dd config.
|
|
60
|
+
# Checking for `app.config.lograge.enabled` may yield a false negative.
|
|
61
|
+
# Instead we should naively add custom options if `config.lograge` exists from the lograge Railtie,
|
|
62
|
+
# since the custom options get ignored without lograge explicitly being enabled.
|
|
63
|
+
# See: https://github.com/roidrage/lograge/blob/1729eab7956bb95c5992e4adab251e4f93ff9280/lib/lograge/railtie.rb#L7-L12
|
|
64
|
+
if app.config.respond_to?(:lograge)
|
|
58
65
|
Datadog::Contrib::Rails::LogInjection.add_lograge_logger(app)
|
|
59
|
-
|
|
66
|
+
should_warn = false
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
# if lograge isn't set, check if tagged logged is enabled.
|
|
60
70
|
# if so, add proc that injects trace identifiers for tagged logging.
|
|
61
|
-
|
|
71
|
+
if (logger = app.config.logger) &&
|
|
72
|
+
defined?(::ActiveSupport::TaggedLogging) &&
|
|
73
|
+
logger.is_a?(::ActiveSupport::TaggedLogging)
|
|
74
|
+
|
|
62
75
|
Datadog::Contrib::Rails::LogInjection.add_as_tagged_logging_logger(app)
|
|
63
|
-
|
|
64
|
-
Datadog.logger.warn("Unabe to enable Datadog Trace context, Logger #{logger} is not supported")
|
|
76
|
+
should_warn = false
|
|
65
77
|
end
|
|
78
|
+
|
|
79
|
+
Datadog.logger.warn("Unable to enable Datadog Trace context, Logger #{logger} is not supported") if should_warn
|
|
66
80
|
end
|
|
67
81
|
|
|
68
82
|
def patch_after_intialize
|
|
@@ -16,7 +16,8 @@ module Datadog
|
|
|
16
16
|
return super unless enabled?
|
|
17
17
|
|
|
18
18
|
tracer.trace(Ext::SPAN_INVOKE, span_options) do |span|
|
|
19
|
-
|
|
19
|
+
annotate_invoke!(span, args)
|
|
20
|
+
super
|
|
20
21
|
end
|
|
21
22
|
ensure
|
|
22
23
|
shutdown_tracer!
|
|
@@ -26,7 +27,8 @@ module Datadog
|
|
|
26
27
|
return super unless enabled?
|
|
27
28
|
|
|
28
29
|
tracer.trace(Ext::SPAN_EXECUTE, span_options) do |span|
|
|
29
|
-
|
|
30
|
+
annotate_execute!(span, args)
|
|
31
|
+
super
|
|
30
32
|
end
|
|
31
33
|
ensure
|
|
32
34
|
shutdown_tracer!
|
|
@@ -4,6 +4,8 @@ module Datadog
|
|
|
4
4
|
module Contrib
|
|
5
5
|
module Redis
|
|
6
6
|
module Configuration
|
|
7
|
+
UNIX_SCHEME = 'unix'.freeze
|
|
8
|
+
|
|
7
9
|
# Converts Symbols, Strings, and Hashes to a normalized connection settings Hash.
|
|
8
10
|
class Resolver < Contrib::Configuration::Resolver
|
|
9
11
|
def resolve(key_or_hash)
|
|
@@ -13,7 +15,7 @@ module Datadog
|
|
|
13
15
|
end
|
|
14
16
|
|
|
15
17
|
def normalize(hash)
|
|
16
|
-
return { url: hash[:url] } if hash[:scheme] ==
|
|
18
|
+
return { url: hash[:url] } if hash[:scheme] == UNIX_SCHEME
|
|
17
19
|
|
|
18
20
|
# Connexion strings are always converted to host, port, db and scheme
|
|
19
21
|
# but the host, port, db and scheme will generate the :url only after
|
|
@@ -9,6 +9,7 @@ module Datadog
|
|
|
9
9
|
ENV_ANALYTICS_ENABLED_OLD = 'DD_REDIS_ANALYTICS_ENABLED'.freeze
|
|
10
10
|
ENV_ANALYTICS_SAMPLE_RATE = 'DD_TRACE_REDIS_ANALYTICS_SAMPLE_RATE'.freeze
|
|
11
11
|
ENV_ANALYTICS_SAMPLE_RATE_OLD = 'DD_REDIS_ANALYTICS_SAMPLE_RATE'.freeze
|
|
12
|
+
ENV_COMMAND_ARGS = 'DD_REDIS_COMMAND_ARGS'.freeze
|
|
12
13
|
METRIC_PIPELINE_LEN = 'redis.pipeline_length'.freeze
|
|
13
14
|
SERVICE_NAME = 'redis'.freeze
|
|
14
15
|
SPAN_COMMAND = 'redis.command'.freeze
|
|
@@ -28,6 +28,7 @@ module Datadog
|
|
|
28
28
|
|
|
29
29
|
# rubocop:disable Metrics/MethodLength
|
|
30
30
|
# rubocop:disable Metrics/BlockLength
|
|
31
|
+
# rubocop:disable Metrics/AbcSize
|
|
31
32
|
def patch_redis_client
|
|
32
33
|
::Redis::Client.class_eval do
|
|
33
34
|
alias_method :call_without_datadog, :call
|
|
@@ -40,7 +41,7 @@ module Datadog
|
|
|
40
41
|
pin.tracer.trace(Datadog::Contrib::Redis::Ext::SPAN_COMMAND) do |span|
|
|
41
42
|
span.service = pin.service
|
|
42
43
|
span.span_type = Datadog::Contrib::Redis::Ext::TYPE
|
|
43
|
-
span.resource =
|
|
44
|
+
span.resource = get_command(args)
|
|
44
45
|
Datadog::Contrib::Redis::Tags.set_common_tags(self, span)
|
|
45
46
|
|
|
46
47
|
response = call_without_datadog(*args, &block)
|
|
@@ -59,10 +60,10 @@ module Datadog
|
|
|
59
60
|
pin.tracer.trace(Datadog::Contrib::Redis::Ext::SPAN_COMMAND) do |span|
|
|
60
61
|
span.service = pin.service
|
|
61
62
|
span.span_type = Datadog::Contrib::Redis::Ext::TYPE
|
|
62
|
-
commands = args
|
|
63
|
+
commands = get_pipeline_commands(args)
|
|
63
64
|
span.resource = commands.join("\n")
|
|
64
|
-
Datadog::Contrib::Redis::Tags.set_common_tags(self, span)
|
|
65
65
|
span.set_metric Datadog::Contrib::Redis::Ext::METRIC_PIPELINE_LEN, commands.length
|
|
66
|
+
Datadog::Contrib::Redis::Tags.set_common_tags(self, span)
|
|
66
67
|
|
|
67
68
|
response = call_pipeline_without_datadog(*args, &block)
|
|
68
69
|
end
|
|
@@ -84,6 +85,22 @@ module Datadog
|
|
|
84
85
|
|
|
85
86
|
private
|
|
86
87
|
|
|
88
|
+
def get_command(args)
|
|
89
|
+
if datadog_configuration[:command_args]
|
|
90
|
+
Datadog::Contrib::Redis::Quantize.format_command_args(*args)
|
|
91
|
+
else
|
|
92
|
+
Datadog::Contrib::Redis::Quantize.get_verb(*args)
|
|
93
|
+
end
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
def get_pipeline_commands(args)
|
|
97
|
+
if datadog_configuration[:command_args]
|
|
98
|
+
args[0].commands.map { |c| Datadog::Contrib::Redis::Quantize.format_command_args(c) }
|
|
99
|
+
else
|
|
100
|
+
args[0].commands.map { |c| Datadog::Contrib::Redis::Quantize.get_verb(c) }
|
|
101
|
+
end
|
|
102
|
+
end
|
|
103
|
+
|
|
87
104
|
def datadog_configuration
|
|
88
105
|
Datadog.configuration[:redis, options]
|
|
89
106
|
end
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
require 'set'
|
|
2
|
+
|
|
1
3
|
module Datadog
|
|
2
4
|
module Contrib
|
|
3
5
|
module Redis
|
|
@@ -8,6 +10,19 @@ module Datadog
|
|
|
8
10
|
VALUE_MAX_LEN = 50
|
|
9
11
|
CMD_MAX_LEN = 500
|
|
10
12
|
|
|
13
|
+
MULTI_VERB_COMMANDS = Set.new(
|
|
14
|
+
%w[
|
|
15
|
+
ACL
|
|
16
|
+
CLIENT
|
|
17
|
+
CLUSTER
|
|
18
|
+
COMMAND
|
|
19
|
+
CONFIG
|
|
20
|
+
DEBUG
|
|
21
|
+
LATENCY
|
|
22
|
+
MEMORY
|
|
23
|
+
]
|
|
24
|
+
).freeze
|
|
25
|
+
|
|
11
26
|
module_function
|
|
12
27
|
|
|
13
28
|
def format_arg(arg)
|
|
@@ -27,8 +42,21 @@ module Datadog
|
|
|
27
42
|
Utils.truncate(cmd, CMD_MAX_LEN, TOO_LONG_MARK)
|
|
28
43
|
end
|
|
29
44
|
|
|
45
|
+
def get_verb(command_args)
|
|
46
|
+
return unless command_args.is_a?(Array)
|
|
47
|
+
|
|
48
|
+
return get_verb(command_args.first) if command_args.first.is_a?(Array)
|
|
49
|
+
|
|
50
|
+
arg = command_args.first
|
|
51
|
+
verb = arg.is_a?(Symbol) ? arg.to_s.upcase : arg.to_s
|
|
52
|
+
return verb unless MULTI_VERB_COMMANDS.include?(verb) && command_args[1]
|
|
53
|
+
|
|
54
|
+
"#{verb} #{command_args[1]}"
|
|
55
|
+
end
|
|
56
|
+
|
|
30
57
|
def auth_command?(command_args)
|
|
31
58
|
return false unless command_args.is_a?(Array) && !command_args.empty?
|
|
59
|
+
|
|
32
60
|
command_args.first.to_sym == :auth
|
|
33
61
|
end
|
|
34
62
|
|
|
@@ -19,7 +19,7 @@ module Datadog
|
|
|
19
19
|
span.set_tag Datadog::Ext::NET::TARGET_HOST, client.host
|
|
20
20
|
span.set_tag Datadog::Ext::NET::TARGET_PORT, client.port
|
|
21
21
|
span.set_tag Ext::TAG_DB, client.db
|
|
22
|
-
span.set_tag Ext::TAG_RAW_COMMAND, span.resource
|
|
22
|
+
span.set_tag Ext::TAG_RAW_COMMAND, span.resource if show_command_args?
|
|
23
23
|
end
|
|
24
24
|
|
|
25
25
|
private
|
|
@@ -35,6 +35,10 @@ module Datadog
|
|
|
35
35
|
def analytics_sample_rate
|
|
36
36
|
datadog_configuration[:analytics_sample_rate]
|
|
37
37
|
end
|
|
38
|
+
|
|
39
|
+
def show_command_args?
|
|
40
|
+
datadog_configuration[:command_args]
|
|
41
|
+
end
|
|
38
42
|
end
|
|
39
43
|
end
|
|
40
44
|
end
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
Copyright (c) 2009 Ezra Zygmuntowicz
|
|
2
|
+
|
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
|
4
|
+
a copy of this software and associated documentation files (the
|
|
5
|
+
"Software"), to deal in the Software without restriction, including
|
|
6
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
|
7
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
|
8
|
+
permit persons to whom the Software is furnished to do so, subject to
|
|
9
|
+
the following conditions:
|
|
10
|
+
|
|
11
|
+
The above copyright notice and this permission notice shall be
|
|
12
|
+
included in all copies or substantial portions of the Software.
|
|
13
|
+
|
|
14
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
15
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
16
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
17
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
|
18
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
|
19
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
|
20
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
@@ -56,11 +56,9 @@ module Datadog
|
|
|
56
56
|
defaults = DEFAULTS.dup
|
|
57
57
|
options = options.dup
|
|
58
58
|
|
|
59
|
-
defaults.
|
|
59
|
+
defaults.each_key do |key|
|
|
60
60
|
# Fill in defaults if needed
|
|
61
|
-
if defaults[key].respond_to?(:call)
|
|
62
|
-
defaults[key] = defaults[key].call
|
|
63
|
-
end
|
|
61
|
+
defaults[key] = defaults[key].call if defaults[key].respond_to?(:call)
|
|
64
62
|
|
|
65
63
|
# Symbolize only keys that are needed
|
|
66
64
|
options[key] = options[key.to_s] if options.key?(key.to_s)
|
|
@@ -73,9 +71,10 @@ module Datadog
|
|
|
73
71
|
if url
|
|
74
72
|
uri = URI(url)
|
|
75
73
|
|
|
76
|
-
|
|
74
|
+
case uri.scheme
|
|
75
|
+
when 'unix'
|
|
77
76
|
defaults[:path] = uri.path
|
|
78
|
-
|
|
77
|
+
when 'redis', 'rediss'
|
|
79
78
|
defaults[:scheme] = uri.scheme
|
|
80
79
|
defaults[:host] = uri.host if uri.host
|
|
81
80
|
defaults[:port] = uri.port if uri.port
|
|
@@ -90,7 +89,7 @@ module Datadog
|
|
|
90
89
|
end
|
|
91
90
|
|
|
92
91
|
# Use default when option is not specified or nil
|
|
93
|
-
defaults.
|
|
92
|
+
defaults.each_key do |key|
|
|
94
93
|
options[key] = defaults[key] if options[key].nil?
|
|
95
94
|
end
|
|
96
95
|
|