ddtrace 0.16.1 → 0.17.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/Appraisals +3 -3
- data/CHANGELOG.md +24 -2
- data/Rakefile +14 -28
- data/docker-compose.yml +1 -0
- data/docs/GettingStarted.md +302 -263
- data/lib/ddtrace.rb +22 -21
- data/lib/ddtrace/contrib/active_model_serializers/configuration/settings.rb +23 -0
- data/lib/ddtrace/contrib/active_model_serializers/event.rb +4 -2
- data/lib/ddtrace/contrib/active_model_serializers/events/render.rb +2 -2
- data/lib/ddtrace/contrib/active_model_serializers/events/serialize.rb +2 -2
- 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 +24 -43
- data/lib/ddtrace/contrib/active_record/configuration/settings.rb +3 -2
- data/lib/ddtrace/contrib/active_record/events/instantiation.rb +6 -7
- data/lib/ddtrace/contrib/active_record/events/sql.rb +10 -8
- data/lib/ddtrace/contrib/active_record/ext.rb +22 -0
- data/lib/ddtrace/contrib/aws/configuration/settings.rb +15 -0
- data/lib/ddtrace/contrib/aws/ext.rb +21 -0
- data/lib/ddtrace/contrib/aws/instrumentation.rb +11 -9
- data/lib/ddtrace/contrib/aws/integration.rb +32 -0
- data/lib/ddtrace/contrib/aws/patcher.rb +42 -41
- data/lib/ddtrace/contrib/concurrent_ruby/configuration/settings.rb +3 -1
- data/lib/ddtrace/contrib/concurrent_ruby/ext.rb +11 -0
- data/lib/ddtrace/contrib/concurrent_ruby/integration.rb +7 -3
- data/lib/ddtrace/contrib/concurrent_ruby/patcher.rb +1 -0
- data/lib/ddtrace/contrib/dalli/configuration/settings.rb +15 -0
- data/lib/ddtrace/contrib/dalli/ext.rb +15 -0
- data/lib/ddtrace/contrib/dalli/instrumentation.rb +3 -3
- data/lib/ddtrace/contrib/dalli/integration.rb +36 -0
- data/lib/ddtrace/contrib/dalli/patcher.rb +31 -38
- data/lib/ddtrace/contrib/dalli/quantize.rb +3 -3
- data/lib/ddtrace/contrib/delayed_job/configuration/settings.rb +15 -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 +20 -27
- data/lib/ddtrace/contrib/delayed_job/plugin.rb +7 -6
- data/lib/ddtrace/contrib/elasticsearch/configuration/settings.rb +16 -0
- data/lib/ddtrace/contrib/elasticsearch/ext.rb +18 -0
- data/lib/ddtrace/contrib/elasticsearch/integration.rb +37 -0
- data/lib/ddtrace/contrib/elasticsearch/patcher.rb +30 -39
- data/lib/ddtrace/contrib/excon/configuration/settings.rb +18 -0
- data/lib/ddtrace/contrib/excon/ext.rb +13 -0
- data/lib/ddtrace/contrib/excon/integration.rb +32 -0
- data/lib/ddtrace/contrib/excon/middleware.rb +10 -10
- data/lib/ddtrace/contrib/excon/patcher.rb +14 -30
- data/lib/ddtrace/contrib/faraday/configuration/settings.rb +23 -0
- data/lib/ddtrace/contrib/faraday/ext.rb +13 -0
- data/lib/ddtrace/contrib/faraday/integration.rb +36 -0
- data/lib/ddtrace/contrib/faraday/middleware.rb +10 -9
- data/lib/ddtrace/contrib/faraday/patcher.rb +39 -54
- data/lib/ddtrace/contrib/grape/configuration/settings.rb +16 -0
- data/lib/ddtrace/contrib/grape/endpoint.rb +10 -13
- data/lib/ddtrace/contrib/grape/ext.rb +19 -0
- data/lib/ddtrace/contrib/grape/integration.rb +36 -0
- data/lib/ddtrace/contrib/grape/patcher.rb +24 -24
- data/lib/ddtrace/contrib/graphql/configuration/settings.rb +20 -0
- data/lib/ddtrace/contrib/graphql/ext.rb +11 -0
- data/lib/ddtrace/contrib/graphql/integration.rb +38 -0
- data/lib/ddtrace/contrib/graphql/patcher.rb +33 -41
- data/lib/ddtrace/contrib/grpc/configuration/settings.rb +15 -0
- data/lib/ddtrace/contrib/grpc/datadog_interceptor/client.rb +5 -2
- data/lib/ddtrace/contrib/grpc/datadog_interceptor/server.rb +5 -2
- data/lib/ddtrace/contrib/grpc/ext.rb +14 -0
- data/lib/ddtrace/contrib/grpc/integration.rb +38 -0
- data/lib/ddtrace/contrib/grpc/patcher.rb +25 -35
- data/lib/ddtrace/contrib/http/circuit_breaker.rb +39 -0
- data/lib/ddtrace/contrib/http/configuration/settings.rb +16 -0
- data/lib/ddtrace/contrib/http/ext.rb +13 -0
- data/lib/ddtrace/contrib/http/integration.rb +32 -0
- data/lib/ddtrace/contrib/http/patcher.rb +10 -58
- data/lib/ddtrace/contrib/mongodb/configuration/settings.rb +18 -0
- data/lib/ddtrace/contrib/mongodb/ext.rb +20 -0
- data/lib/ddtrace/contrib/mongodb/integration.rb +36 -0
- data/lib/ddtrace/contrib/mongodb/patcher.rb +17 -27
- data/lib/ddtrace/contrib/mongodb/subscribers.rb +12 -11
- data/lib/ddtrace/contrib/mysql2/client.rb +8 -6
- data/lib/ddtrace/contrib/mysql2/configuration/settings.rb +15 -0
- data/lib/ddtrace/contrib/mysql2/ext.rb +15 -0
- data/lib/ddtrace/contrib/mysql2/integration.rb +32 -0
- data/lib/ddtrace/contrib/mysql2/patcher.rb +12 -22
- data/lib/ddtrace/contrib/racecar/configuration/settings.rb +23 -0
- data/lib/ddtrace/contrib/racecar/event.rb +7 -6
- data/lib/ddtrace/contrib/racecar/events/batch.rb +2 -2
- data/lib/ddtrace/contrib/racecar/events/message.rb +2 -2
- 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 +24 -41
- data/lib/ddtrace/contrib/rack/configuration/settings.rb +39 -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 +5 -2
- data/lib/ddtrace/contrib/rack/patcher.rb +22 -40
- data/lib/ddtrace/contrib/rails/action_controller.rb +10 -7
- data/lib/ddtrace/contrib/rails/action_controller_patch.rb +1 -0
- data/lib/ddtrace/contrib/rails/active_support.rb +9 -9
- data/lib/ddtrace/contrib/rails/configuration/settings.rb +26 -0
- data/lib/ddtrace/contrib/rails/core_extensions.rb +12 -15
- data/lib/ddtrace/contrib/rails/ext.rb +30 -0
- data/lib/ddtrace/contrib/rails/framework.rb +3 -2
- data/lib/ddtrace/contrib/rails/integration.rb +37 -0
- data/lib/ddtrace/contrib/rails/patcher.rb +56 -63
- data/lib/ddtrace/contrib/rails/railtie.rb +3 -10
- data/lib/ddtrace/contrib/rake/configuration/settings.rb +17 -0
- data/lib/ddtrace/contrib/rake/ext.rb +18 -0
- data/lib/ddtrace/contrib/rake/instrumentation.rb +7 -8
- data/lib/ddtrace/contrib/rake/integration.rb +36 -0
- data/lib/ddtrace/contrib/rake/patcher.rb +23 -33
- data/lib/ddtrace/contrib/redis/configuration/settings.rb +15 -0
- data/lib/ddtrace/contrib/redis/ext.rb +19 -0
- data/lib/ddtrace/contrib/redis/integration.rb +36 -0
- data/lib/ddtrace/contrib/redis/patcher.rb +21 -29
- data/lib/ddtrace/contrib/redis/tags.rb +3 -3
- data/lib/ddtrace/contrib/resque/configuration/settings.rb +16 -0
- data/lib/ddtrace/contrib/resque/ext.rb +13 -0
- data/lib/ddtrace/contrib/resque/integration.rb +37 -0
- data/lib/ddtrace/contrib/resque/patcher.rb +30 -36
- data/lib/ddtrace/contrib/resque/resque_job.rb +2 -1
- data/lib/ddtrace/contrib/rest_client/configuration/settings.rb +5 -8
- data/lib/ddtrace/contrib/rest_client/ext.rb +13 -0
- data/lib/ddtrace/contrib/rest_client/integration.rb +9 -1
- data/lib/ddtrace/contrib/rest_client/patcher.rb +1 -1
- data/lib/ddtrace/contrib/rest_client/request_patch.rb +9 -10
- data/lib/ddtrace/contrib/sequel/configuration/settings.rb +2 -0
- data/lib/ddtrace/contrib/sequel/database.rb +4 -3
- data/lib/ddtrace/contrib/sequel/dataset.rb +3 -2
- data/lib/ddtrace/contrib/sequel/ext.rb +15 -0
- data/lib/ddtrace/contrib/sequel/integration.rb +1 -3
- data/lib/ddtrace/contrib/sequel/patcher.rb +0 -1
- data/lib/ddtrace/contrib/sidekiq/configuration/settings.rb +15 -0
- data/lib/ddtrace/contrib/sidekiq/ext.rb +19 -0
- data/lib/ddtrace/contrib/sidekiq/integration.rb +36 -0
- data/lib/ddtrace/contrib/sidekiq/patcher.rb +18 -18
- data/lib/ddtrace/contrib/sidekiq/tracer.rb +10 -10
- data/lib/ddtrace/contrib/sinatra/configuration/settings.rb +27 -0
- data/lib/ddtrace/contrib/sinatra/env.rb +3 -4
- data/lib/ddtrace/contrib/sinatra/ext.rb +19 -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 +4 -34
- data/lib/ddtrace/contrib/sinatra/tracer_middleware.rb +2 -3
- data/lib/ddtrace/contrib/sucker_punch/configuration/settings.rb +15 -0
- data/lib/ddtrace/contrib/sucker_punch/ext.rb +18 -0
- data/lib/ddtrace/contrib/sucker_punch/instrumentation.rb +6 -5
- data/lib/ddtrace/contrib/sucker_punch/integration.rb +36 -0
- data/lib/ddtrace/contrib/sucker_punch/patcher.rb +29 -35
- data/lib/ddtrace/encoding.rb +21 -16
- data/lib/ddtrace/span.rb +29 -0
- data/lib/ddtrace/transport.rb +2 -2
- data/lib/ddtrace/version.rb +2 -2
- metadata +74 -6
- data/lib/ddtrace/ext/cache.rb +0 -8
- data/lib/ddtrace/ext/grpc.rb +0 -7
- data/lib/ddtrace/ext/mongo.rb +0 -12
- data/lib/ddtrace/ext/redis.rb +0 -17
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
require 'sidekiq/api'
|
|
2
2
|
|
|
3
3
|
require 'ddtrace/ext/app_types'
|
|
4
|
+
require 'ddtrace/contrib/sidekiq/ext'
|
|
4
5
|
|
|
5
6
|
module Datadog
|
|
6
7
|
module Contrib
|
|
@@ -8,9 +9,8 @@ module Datadog
|
|
|
8
9
|
# Tracer is a Sidekiq server-side middleware which traces executed jobs
|
|
9
10
|
class Tracer
|
|
10
11
|
def initialize(options = {})
|
|
11
|
-
|
|
12
|
-
@
|
|
13
|
-
@sidekiq_service = config[:service_name]
|
|
12
|
+
@tracer = options[:tracer] || Datadog.configuration[:sidekiq][:tracer]
|
|
13
|
+
@sidekiq_service = options[:service_name] || Datadog.configuration[:sidekiq][:service_name]
|
|
14
14
|
end
|
|
15
15
|
|
|
16
16
|
def call(worker, job, queue)
|
|
@@ -26,13 +26,13 @@ module Datadog
|
|
|
26
26
|
service = sidekiq_service(resource_worker(resource))
|
|
27
27
|
set_service_info(service)
|
|
28
28
|
|
|
29
|
-
@tracer.trace(
|
|
29
|
+
@tracer.trace(Ext::SPAN_JOB, service: service, span_type: Datadog::Ext::AppTypes::WORKER) do |span|
|
|
30
30
|
span.resource = resource
|
|
31
|
-
span.set_tag(
|
|
32
|
-
span.set_tag(
|
|
33
|
-
span.set_tag(
|
|
34
|
-
span.set_tag(
|
|
35
|
-
span.set_tag(
|
|
31
|
+
span.set_tag(Ext::TAG_JOB_ID, job['jid'])
|
|
32
|
+
span.set_tag(Ext::TAG_JOB_RETRY, job['retry'])
|
|
33
|
+
span.set_tag(Ext::TAG_JOB_QUEUE, job['queue'])
|
|
34
|
+
span.set_tag(Ext::TAG_JOB_WRAPPER, job['class']) if job['wrapped']
|
|
35
|
+
span.set_tag(Ext::TAG_JOB_DELAY, 1000.0 * (Time.now.utc.to_f - job['enqueued_at'].to_f))
|
|
36
36
|
|
|
37
37
|
yield
|
|
38
38
|
end
|
|
@@ -62,7 +62,7 @@ module Datadog
|
|
|
62
62
|
return if @tracer.services[service]
|
|
63
63
|
@tracer.set_service_info(
|
|
64
64
|
service,
|
|
65
|
-
|
|
65
|
+
Ext::APP,
|
|
66
66
|
Datadog::Ext::AppTypes::WORKER
|
|
67
67
|
)
|
|
68
68
|
end
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
require 'ddtrace/contrib/configuration/settings'
|
|
2
|
+
require 'ddtrace/ext/app_types'
|
|
3
|
+
require 'ddtrace/contrib/sinatra/ext'
|
|
4
|
+
|
|
5
|
+
module Datadog
|
|
6
|
+
module Contrib
|
|
7
|
+
module Sinatra
|
|
8
|
+
module Configuration
|
|
9
|
+
# Custom settings for the Sinatra integration
|
|
10
|
+
class Settings < Contrib::Configuration::Settings
|
|
11
|
+
DEFAULT_HEADERS = {
|
|
12
|
+
response: %w[Content-Type X-Request-ID]
|
|
13
|
+
}.freeze
|
|
14
|
+
|
|
15
|
+
option :distributed_tracing, default: false
|
|
16
|
+
option :headers, default: DEFAULT_HEADERS
|
|
17
|
+
option :resource_script_names, default: false
|
|
18
|
+
|
|
19
|
+
option :service_name, default: Ext::SERVICE_NAME, depends_on: [:tracer] do |value|
|
|
20
|
+
get_option(:tracer).set_service_info(value, Ext::APP, Datadog::Ext::AppTypes::WEB)
|
|
21
|
+
value
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
@@ -1,20 +1,19 @@
|
|
|
1
1
|
require 'ddtrace/ext/http'
|
|
2
|
+
require 'ddtrace/contrib/sinatra/ext'
|
|
2
3
|
|
|
3
4
|
module Datadog
|
|
4
5
|
module Contrib
|
|
5
6
|
module Sinatra
|
|
6
7
|
# Gets and sets trace information from a Rack Env
|
|
7
8
|
module Env
|
|
8
|
-
ENV_SPAN = 'datadog.sinatra_request_span'.freeze
|
|
9
|
-
|
|
10
9
|
module_function
|
|
11
10
|
|
|
12
11
|
def datadog_span(env)
|
|
13
|
-
env[
|
|
12
|
+
env[Ext::RACK_ENV_REQUEST_SPAN]
|
|
14
13
|
end
|
|
15
14
|
|
|
16
15
|
def set_datadog_span(env, span)
|
|
17
|
-
env[
|
|
16
|
+
env[Ext::RACK_ENV_REQUEST_SPAN] = span
|
|
18
17
|
end
|
|
19
18
|
|
|
20
19
|
def request_header_tags(env, headers)
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
module Datadog
|
|
2
|
+
module Contrib
|
|
3
|
+
module Sinatra
|
|
4
|
+
# Sinatra integration constants
|
|
5
|
+
module Ext
|
|
6
|
+
APP = 'sinatra'.freeze
|
|
7
|
+
SERVICE_NAME = 'sinatra'.freeze
|
|
8
|
+
|
|
9
|
+
RACK_ENV_REQUEST_SPAN = 'datadog.sinatra_request_span'.freeze
|
|
10
|
+
|
|
11
|
+
SPAN_RENDER_TEMPLATE = 'sinatra.render_template'.freeze
|
|
12
|
+
SPAN_REQUEST = 'sinatra.request'.freeze
|
|
13
|
+
|
|
14
|
+
TAG_ROUTE_PATH = 'sinatra.route.path'.freeze
|
|
15
|
+
TAG_TEMPLATE_NAME = 'sinatra.template_name'.freeze
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
require 'ddtrace/contrib/integration'
|
|
2
|
+
require 'ddtrace/contrib/sinatra/configuration/settings'
|
|
3
|
+
require 'ddtrace/contrib/sinatra/patcher'
|
|
4
|
+
|
|
5
|
+
module Datadog
|
|
6
|
+
module Contrib
|
|
7
|
+
module Sinatra
|
|
8
|
+
# Description of Sinatra integration
|
|
9
|
+
class Integration
|
|
10
|
+
include Contrib::Integration
|
|
11
|
+
|
|
12
|
+
register_as :sinatra
|
|
13
|
+
|
|
14
|
+
def self.version
|
|
15
|
+
Gem.loaded_specs['sinatra'] && Gem.loaded_specs['sinatra'].version
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def self.present?
|
|
19
|
+
super && defined?(::Sinatra)
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def self.compatible?
|
|
23
|
+
super && version >= Gem::Version.new('1.4.0')
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def default_configuration
|
|
27
|
+
Configuration::Settings.new
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def patcher
|
|
31
|
+
Patcher
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
end
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
require 'ddtrace/contrib/patcher'
|
|
2
|
+
|
|
3
|
+
module Datadog
|
|
4
|
+
module Contrib
|
|
5
|
+
module Sinatra
|
|
6
|
+
# Patcher enables patching of 'sinatra' module.
|
|
7
|
+
module Patcher
|
|
8
|
+
include Contrib::Patcher
|
|
9
|
+
|
|
10
|
+
module_function
|
|
11
|
+
|
|
12
|
+
def patched?
|
|
13
|
+
done?(:sinatra)
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def patch
|
|
17
|
+
do_once(:sinatra) do
|
|
18
|
+
begin
|
|
19
|
+
require 'ddtrace/contrib/sinatra/tracer'
|
|
20
|
+
register_tracer
|
|
21
|
+
rescue StandardError => e
|
|
22
|
+
Datadog::Tracer.log.error("Unable to apply Sinatra integration: #{e}")
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def register_tracer
|
|
28
|
+
::Sinatra.send(:register, Datadog::Contrib::Sinatra::Tracer)
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
@@ -5,41 +5,16 @@ require 'ddtrace/ext/errors'
|
|
|
5
5
|
require 'ddtrace/ext/http'
|
|
6
6
|
require 'ddtrace/propagation/http_propagator'
|
|
7
7
|
|
|
8
|
+
require 'ddtrace/contrib/sinatra/ext'
|
|
8
9
|
require 'ddtrace/contrib/sinatra/tracer_middleware'
|
|
9
10
|
require 'ddtrace/contrib/sinatra/env'
|
|
10
11
|
|
|
11
|
-
sinatra_vs = Gem::Version.new(Sinatra::VERSION)
|
|
12
|
-
sinatra_min_vs = Gem::Version.new('1.4.0')
|
|
13
|
-
if sinatra_vs < sinatra_min_vs
|
|
14
|
-
raise "sinatra version #{sinatra_vs} is not supported yet " \
|
|
15
|
-
+ "(supporting versions >=#{sinatra_min_vs})"
|
|
16
|
-
end
|
|
17
|
-
|
|
18
|
-
Datadog::Tracer.log.info("activating instrumentation for sinatra #{sinatra_vs}")
|
|
19
|
-
|
|
20
12
|
module Datadog
|
|
21
13
|
module Contrib
|
|
22
14
|
module Sinatra
|
|
23
15
|
# Datadog::Contrib::Sinatra::Tracer is a Sinatra extension which traces
|
|
24
16
|
# requests.
|
|
25
17
|
module Tracer
|
|
26
|
-
DEFAULT_HEADERS = {
|
|
27
|
-
response: %w[Content-Type X-Request-ID]
|
|
28
|
-
}.freeze
|
|
29
|
-
|
|
30
|
-
include Base
|
|
31
|
-
register_as :sinatra
|
|
32
|
-
|
|
33
|
-
option :service_name, default: 'sinatra', depends_on: [:tracer] do |value|
|
|
34
|
-
get_option(:tracer).set_service_info(value, 'sinatra', Ext::AppTypes::WEB)
|
|
35
|
-
value
|
|
36
|
-
end
|
|
37
|
-
|
|
38
|
-
option :tracer, default: Datadog.tracer
|
|
39
|
-
option :resource_script_names, default: false
|
|
40
|
-
option :distributed_tracing, default: false
|
|
41
|
-
option :headers, default: DEFAULT_HEADERS
|
|
42
|
-
|
|
43
18
|
def route(verb, action, *)
|
|
44
19
|
# Keep track of the route name when the app is instantiated for an
|
|
45
20
|
# incoming request.
|
|
@@ -62,10 +37,10 @@ module Datadog
|
|
|
62
37
|
output = ''
|
|
63
38
|
tracer = Datadog.configuration[:sinatra][:tracer]
|
|
64
39
|
if tracer.enabled
|
|
65
|
-
tracer.trace(
|
|
40
|
+
tracer.trace(Ext::SPAN_RENDER_TEMPLATE, span_type: Datadog::Ext::HTTP::TEMPLATE) do |span|
|
|
66
41
|
# If data is a string, it is a literal template and we don't
|
|
67
42
|
# want to record it.
|
|
68
|
-
span.set_tag(
|
|
43
|
+
span.set_tag(Ext::TAG_TEMPLATE_NAME, data) if data.is_a? Symbol
|
|
69
44
|
output = super
|
|
70
45
|
end
|
|
71
46
|
else
|
|
@@ -97,7 +72,7 @@ module Datadog
|
|
|
97
72
|
end
|
|
98
73
|
|
|
99
74
|
span.resource = "#{request.request_method} #{@datadog_route}"
|
|
100
|
-
span.set_tag(
|
|
75
|
+
span.set_tag(Ext::TAG_ROUTE_PATH, @datadog_route)
|
|
101
76
|
span.set_tag(Datadog::Ext::HTTP::STATUS_CODE, response.status)
|
|
102
77
|
span.set_error(env['sinatra.error']) if response.server_error?
|
|
103
78
|
end
|
|
@@ -106,8 +81,3 @@ module Datadog
|
|
|
106
81
|
end
|
|
107
82
|
end
|
|
108
83
|
end
|
|
109
|
-
|
|
110
|
-
# rubocop:disable Style/Documentation
|
|
111
|
-
module Sinatra
|
|
112
|
-
register Datadog::Contrib::Sinatra::Tracer
|
|
113
|
-
end
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
require 'ddtrace/contrib/sinatra/ext'
|
|
1
2
|
require 'ddtrace/contrib/sinatra/env'
|
|
2
3
|
require 'ddtrace/contrib/sinatra/headers'
|
|
3
4
|
|
|
@@ -6,8 +7,6 @@ module Datadog
|
|
|
6
7
|
module Sinatra
|
|
7
8
|
# Middleware used for automatically tagging configured headers and handle request span
|
|
8
9
|
class TracerMiddleware
|
|
9
|
-
REQUEST_TRACE_NAME = 'sinatra.request'.freeze
|
|
10
|
-
|
|
11
10
|
def initialize(app)
|
|
12
11
|
@app = app
|
|
13
12
|
end
|
|
@@ -21,7 +20,7 @@ module Datadog
|
|
|
21
20
|
|
|
22
21
|
# Begin the trace
|
|
23
22
|
tracer.trace(
|
|
24
|
-
|
|
23
|
+
Ext::SPAN_REQUEST,
|
|
25
24
|
service: configuration[:service_name],
|
|
26
25
|
span_type: Datadog::Ext::HTTP::TYPE
|
|
27
26
|
) do |span|
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
require 'ddtrace/contrib/configuration/settings'
|
|
2
|
+
require 'ddtrace/contrib/sucker_punch/ext'
|
|
3
|
+
|
|
4
|
+
module Datadog
|
|
5
|
+
module Contrib
|
|
6
|
+
module SuckerPunch
|
|
7
|
+
module Configuration
|
|
8
|
+
# Custom settings for the SuckerPunch integration
|
|
9
|
+
class Settings < Contrib::Configuration::Settings
|
|
10
|
+
option :service_name, default: Ext::SERVICE_NAME
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
module Datadog
|
|
2
|
+
module Contrib
|
|
3
|
+
module SuckerPunch
|
|
4
|
+
# SuckerPunch integration constants
|
|
5
|
+
module Ext
|
|
6
|
+
APP = 'sucker_punch'.freeze
|
|
7
|
+
SERVICE_NAME = 'sucker_punch'.freeze
|
|
8
|
+
|
|
9
|
+
SPAN_PERFORM = 'sucker_punch.perform'.freeze
|
|
10
|
+
SPAN_PERFORM_ASYNC = 'sucker_punch.perform_async'.freeze
|
|
11
|
+
SPAN_PERFORM_IN = 'sucker_punch.perform_in'.freeze
|
|
12
|
+
|
|
13
|
+
TAG_PERFORM_IN = 'sucker_punch.perform_in'.freeze
|
|
14
|
+
TAG_QUEUE = 'sucker_punch.queue'.freeze
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
require 'sucker_punch'
|
|
2
|
+
require 'ddtrace/contrib/sucker_punch/ext'
|
|
2
3
|
|
|
3
4
|
module Datadog
|
|
4
5
|
module Contrib
|
|
@@ -15,7 +16,7 @@ module Datadog
|
|
|
15
16
|
pin = Datadog::Pin.get_from(::SuckerPunch)
|
|
16
17
|
pin.tracer.provider.context = Datadog::Context.new
|
|
17
18
|
|
|
18
|
-
__with_instrumentation(
|
|
19
|
+
__with_instrumentation(Ext::SPAN_PERFORM) do |span|
|
|
19
20
|
span.resource = "PROCESS #{self}"
|
|
20
21
|
__run_perform_without_datadog(*args)
|
|
21
22
|
end
|
|
@@ -25,7 +26,7 @@ module Datadog
|
|
|
25
26
|
|
|
26
27
|
alias_method :__perform_async, :perform_async
|
|
27
28
|
def perform_async(*args)
|
|
28
|
-
__with_instrumentation(
|
|
29
|
+
__with_instrumentation(Ext::SPAN_PERFORM_ASYNC) do |span|
|
|
29
30
|
span.resource = "ENQUEUE #{self}"
|
|
30
31
|
__perform_async(*args)
|
|
31
32
|
end
|
|
@@ -33,9 +34,9 @@ module Datadog
|
|
|
33
34
|
|
|
34
35
|
alias_method :__perform_in, :perform_in
|
|
35
36
|
def perform_in(interval, *args)
|
|
36
|
-
__with_instrumentation(
|
|
37
|
+
__with_instrumentation(Ext::SPAN_PERFORM_IN) do |span|
|
|
37
38
|
span.resource = "ENQUEUE #{self}"
|
|
38
|
-
span.set_tag(
|
|
39
|
+
span.set_tag(Ext::TAG_PERFORM_IN, interval)
|
|
39
40
|
__perform_in(interval, *args)
|
|
40
41
|
end
|
|
41
42
|
end
|
|
@@ -48,7 +49,7 @@ module Datadog
|
|
|
48
49
|
pin.tracer.trace(name) do |span|
|
|
49
50
|
span.service = pin.service
|
|
50
51
|
span.span_type = pin.app_type
|
|
51
|
-
span.set_tag(
|
|
52
|
+
span.set_tag(Ext::TAG_QUEUE, to_s)
|
|
52
53
|
yield span
|
|
53
54
|
end
|
|
54
55
|
end
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
require 'ddtrace/contrib/integration'
|
|
2
|
+
require 'ddtrace/contrib/sucker_punch/configuration/settings'
|
|
3
|
+
require 'ddtrace/contrib/sucker_punch/patcher'
|
|
4
|
+
|
|
5
|
+
module Datadog
|
|
6
|
+
module Contrib
|
|
7
|
+
module SuckerPunch
|
|
8
|
+
# Description of SuckerPunch integration
|
|
9
|
+
class Integration
|
|
10
|
+
include Contrib::Integration
|
|
11
|
+
|
|
12
|
+
register_as :sucker_punch, auto_patch: true
|
|
13
|
+
|
|
14
|
+
def self.version
|
|
15
|
+
Gem.loaded_specs['sucker_punch'] && Gem.loaded_specs['sucker_punch'].version
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def self.present?
|
|
19
|
+
super && defined?(::SuckerPunch)
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def self.compatible?
|
|
23
|
+
super && Gem::Version.new(::SuckerPunch::VERSION) >= Gem::Version.new('2.0.0')
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def default_configuration
|
|
27
|
+
Configuration::Settings.new
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def patcher
|
|
31
|
+
Patcher
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
end
|
|
@@ -1,53 +1,47 @@
|
|
|
1
|
+
require 'ddtrace/contrib/patcher'
|
|
2
|
+
require 'ddtrace/ext/app_types'
|
|
3
|
+
require 'ddtrace/contrib/sucker_punch/ext'
|
|
4
|
+
|
|
1
5
|
module Datadog
|
|
2
6
|
module Contrib
|
|
3
7
|
module SuckerPunch
|
|
4
|
-
|
|
5
|
-
COMPATIBLE_WITH = Gem::Version.new('2.0.0')
|
|
6
|
-
|
|
7
|
-
# Responsible for hooking the instrumentation into `sucker_punch`
|
|
8
|
+
# Patcher enables patching of 'sucker_punch' module.
|
|
8
9
|
module Patcher
|
|
9
|
-
include
|
|
10
|
-
register_as :sucker_punch, auto_patch: true
|
|
11
|
-
option :service_name, default: SERVICE
|
|
12
|
-
|
|
13
|
-
@patched = false
|
|
10
|
+
include Contrib::Patcher
|
|
14
11
|
|
|
15
12
|
module_function
|
|
16
13
|
|
|
17
|
-
def patch
|
|
18
|
-
return @patched if patched? || !compatible?
|
|
19
|
-
|
|
20
|
-
require 'ddtrace/ext/app_types'
|
|
21
|
-
require_relative 'exception_handler'
|
|
22
|
-
require_relative 'instrumentation'
|
|
23
|
-
|
|
24
|
-
add_pin!
|
|
25
|
-
ExceptionHandler.patch!
|
|
26
|
-
Instrumentation.patch!
|
|
27
|
-
|
|
28
|
-
@patched = true
|
|
29
|
-
rescue => e
|
|
30
|
-
Datadog::Tracer.log.error("Unable to apply SuckerPunch integration: #{e}")
|
|
31
|
-
@patched
|
|
32
|
-
end
|
|
33
|
-
|
|
34
14
|
def patched?
|
|
35
|
-
|
|
15
|
+
done?(:sucker_punch)
|
|
36
16
|
end
|
|
37
17
|
|
|
38
|
-
def
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
18
|
+
def patch
|
|
19
|
+
do_once(:sucker_punch) do
|
|
20
|
+
begin
|
|
21
|
+
require 'ddtrace/contrib/sucker_punch/exception_handler'
|
|
22
|
+
require 'ddtrace/contrib/sucker_punch/instrumentation'
|
|
23
|
+
|
|
24
|
+
add_pin!
|
|
25
|
+
ExceptionHandler.patch!
|
|
26
|
+
Instrumentation.patch!
|
|
27
|
+
rescue StandardError => e
|
|
28
|
+
Datadog::Tracer.log.error("Unable to apply SuckerPunch integration: #{e}")
|
|
29
|
+
end
|
|
30
|
+
end
|
|
42
31
|
end
|
|
43
32
|
|
|
44
33
|
def add_pin!
|
|
45
|
-
Pin.new(
|
|
46
|
-
|
|
47
|
-
|
|
34
|
+
Pin.new(
|
|
35
|
+
get_option(:service_name),
|
|
36
|
+
app: Ext::APP,
|
|
37
|
+
app_type: Datadog::Ext::AppTypes::WORKER,
|
|
38
|
+
tracer: get_option(:tracer)
|
|
39
|
+
).onto(::SuckerPunch)
|
|
48
40
|
end
|
|
49
41
|
|
|
50
|
-
|
|
42
|
+
def get_option(option)
|
|
43
|
+
Datadog.configuration[:sucker_punch].get_option(option)
|
|
44
|
+
end
|
|
51
45
|
end
|
|
52
46
|
end
|
|
53
47
|
end
|