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,48 +1,44 @@
|
|
|
1
|
+
require 'ddtrace/contrib/patcher'
|
|
2
|
+
require 'ddtrace/ext/app_types'
|
|
3
|
+
require 'ddtrace/contrib/grape/ext'
|
|
4
|
+
|
|
1
5
|
module Datadog
|
|
2
6
|
module Contrib
|
|
3
7
|
module Grape
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
# Patcher that introduces more instrumentation for Grape endpoints, so that
|
|
7
|
-
# new signals are executed at the beginning of each step (filters, render and run)
|
|
8
|
+
# Patcher enables patching of 'grape' module.
|
|
8
9
|
module Patcher
|
|
9
|
-
include
|
|
10
|
-
register_as :grape, 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
14
|
def patched?
|
|
18
|
-
|
|
15
|
+
done?(:grape)
|
|
19
16
|
end
|
|
20
17
|
|
|
21
18
|
def patch
|
|
22
|
-
|
|
19
|
+
do_once(:grape) do
|
|
23
20
|
begin
|
|
24
|
-
# do not require these by default, but only when actually patching
|
|
25
|
-
require 'ddtrace'
|
|
26
|
-
require 'ddtrace/ext/app_types'
|
|
27
21
|
require 'ddtrace/contrib/grape/endpoint'
|
|
28
22
|
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
patch_endpoint_render()
|
|
23
|
+
# Patch all endpoints
|
|
24
|
+
patch_endpoint_run
|
|
25
|
+
patch_endpoint_render
|
|
33
26
|
|
|
34
|
-
#
|
|
35
|
-
|
|
36
|
-
|
|
27
|
+
# Attach a Pin object globally and set the service once
|
|
28
|
+
pin = Datadog::Pin.new(
|
|
29
|
+
get_option(:service_name),
|
|
30
|
+
app: Ext::APP,
|
|
31
|
+
app_type: Datadog::Ext::AppTypes::WEB,
|
|
32
|
+
tracer: get_option(:tracer)
|
|
33
|
+
)
|
|
37
34
|
pin.onto(::Grape)
|
|
38
35
|
|
|
39
|
-
#
|
|
40
|
-
Datadog::Contrib::Grape::Endpoint.subscribe
|
|
36
|
+
# Subscribe to ActiveSupport events
|
|
37
|
+
Datadog::Contrib::Grape::Endpoint.subscribe
|
|
41
38
|
rescue StandardError => e
|
|
42
39
|
Datadog::Tracer.log.error("Unable to apply Grape integration: #{e}")
|
|
43
40
|
end
|
|
44
41
|
end
|
|
45
|
-
@patched
|
|
46
42
|
end
|
|
47
43
|
|
|
48
44
|
def patch_endpoint_run
|
|
@@ -69,6 +65,10 @@ module Datadog
|
|
|
69
65
|
end
|
|
70
66
|
end
|
|
71
67
|
end
|
|
68
|
+
|
|
69
|
+
def get_option(option)
|
|
70
|
+
Datadog.configuration[:grape].get_option(option)
|
|
71
|
+
end
|
|
72
72
|
end
|
|
73
73
|
end
|
|
74
74
|
end
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
require 'ddtrace/contrib/configuration/settings'
|
|
2
|
+
require 'ddtrace/ext/app_types'
|
|
3
|
+
require 'ddtrace/contrib/graphql/ext'
|
|
4
|
+
|
|
5
|
+
module Datadog
|
|
6
|
+
module Contrib
|
|
7
|
+
module GraphQL
|
|
8
|
+
module Configuration
|
|
9
|
+
# Custom settings for the GraphQL integration
|
|
10
|
+
class Settings < Contrib::Configuration::Settings
|
|
11
|
+
option :schemas
|
|
12
|
+
option :service_name, default: Ext::SERVICE_NAME, depends_on: [:tracer] do |value|
|
|
13
|
+
get_option(:tracer).set_service_info(value, Ext::APP, Datadog::Ext::AppTypes::WEB)
|
|
14
|
+
value
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
require 'ddtrace/contrib/integration'
|
|
2
|
+
require 'ddtrace/contrib/graphql/configuration/settings'
|
|
3
|
+
require 'ddtrace/contrib/graphql/patcher'
|
|
4
|
+
|
|
5
|
+
module Datadog
|
|
6
|
+
module Contrib
|
|
7
|
+
module GraphQL
|
|
8
|
+
# Description of GraphQL integration
|
|
9
|
+
class Integration
|
|
10
|
+
include Contrib::Integration
|
|
11
|
+
|
|
12
|
+
register_as :graphql, auto_patch: true
|
|
13
|
+
|
|
14
|
+
def self.version
|
|
15
|
+
Gem.loaded_specs['graphql'] && Gem.loaded_specs['graphql'].version
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def self.present?
|
|
19
|
+
super && defined?(::GraphQL)
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def self.compatible?
|
|
23
|
+
super \
|
|
24
|
+
&& defined?(::GraphQL::Tracing::DataDogTracing) \
|
|
25
|
+
&& version >= Gem::Version.new('1.7.9')
|
|
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
|
|
@@ -1,63 +1,55 @@
|
|
|
1
|
-
require 'ddtrace/
|
|
2
|
-
require 'ddtrace/ext/http'
|
|
1
|
+
require 'ddtrace/contrib/patcher'
|
|
3
2
|
|
|
4
3
|
module Datadog
|
|
5
4
|
module Contrib
|
|
6
5
|
module GraphQL
|
|
7
6
|
# Provides instrumentation for `graphql` through the GraphQL tracing framework
|
|
8
7
|
module Patcher
|
|
9
|
-
include
|
|
10
|
-
register_as :graphql
|
|
8
|
+
include Contrib::Patcher
|
|
11
9
|
|
|
12
|
-
|
|
13
|
-
option :service_name, default: 'ruby-graphql', depends_on: [:tracer] do |value|
|
|
14
|
-
get_option(:tracer).set_service_info(value, 'ruby-graphql', Ext::AppTypes::WEB)
|
|
15
|
-
value
|
|
16
|
-
end
|
|
17
|
-
option :schemas
|
|
10
|
+
module_function
|
|
18
11
|
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
12
|
+
def patched?
|
|
13
|
+
done?(:graphql)
|
|
14
|
+
end
|
|
22
15
|
|
|
23
|
-
|
|
16
|
+
def patch
|
|
17
|
+
return if get_option(:schemas).nil?
|
|
24
18
|
|
|
25
|
-
|
|
19
|
+
do_once(:graphql) do
|
|
20
|
+
begin
|
|
21
|
+
require 'ddtrace/ext/app_types'
|
|
22
|
+
require 'ddtrace/ext/http'
|
|
23
|
+
get_option(:schemas).each { |s| patch_schema!(s) }
|
|
24
|
+
rescue StandardError => e
|
|
25
|
+
Datadog::Tracer.log.error("Unable to apply GraphQL integration: #{e}")
|
|
26
|
+
end
|
|
26
27
|
end
|
|
28
|
+
end
|
|
27
29
|
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
30
|
+
def patch_schema!(schema)
|
|
31
|
+
tracer = get_option(:tracer)
|
|
32
|
+
service_name = get_option(:service_name)
|
|
33
|
+
|
|
34
|
+
if schema.respond_to?(:use)
|
|
35
|
+
schema.use(
|
|
36
|
+
::GraphQL::Tracing::DataDogTracing,
|
|
37
|
+
tracer: tracer,
|
|
38
|
+
service: service_name
|
|
39
|
+
)
|
|
40
|
+
else
|
|
41
|
+
schema.define do
|
|
42
|
+
use(
|
|
34
43
|
::GraphQL::Tracing::DataDogTracing,
|
|
35
44
|
tracer: tracer,
|
|
36
45
|
service: service_name
|
|
37
46
|
)
|
|
38
|
-
else
|
|
39
|
-
schema.define do
|
|
40
|
-
use(
|
|
41
|
-
::GraphQL::Tracing::DataDogTracing,
|
|
42
|
-
tracer: tracer,
|
|
43
|
-
service: service_name
|
|
44
|
-
)
|
|
45
|
-
end
|
|
46
47
|
end
|
|
47
48
|
end
|
|
49
|
+
end
|
|
48
50
|
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
@patched = false
|
|
52
|
-
end
|
|
53
|
-
|
|
54
|
-
private
|
|
55
|
-
|
|
56
|
-
def compatible?
|
|
57
|
-
defined?(::GraphQL) \
|
|
58
|
-
&& defined?(::GraphQL::Tracing::DataDogTracing) \
|
|
59
|
-
&& Gem.loaded_specs['graphql'].version >= Gem::Version.new('1.7.9')
|
|
60
|
-
end
|
|
51
|
+
def get_option(option)
|
|
52
|
+
Datadog.configuration[:graphql].get_option(option)
|
|
61
53
|
end
|
|
62
54
|
end
|
|
63
55
|
end
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
require 'ddtrace/contrib/configuration/settings'
|
|
2
|
+
require 'ddtrace/contrib/grpc/ext'
|
|
3
|
+
|
|
4
|
+
module Datadog
|
|
5
|
+
module Contrib
|
|
6
|
+
module GRPC
|
|
7
|
+
module Configuration
|
|
8
|
+
# Custom settings for the gRPC 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
|
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
require 'ddtrace/ext/http'
|
|
2
|
+
require 'ddtrace/contrib/grpc/ext'
|
|
3
|
+
|
|
1
4
|
module Datadog
|
|
2
5
|
module Contrib
|
|
3
6
|
module GRPC
|
|
@@ -11,12 +14,12 @@ module Datadog
|
|
|
11
14
|
keywords[:metadata] ||= {}
|
|
12
15
|
|
|
13
16
|
options = {
|
|
14
|
-
span_type: Datadog::Ext::
|
|
17
|
+
span_type: Datadog::Ext::HTTP::TYPE,
|
|
15
18
|
service: datadog_pin.service_name,
|
|
16
19
|
resource: format_resource(keywords[:method])
|
|
17
20
|
}
|
|
18
21
|
|
|
19
|
-
tracer.trace(
|
|
22
|
+
tracer.trace(Ext::SPAN_CLIENT, options) do |span|
|
|
20
23
|
annotate!(span, keywords[:metadata])
|
|
21
24
|
|
|
22
25
|
yield
|
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
require 'ddtrace/ext/http'
|
|
2
|
+
require 'ddtrace/contrib/grpc/ext'
|
|
3
|
+
|
|
1
4
|
module Datadog
|
|
2
5
|
module Contrib
|
|
3
6
|
module GRPC
|
|
@@ -10,7 +13,7 @@ module Datadog
|
|
|
10
13
|
class Server < Base
|
|
11
14
|
def trace(keywords)
|
|
12
15
|
options = {
|
|
13
|
-
span_type: Datadog::Ext::
|
|
16
|
+
span_type: Datadog::Ext::HTTP::TYPE,
|
|
14
17
|
service: datadog_pin.service_name,
|
|
15
18
|
resource: format_resource(keywords[:method])
|
|
16
19
|
}
|
|
@@ -18,7 +21,7 @@ module Datadog
|
|
|
18
21
|
|
|
19
22
|
set_distributed_context!(tracer, metadata)
|
|
20
23
|
|
|
21
|
-
tracer.trace(
|
|
24
|
+
tracer.trace(Ext::SPAN_SERVICE, options) do |span|
|
|
22
25
|
annotate!(span, metadata)
|
|
23
26
|
|
|
24
27
|
yield
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
require 'ddtrace/contrib/integration'
|
|
2
|
+
require 'ddtrace/contrib/grpc/configuration/settings'
|
|
3
|
+
require 'ddtrace/contrib/grpc/patcher'
|
|
4
|
+
|
|
5
|
+
module Datadog
|
|
6
|
+
module Contrib
|
|
7
|
+
module GRPC
|
|
8
|
+
# Description of gRPC integration
|
|
9
|
+
class Integration
|
|
10
|
+
include Contrib::Integration
|
|
11
|
+
|
|
12
|
+
register_as :grpc, auto_patch: true
|
|
13
|
+
|
|
14
|
+
def self.version
|
|
15
|
+
Gem.loaded_specs['grpc'] && Gem.loaded_specs['grpc'].version
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def self.present?
|
|
19
|
+
super && defined?(::GRPC)
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def self.compatible?
|
|
23
|
+
super \
|
|
24
|
+
&& Gem::Version.new(RUBY_VERSION) >= Gem::Version.new('2.0') \
|
|
25
|
+
&& version >= Gem::Version.new('0.10.0')
|
|
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
|
|
@@ -1,60 +1,50 @@
|
|
|
1
|
-
|
|
1
|
+
require 'ddtrace/contrib/patcher'
|
|
2
|
+
require 'ddtrace/contrib/grpc/ext'
|
|
2
3
|
|
|
3
4
|
module Datadog
|
|
4
5
|
module Contrib
|
|
5
6
|
module GRPC
|
|
6
|
-
SERVICE = 'grpc'.freeze
|
|
7
|
-
|
|
8
7
|
# Patcher enables patching of 'grpc' module.
|
|
9
8
|
module Patcher
|
|
10
|
-
include
|
|
11
|
-
register_as :grpc, auto_patch: true
|
|
12
|
-
option :tracer, default: Datadog.tracer
|
|
13
|
-
option :service_name, default: SERVICE
|
|
14
|
-
|
|
15
|
-
@patched = false
|
|
9
|
+
include Contrib::Patcher
|
|
16
10
|
|
|
17
11
|
module_function
|
|
18
12
|
|
|
19
|
-
def
|
|
20
|
-
|
|
21
|
-
return @patched if @patched
|
|
22
|
-
|
|
23
|
-
require 'ddtrace/ext/grpc'
|
|
24
|
-
require 'ddtrace/propagation/grpc_propagator'
|
|
25
|
-
require 'ddtrace/contrib/grpc/datadog_interceptor'
|
|
26
|
-
require 'ddtrace/contrib/grpc/intercept_with_datadog'
|
|
27
|
-
|
|
28
|
-
add_pin
|
|
29
|
-
prepend_interceptor
|
|
30
|
-
|
|
31
|
-
@patched = true
|
|
32
|
-
rescue StandardError => e
|
|
33
|
-
Datadog::Tracer.log.error("Unable to apply gRPC integration: #{e}")
|
|
34
|
-
ensure
|
|
35
|
-
@patched
|
|
36
|
-
end
|
|
37
|
-
|
|
38
|
-
def compatible?
|
|
39
|
-
defined?(::GRPC::VERSION) && Gem::Version.new(::GRPC::VERSION) >= Gem::Version.new('0.10.0')
|
|
13
|
+
def patched?
|
|
14
|
+
done?(:grpc)
|
|
40
15
|
end
|
|
41
16
|
|
|
42
|
-
def
|
|
43
|
-
|
|
17
|
+
def patch
|
|
18
|
+
do_once(:grpc) do
|
|
19
|
+
begin
|
|
20
|
+
require 'ddtrace/propagation/grpc_propagator'
|
|
21
|
+
require 'ddtrace/contrib/grpc/datadog_interceptor'
|
|
22
|
+
require 'ddtrace/contrib/grpc/intercept_with_datadog'
|
|
23
|
+
|
|
24
|
+
add_pin
|
|
25
|
+
prepend_interceptor
|
|
26
|
+
rescue StandardError => e
|
|
27
|
+
Datadog::Tracer.log.error("Unable to apply gRPC integration: #{e}")
|
|
28
|
+
end
|
|
29
|
+
end
|
|
44
30
|
end
|
|
45
31
|
|
|
46
32
|
def add_pin
|
|
47
33
|
Pin.new(
|
|
48
34
|
get_option(:service_name),
|
|
49
|
-
app:
|
|
50
|
-
app_type:
|
|
35
|
+
app: Ext::APP,
|
|
36
|
+
app_type: Datadog::Ext::AppTypes::WEB,
|
|
51
37
|
tracer: get_option(:tracer)
|
|
52
38
|
).onto(::GRPC)
|
|
53
39
|
end
|
|
54
40
|
|
|
55
41
|
def prepend_interceptor
|
|
56
42
|
::GRPC::InterceptionContext
|
|
57
|
-
.prepend
|
|
43
|
+
.send(:prepend, Datadog::Contrib::GRPC::InterceptWithDatadog)
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
def get_option(option)
|
|
47
|
+
Datadog.configuration[:grpc].get_option(option)
|
|
58
48
|
end
|
|
59
49
|
end
|
|
60
50
|
end
|