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,44 +1,28 @@
|
|
|
1
|
-
require 'ddtrace/
|
|
1
|
+
require 'ddtrace/contrib/patcher'
|
|
2
2
|
|
|
3
3
|
module Datadog
|
|
4
4
|
module Contrib
|
|
5
5
|
module Excon
|
|
6
|
-
#
|
|
6
|
+
# Patcher enables patching of 'excon' module.
|
|
7
7
|
module Patcher
|
|
8
|
-
include
|
|
9
|
-
|
|
10
|
-
DEFAULT_SERVICE = 'excon'.freeze
|
|
11
|
-
|
|
12
|
-
register_as :excon
|
|
13
|
-
option :tracer, default: Datadog.tracer
|
|
14
|
-
option :service_name, default: DEFAULT_SERVICE
|
|
15
|
-
option :distributed_tracing, default: false
|
|
16
|
-
option :split_by_domain, default: false
|
|
17
|
-
option :error_handler, default: nil
|
|
18
|
-
|
|
19
|
-
@patched = false
|
|
8
|
+
include Contrib::Patcher
|
|
20
9
|
|
|
21
10
|
module_function
|
|
22
11
|
|
|
23
|
-
def patch
|
|
24
|
-
return @patched if patched? || !compatible?
|
|
25
|
-
|
|
26
|
-
require 'ddtrace/contrib/excon/middleware'
|
|
27
|
-
|
|
28
|
-
add_middleware
|
|
29
|
-
|
|
30
|
-
@patched = true
|
|
31
|
-
rescue => e
|
|
32
|
-
Tracer.log.error("Unable to apply Excon integration: #{e}")
|
|
33
|
-
@patched
|
|
34
|
-
end
|
|
35
|
-
|
|
36
12
|
def patched?
|
|
37
|
-
|
|
13
|
+
done?(:excon)
|
|
38
14
|
end
|
|
39
15
|
|
|
40
|
-
def
|
|
41
|
-
|
|
16
|
+
def patch
|
|
17
|
+
do_once(:excon) do
|
|
18
|
+
begin
|
|
19
|
+
require 'ddtrace/contrib/excon/middleware'
|
|
20
|
+
|
|
21
|
+
add_middleware
|
|
22
|
+
rescue StandardError => e
|
|
23
|
+
Datadog::Tracer.log.error("Unable to apply Excon integration: #{e}")
|
|
24
|
+
end
|
|
25
|
+
end
|
|
42
26
|
end
|
|
43
27
|
|
|
44
28
|
def add_middleware
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
require 'ddtrace/contrib/configuration/settings'
|
|
2
|
+
require 'ddtrace/ext/http'
|
|
3
|
+
require 'ddtrace/contrib/faraday/ext'
|
|
4
|
+
|
|
5
|
+
module Datadog
|
|
6
|
+
module Contrib
|
|
7
|
+
module Faraday
|
|
8
|
+
module Configuration
|
|
9
|
+
# Custom settings for the Faraday integration
|
|
10
|
+
class Settings < Contrib::Configuration::Settings
|
|
11
|
+
DEFAULT_ERROR_HANDLER = lambda do |env|
|
|
12
|
+
Datadog::Ext::HTTP::ERROR_RANGE.cover?(env[:status])
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
option :distributed_tracing, default: false
|
|
16
|
+
option :error_handler, default: DEFAULT_ERROR_HANDLER
|
|
17
|
+
option :service_name, default: Ext::SERVICE_NAME
|
|
18
|
+
option :split_by_domain, default: false
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
require 'ddtrace/contrib/integration'
|
|
2
|
+
require 'ddtrace/contrib/faraday/configuration/settings'
|
|
3
|
+
require 'ddtrace/contrib/faraday/patcher'
|
|
4
|
+
|
|
5
|
+
module Datadog
|
|
6
|
+
module Contrib
|
|
7
|
+
module Faraday
|
|
8
|
+
# Description of Faraday integration
|
|
9
|
+
class Integration
|
|
10
|
+
include Contrib::Integration
|
|
11
|
+
|
|
12
|
+
register_as :faraday, auto_patch: true
|
|
13
|
+
|
|
14
|
+
def self.version
|
|
15
|
+
Gem.loaded_specs['faraday'] && Gem.loaded_specs['faraday'].version
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def self.present?
|
|
19
|
+
super && defined?(::Faraday)
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def self.compatible?
|
|
23
|
+
super && version < Gem::Version.new('1.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
|
|
@@ -2,23 +2,24 @@ require 'faraday'
|
|
|
2
2
|
require 'ddtrace/ext/http'
|
|
3
3
|
require 'ddtrace/ext/net'
|
|
4
4
|
require 'ddtrace/propagation/http_propagator'
|
|
5
|
+
require 'ddtrace/contrib/faraday/ext'
|
|
5
6
|
|
|
6
7
|
module Datadog
|
|
7
8
|
module Contrib
|
|
8
9
|
module Faraday
|
|
9
10
|
# Middleware implements a faraday-middleware for ddtrace instrumentation
|
|
10
11
|
class Middleware < ::Faraday::Middleware
|
|
11
|
-
include Ext::DistributedTracing
|
|
12
|
+
include Datadog::Ext::DistributedTracing
|
|
12
13
|
|
|
13
14
|
def initialize(app, options = {})
|
|
14
15
|
super(app)
|
|
15
|
-
@options = Datadog.configuration[:faraday].merge(options)
|
|
16
|
+
@options = Datadog.configuration[:faraday].to_h.merge(options)
|
|
16
17
|
@tracer = Pin.get_from(::Faraday).tracer
|
|
17
18
|
setup_service!
|
|
18
19
|
end
|
|
19
20
|
|
|
20
21
|
def call(env)
|
|
21
|
-
tracer.trace(
|
|
22
|
+
tracer.trace(Ext::SPAN_REQUEST) do |span|
|
|
22
23
|
annotate!(span, env)
|
|
23
24
|
propagate!(span, env) if options[:distributed_tracing] && tracer.enabled
|
|
24
25
|
app.call(env).on_complete { |resp| handle_response(span, resp) }
|
|
@@ -32,11 +33,11 @@ module Datadog
|
|
|
32
33
|
def annotate!(span, env)
|
|
33
34
|
span.resource = env[:method].to_s.upcase
|
|
34
35
|
span.service = service_name(env)
|
|
35
|
-
span.span_type = Ext::HTTP::TYPE
|
|
36
|
-
span.set_tag(Ext::HTTP::URL, env[:url].path)
|
|
37
|
-
span.set_tag(Ext::HTTP::METHOD, env[:method].to_s.upcase)
|
|
38
|
-
span.set_tag(Ext::NET::TARGET_HOST, env[:url].host)
|
|
39
|
-
span.set_tag(Ext::NET::TARGET_PORT, env[:url].port)
|
|
36
|
+
span.span_type = Datadog::Ext::HTTP::TYPE
|
|
37
|
+
span.set_tag(Datadog::Ext::HTTP::URL, env[:url].path)
|
|
38
|
+
span.set_tag(Datadog::Ext::HTTP::METHOD, env[:method].to_s.upcase)
|
|
39
|
+
span.set_tag(Datadog::Ext::NET::TARGET_HOST, env[:url].host)
|
|
40
|
+
span.set_tag(Datadog::Ext::NET::TARGET_PORT, env[:url].port)
|
|
40
41
|
end
|
|
41
42
|
|
|
42
43
|
def handle_response(span, env)
|
|
@@ -44,7 +45,7 @@ module Datadog
|
|
|
44
45
|
span.set_error(["Error #{env[:status]}", env[:body]])
|
|
45
46
|
end
|
|
46
47
|
|
|
47
|
-
span.set_tag(Ext::HTTP::STATUS_CODE, env[:status])
|
|
48
|
+
span.set_tag(Datadog::Ext::HTTP::STATUS_CODE, env[:status])
|
|
48
49
|
end
|
|
49
50
|
|
|
50
51
|
def propagate!(span, env)
|
|
@@ -1,71 +1,56 @@
|
|
|
1
|
+
require 'ddtrace/contrib/patcher'
|
|
2
|
+
require 'ddtrace/ext/app_types'
|
|
3
|
+
require 'ddtrace/contrib/faraday/ext'
|
|
4
|
+
|
|
1
5
|
module Datadog
|
|
2
6
|
module Contrib
|
|
3
7
|
module Faraday
|
|
4
|
-
|
|
5
|
-
SERVICE = 'faraday'.freeze
|
|
6
|
-
NAME = 'faraday.request'.freeze
|
|
7
|
-
|
|
8
|
-
# Responsible for hooking the instrumentation into faraday
|
|
8
|
+
# Patcher enables patching of 'faraday' module.
|
|
9
9
|
module Patcher
|
|
10
|
-
include
|
|
10
|
+
include Contrib::Patcher
|
|
11
11
|
|
|
12
|
-
|
|
12
|
+
module_function
|
|
13
13
|
|
|
14
|
-
|
|
15
|
-
|
|
14
|
+
def patched?
|
|
15
|
+
done?(:faraday)
|
|
16
16
|
end
|
|
17
17
|
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
@patched = false
|
|
24
|
-
|
|
25
|
-
class << self
|
|
26
|
-
def patch
|
|
27
|
-
return @patched if patched? || !compatible?
|
|
28
|
-
|
|
29
|
-
require 'ddtrace/ext/app_types'
|
|
30
|
-
require 'ddtrace/contrib/faraday/middleware'
|
|
31
|
-
|
|
32
|
-
add_pin
|
|
33
|
-
add_middleware
|
|
34
|
-
|
|
35
|
-
@patched = true
|
|
36
|
-
rescue => e
|
|
37
|
-
Tracer.log.error("Unable to apply Faraday integration: #{e}")
|
|
38
|
-
@patched
|
|
39
|
-
end
|
|
40
|
-
|
|
41
|
-
def patched?
|
|
42
|
-
@patched
|
|
43
|
-
end
|
|
18
|
+
def patch
|
|
19
|
+
do_once(:faraday) do
|
|
20
|
+
begin
|
|
21
|
+
require 'ddtrace/contrib/faraday/middleware'
|
|
44
22
|
|
|
45
|
-
|
|
46
|
-
|
|
23
|
+
add_pin
|
|
24
|
+
add_middleware
|
|
25
|
+
rescue StandardError => e
|
|
26
|
+
Datadog::Tracer.log.error("Unable to apply Faraday integration: #{e}")
|
|
27
|
+
end
|
|
47
28
|
end
|
|
29
|
+
end
|
|
48
30
|
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
31
|
+
def add_pin
|
|
32
|
+
Pin.new(
|
|
33
|
+
get_option(:service_name),
|
|
34
|
+
app: Ext::APP,
|
|
35
|
+
app_type: Datadog::Ext::AppTypes::WEB,
|
|
36
|
+
tracer: get_option(:tracer)
|
|
37
|
+
).onto(::Faraday)
|
|
38
|
+
end
|
|
53
39
|
|
|
54
|
-
|
|
55
|
-
|
|
40
|
+
def add_middleware
|
|
41
|
+
::Faraday::Middleware.register_middleware(ddtrace: Middleware)
|
|
42
|
+
end
|
|
56
43
|
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
end
|
|
44
|
+
def register_service(name)
|
|
45
|
+
get_option(:tracer).set_service_info(
|
|
46
|
+
name,
|
|
47
|
+
Ext::APP,
|
|
48
|
+
Datadog::Ext::AppTypes::WEB
|
|
49
|
+
)
|
|
50
|
+
end
|
|
65
51
|
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
end
|
|
52
|
+
def get_option(option)
|
|
53
|
+
Datadog.configuration[:faraday].get_option(option)
|
|
69
54
|
end
|
|
70
55
|
end
|
|
71
56
|
end
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
require 'ddtrace/contrib/configuration/settings'
|
|
2
|
+
require 'ddtrace/ext/http'
|
|
3
|
+
require 'ddtrace/contrib/grape/ext'
|
|
4
|
+
|
|
5
|
+
module Datadog
|
|
6
|
+
module Contrib
|
|
7
|
+
module Grape
|
|
8
|
+
module Configuration
|
|
9
|
+
# Custom settings for the Grape integration
|
|
10
|
+
class Settings < Contrib::Configuration::Settings
|
|
11
|
+
option :service_name, default: Ext::SERVICE_NAME
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
require 'ddtrace/ext/http'
|
|
2
2
|
require 'ddtrace/ext/errors'
|
|
3
|
-
require 'ddtrace/contrib/rack/
|
|
3
|
+
require 'ddtrace/contrib/rack/ext'
|
|
4
4
|
|
|
5
5
|
module Datadog
|
|
6
6
|
module Contrib
|
|
@@ -13,9 +13,6 @@ module Datadog
|
|
|
13
13
|
KEY_RENDER = 'datadog_grape_endpoint_render'.freeze
|
|
14
14
|
|
|
15
15
|
def self.subscribe
|
|
16
|
-
# Grape is instrumented only if it's available
|
|
17
|
-
return unless defined?(::Grape) && defined?(::ActiveSupport::Notifications)
|
|
18
|
-
|
|
19
16
|
# subscribe when a Grape endpoint is hit
|
|
20
17
|
::ActiveSupport::Notifications.subscribe('endpoint_run.grape.start_process') do |*args|
|
|
21
18
|
endpoint_start_process(*args)
|
|
@@ -45,7 +42,7 @@ module Datadog
|
|
|
45
42
|
tracer = pin.tracer
|
|
46
43
|
service = pin.service
|
|
47
44
|
type = Datadog::Ext::HTTP::TYPE
|
|
48
|
-
tracer.trace(
|
|
45
|
+
tracer.trace(Ext::SPAN_ENDPOINT_RUN, service: service, span_type: type)
|
|
49
46
|
|
|
50
47
|
Thread.current[KEY_RUN] = true
|
|
51
48
|
rescue StandardError => e
|
|
@@ -61,7 +58,7 @@ module Datadog
|
|
|
61
58
|
return unless pin && pin.enabled?
|
|
62
59
|
|
|
63
60
|
tracer = pin.tracer
|
|
64
|
-
span = tracer.active_span
|
|
61
|
+
span = tracer.active_span
|
|
65
62
|
return unless span
|
|
66
63
|
|
|
67
64
|
begin
|
|
@@ -72,8 +69,8 @@ module Datadog
|
|
|
72
69
|
span.resource = resource
|
|
73
70
|
|
|
74
71
|
# set the request span resource if it's a `rack.request` span
|
|
75
|
-
request_span = payload[:env][Datadog::Contrib::Rack::
|
|
76
|
-
if !request_span.nil? && request_span.name ==
|
|
72
|
+
request_span = payload[:env][Datadog::Contrib::Rack::Ext::RACK_ENV_REQUEST_SPAN]
|
|
73
|
+
if !request_span.nil? && request_span.name == Datadog::Contrib::Rack::Ext::SPAN_REQUEST
|
|
77
74
|
request_span.resource = resource
|
|
78
75
|
end
|
|
79
76
|
|
|
@@ -81,8 +78,8 @@ module Datadog
|
|
|
81
78
|
span.set_error(payload[:exception_object]) unless payload[:exception_object].nil?
|
|
82
79
|
|
|
83
80
|
# override the current span with this notification values
|
|
84
|
-
span.set_tag(
|
|
85
|
-
span.set_tag(
|
|
81
|
+
span.set_tag(Ext::TAG_ROUTE_ENDPOINT, api_view)
|
|
82
|
+
span.set_tag(Ext::TAG_ROUTE_PATH, path)
|
|
86
83
|
ensure
|
|
87
84
|
span.start_time = start
|
|
88
85
|
span.finish(finish)
|
|
@@ -102,7 +99,7 @@ module Datadog
|
|
|
102
99
|
tracer = pin.tracer
|
|
103
100
|
service = pin.service
|
|
104
101
|
type = Datadog::Ext::HTTP::TYPE
|
|
105
|
-
tracer.trace(
|
|
102
|
+
tracer.trace(Ext::SPAN_ENDPOINT_RENDER, service: service, span_type: type)
|
|
106
103
|
|
|
107
104
|
Thread.current[KEY_RENDER] = true
|
|
108
105
|
rescue StandardError => e
|
|
@@ -118,7 +115,7 @@ module Datadog
|
|
|
118
115
|
return unless pin && pin.enabled?
|
|
119
116
|
|
|
120
117
|
tracer = pin.tracer
|
|
121
|
-
span = tracer.active_span
|
|
118
|
+
span = tracer.active_span
|
|
122
119
|
return unless span
|
|
123
120
|
|
|
124
121
|
# catch thrown exceptions
|
|
@@ -151,7 +148,7 @@ module Datadog
|
|
|
151
148
|
begin
|
|
152
149
|
# catch thrown exceptions
|
|
153
150
|
span.set_error(payload[:exception_object]) unless payload[:exception_object].nil?
|
|
154
|
-
span.set_tag(
|
|
151
|
+
span.set_tag(Ext::TAG_FILTER_TYPE, type.to_s)
|
|
155
152
|
ensure
|
|
156
153
|
span.start_time = start
|
|
157
154
|
span.finish(finish)
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
module Datadog
|
|
2
|
+
module Contrib
|
|
3
|
+
module Grape
|
|
4
|
+
# Grape integration constants
|
|
5
|
+
module Ext
|
|
6
|
+
APP = 'grape'.freeze
|
|
7
|
+
SERVICE_NAME = 'grape'.freeze
|
|
8
|
+
|
|
9
|
+
SPAN_ENDPOINT_RENDER = 'grape.endpoint_render'.freeze
|
|
10
|
+
SPAN_ENDPOINT_RUN = 'grape.endpoint_run'.freeze
|
|
11
|
+
SPAN_ENDPOINT_RUN_FILTERS = 'grape.endpoint_run_filters'.freeze
|
|
12
|
+
|
|
13
|
+
TAG_FILTER_TYPE = 'grape.filter.type'.freeze
|
|
14
|
+
TAG_ROUTE_ENDPOINT = 'grape.route.endpoint'.freeze
|
|
15
|
+
TAG_ROUTE_PATH = 'grape.route.path'.freeze
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
require 'ddtrace/contrib/integration'
|
|
2
|
+
require 'ddtrace/contrib/grape/configuration/settings'
|
|
3
|
+
require 'ddtrace/contrib/grape/patcher'
|
|
4
|
+
|
|
5
|
+
module Datadog
|
|
6
|
+
module Contrib
|
|
7
|
+
module Grape
|
|
8
|
+
# Description of Grape integration
|
|
9
|
+
class Integration
|
|
10
|
+
include Contrib::Integration
|
|
11
|
+
|
|
12
|
+
register_as :grape, auto_patch: true
|
|
13
|
+
|
|
14
|
+
def self.version
|
|
15
|
+
Gem.loaded_specs['grape'] && Gem.loaded_specs['grape'].version
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def self.present?
|
|
19
|
+
super && defined?(::Grape)
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def self.compatible?
|
|
23
|
+
super && defined?(::ActiveSupport::Notifications)
|
|
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
|