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.
Files changed (156) hide show
  1. checksums.yaml +4 -4
  2. data/Appraisals +3 -3
  3. data/CHANGELOG.md +24 -2
  4. data/Rakefile +14 -28
  5. data/docker-compose.yml +1 -0
  6. data/docs/GettingStarted.md +302 -263
  7. data/lib/ddtrace.rb +22 -21
  8. data/lib/ddtrace/contrib/active_model_serializers/configuration/settings.rb +23 -0
  9. data/lib/ddtrace/contrib/active_model_serializers/event.rb +4 -2
  10. data/lib/ddtrace/contrib/active_model_serializers/events/render.rb +2 -2
  11. data/lib/ddtrace/contrib/active_model_serializers/events/serialize.rb +2 -2
  12. data/lib/ddtrace/contrib/active_model_serializers/ext.rb +17 -0
  13. data/lib/ddtrace/contrib/active_model_serializers/integration.rb +39 -0
  14. data/lib/ddtrace/contrib/active_model_serializers/patcher.rb +24 -43
  15. data/lib/ddtrace/contrib/active_record/configuration/settings.rb +3 -2
  16. data/lib/ddtrace/contrib/active_record/events/instantiation.rb +6 -7
  17. data/lib/ddtrace/contrib/active_record/events/sql.rb +10 -8
  18. data/lib/ddtrace/contrib/active_record/ext.rb +22 -0
  19. data/lib/ddtrace/contrib/aws/configuration/settings.rb +15 -0
  20. data/lib/ddtrace/contrib/aws/ext.rb +21 -0
  21. data/lib/ddtrace/contrib/aws/instrumentation.rb +11 -9
  22. data/lib/ddtrace/contrib/aws/integration.rb +32 -0
  23. data/lib/ddtrace/contrib/aws/patcher.rb +42 -41
  24. data/lib/ddtrace/contrib/concurrent_ruby/configuration/settings.rb +3 -1
  25. data/lib/ddtrace/contrib/concurrent_ruby/ext.rb +11 -0
  26. data/lib/ddtrace/contrib/concurrent_ruby/integration.rb +7 -3
  27. data/lib/ddtrace/contrib/concurrent_ruby/patcher.rb +1 -0
  28. data/lib/ddtrace/contrib/dalli/configuration/settings.rb +15 -0
  29. data/lib/ddtrace/contrib/dalli/ext.rb +15 -0
  30. data/lib/ddtrace/contrib/dalli/instrumentation.rb +3 -3
  31. data/lib/ddtrace/contrib/dalli/integration.rb +36 -0
  32. data/lib/ddtrace/contrib/dalli/patcher.rb +31 -38
  33. data/lib/ddtrace/contrib/dalli/quantize.rb +3 -3
  34. data/lib/ddtrace/contrib/delayed_job/configuration/settings.rb +15 -0
  35. data/lib/ddtrace/contrib/delayed_job/ext.rb +18 -0
  36. data/lib/ddtrace/contrib/delayed_job/integration.rb +32 -0
  37. data/lib/ddtrace/contrib/delayed_job/patcher.rb +20 -27
  38. data/lib/ddtrace/contrib/delayed_job/plugin.rb +7 -6
  39. data/lib/ddtrace/contrib/elasticsearch/configuration/settings.rb +16 -0
  40. data/lib/ddtrace/contrib/elasticsearch/ext.rb +18 -0
  41. data/lib/ddtrace/contrib/elasticsearch/integration.rb +37 -0
  42. data/lib/ddtrace/contrib/elasticsearch/patcher.rb +30 -39
  43. data/lib/ddtrace/contrib/excon/configuration/settings.rb +18 -0
  44. data/lib/ddtrace/contrib/excon/ext.rb +13 -0
  45. data/lib/ddtrace/contrib/excon/integration.rb +32 -0
  46. data/lib/ddtrace/contrib/excon/middleware.rb +10 -10
  47. data/lib/ddtrace/contrib/excon/patcher.rb +14 -30
  48. data/lib/ddtrace/contrib/faraday/configuration/settings.rb +23 -0
  49. data/lib/ddtrace/contrib/faraday/ext.rb +13 -0
  50. data/lib/ddtrace/contrib/faraday/integration.rb +36 -0
  51. data/lib/ddtrace/contrib/faraday/middleware.rb +10 -9
  52. data/lib/ddtrace/contrib/faraday/patcher.rb +39 -54
  53. data/lib/ddtrace/contrib/grape/configuration/settings.rb +16 -0
  54. data/lib/ddtrace/contrib/grape/endpoint.rb +10 -13
  55. data/lib/ddtrace/contrib/grape/ext.rb +19 -0
  56. data/lib/ddtrace/contrib/grape/integration.rb +36 -0
  57. data/lib/ddtrace/contrib/grape/patcher.rb +24 -24
  58. data/lib/ddtrace/contrib/graphql/configuration/settings.rb +20 -0
  59. data/lib/ddtrace/contrib/graphql/ext.rb +11 -0
  60. data/lib/ddtrace/contrib/graphql/integration.rb +38 -0
  61. data/lib/ddtrace/contrib/graphql/patcher.rb +33 -41
  62. data/lib/ddtrace/contrib/grpc/configuration/settings.rb +15 -0
  63. data/lib/ddtrace/contrib/grpc/datadog_interceptor/client.rb +5 -2
  64. data/lib/ddtrace/contrib/grpc/datadog_interceptor/server.rb +5 -2
  65. data/lib/ddtrace/contrib/grpc/ext.rb +14 -0
  66. data/lib/ddtrace/contrib/grpc/integration.rb +38 -0
  67. data/lib/ddtrace/contrib/grpc/patcher.rb +25 -35
  68. data/lib/ddtrace/contrib/http/circuit_breaker.rb +39 -0
  69. data/lib/ddtrace/contrib/http/configuration/settings.rb +16 -0
  70. data/lib/ddtrace/contrib/http/ext.rb +13 -0
  71. data/lib/ddtrace/contrib/http/integration.rb +32 -0
  72. data/lib/ddtrace/contrib/http/patcher.rb +10 -58
  73. data/lib/ddtrace/contrib/mongodb/configuration/settings.rb +18 -0
  74. data/lib/ddtrace/contrib/mongodb/ext.rb +20 -0
  75. data/lib/ddtrace/contrib/mongodb/integration.rb +36 -0
  76. data/lib/ddtrace/contrib/mongodb/patcher.rb +17 -27
  77. data/lib/ddtrace/contrib/mongodb/subscribers.rb +12 -11
  78. data/lib/ddtrace/contrib/mysql2/client.rb +8 -6
  79. data/lib/ddtrace/contrib/mysql2/configuration/settings.rb +15 -0
  80. data/lib/ddtrace/contrib/mysql2/ext.rb +15 -0
  81. data/lib/ddtrace/contrib/mysql2/integration.rb +32 -0
  82. data/lib/ddtrace/contrib/mysql2/patcher.rb +12 -22
  83. data/lib/ddtrace/contrib/racecar/configuration/settings.rb +23 -0
  84. data/lib/ddtrace/contrib/racecar/event.rb +7 -6
  85. data/lib/ddtrace/contrib/racecar/events/batch.rb +2 -2
  86. data/lib/ddtrace/contrib/racecar/events/message.rb +2 -2
  87. data/lib/ddtrace/contrib/racecar/ext.rb +21 -0
  88. data/lib/ddtrace/contrib/racecar/integration.rb +36 -0
  89. data/lib/ddtrace/contrib/racecar/patcher.rb +24 -41
  90. data/lib/ddtrace/contrib/rack/configuration/settings.rb +39 -0
  91. data/lib/ddtrace/contrib/rack/ext.rb +18 -0
  92. data/lib/ddtrace/contrib/rack/integration.rb +32 -0
  93. data/lib/ddtrace/contrib/rack/middlewares.rb +5 -2
  94. data/lib/ddtrace/contrib/rack/patcher.rb +22 -40
  95. data/lib/ddtrace/contrib/rails/action_controller.rb +10 -7
  96. data/lib/ddtrace/contrib/rails/action_controller_patch.rb +1 -0
  97. data/lib/ddtrace/contrib/rails/active_support.rb +9 -9
  98. data/lib/ddtrace/contrib/rails/configuration/settings.rb +26 -0
  99. data/lib/ddtrace/contrib/rails/core_extensions.rb +12 -15
  100. data/lib/ddtrace/contrib/rails/ext.rb +30 -0
  101. data/lib/ddtrace/contrib/rails/framework.rb +3 -2
  102. data/lib/ddtrace/contrib/rails/integration.rb +37 -0
  103. data/lib/ddtrace/contrib/rails/patcher.rb +56 -63
  104. data/lib/ddtrace/contrib/rails/railtie.rb +3 -10
  105. data/lib/ddtrace/contrib/rake/configuration/settings.rb +17 -0
  106. data/lib/ddtrace/contrib/rake/ext.rb +18 -0
  107. data/lib/ddtrace/contrib/rake/instrumentation.rb +7 -8
  108. data/lib/ddtrace/contrib/rake/integration.rb +36 -0
  109. data/lib/ddtrace/contrib/rake/patcher.rb +23 -33
  110. data/lib/ddtrace/contrib/redis/configuration/settings.rb +15 -0
  111. data/lib/ddtrace/contrib/redis/ext.rb +19 -0
  112. data/lib/ddtrace/contrib/redis/integration.rb +36 -0
  113. data/lib/ddtrace/contrib/redis/patcher.rb +21 -29
  114. data/lib/ddtrace/contrib/redis/tags.rb +3 -3
  115. data/lib/ddtrace/contrib/resque/configuration/settings.rb +16 -0
  116. data/lib/ddtrace/contrib/resque/ext.rb +13 -0
  117. data/lib/ddtrace/contrib/resque/integration.rb +37 -0
  118. data/lib/ddtrace/contrib/resque/patcher.rb +30 -36
  119. data/lib/ddtrace/contrib/resque/resque_job.rb +2 -1
  120. data/lib/ddtrace/contrib/rest_client/configuration/settings.rb +5 -8
  121. data/lib/ddtrace/contrib/rest_client/ext.rb +13 -0
  122. data/lib/ddtrace/contrib/rest_client/integration.rb +9 -1
  123. data/lib/ddtrace/contrib/rest_client/patcher.rb +1 -1
  124. data/lib/ddtrace/contrib/rest_client/request_patch.rb +9 -10
  125. data/lib/ddtrace/contrib/sequel/configuration/settings.rb +2 -0
  126. data/lib/ddtrace/contrib/sequel/database.rb +4 -3
  127. data/lib/ddtrace/contrib/sequel/dataset.rb +3 -2
  128. data/lib/ddtrace/contrib/sequel/ext.rb +15 -0
  129. data/lib/ddtrace/contrib/sequel/integration.rb +1 -3
  130. data/lib/ddtrace/contrib/sequel/patcher.rb +0 -1
  131. data/lib/ddtrace/contrib/sidekiq/configuration/settings.rb +15 -0
  132. data/lib/ddtrace/contrib/sidekiq/ext.rb +19 -0
  133. data/lib/ddtrace/contrib/sidekiq/integration.rb +36 -0
  134. data/lib/ddtrace/contrib/sidekiq/patcher.rb +18 -18
  135. data/lib/ddtrace/contrib/sidekiq/tracer.rb +10 -10
  136. data/lib/ddtrace/contrib/sinatra/configuration/settings.rb +27 -0
  137. data/lib/ddtrace/contrib/sinatra/env.rb +3 -4
  138. data/lib/ddtrace/contrib/sinatra/ext.rb +19 -0
  139. data/lib/ddtrace/contrib/sinatra/integration.rb +36 -0
  140. data/lib/ddtrace/contrib/sinatra/patcher.rb +33 -0
  141. data/lib/ddtrace/contrib/sinatra/tracer.rb +4 -34
  142. data/lib/ddtrace/contrib/sinatra/tracer_middleware.rb +2 -3
  143. data/lib/ddtrace/contrib/sucker_punch/configuration/settings.rb +15 -0
  144. data/lib/ddtrace/contrib/sucker_punch/ext.rb +18 -0
  145. data/lib/ddtrace/contrib/sucker_punch/instrumentation.rb +6 -5
  146. data/lib/ddtrace/contrib/sucker_punch/integration.rb +36 -0
  147. data/lib/ddtrace/contrib/sucker_punch/patcher.rb +29 -35
  148. data/lib/ddtrace/encoding.rb +21 -16
  149. data/lib/ddtrace/span.rb +29 -0
  150. data/lib/ddtrace/transport.rb +2 -2
  151. data/lib/ddtrace/version.rb +2 -2
  152. metadata +74 -6
  153. data/lib/ddtrace/ext/cache.rb +0 -8
  154. data/lib/ddtrace/ext/grpc.rb +0 -7
  155. data/lib/ddtrace/ext/mongo.rb +0 -12
  156. 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
- SERVICE = 'grape'.freeze
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 Base
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
- @patched
15
+ done?(:grape)
19
16
  end
20
17
 
21
18
  def patch
22
- if !@patched && defined?(::Grape)
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
- @patched = true
30
- # patch all endpoints
31
- patch_endpoint_run()
32
- patch_endpoint_render()
23
+ # Patch all endpoints
24
+ patch_endpoint_run
25
+ patch_endpoint_render
33
26
 
34
- # attach a PIN object globally and set the service once
35
- service = get_option(:service_name)
36
- pin = Datadog::Pin.new(service, app: 'grape', app_type: Datadog::Ext::AppTypes::WEB)
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
- # subscribe to ActiveSupport events
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,11 @@
1
+ module Datadog
2
+ module Contrib
3
+ module GraphQL
4
+ # GraphQL integration constants
5
+ module Ext
6
+ APP = 'ruby-graphql'.freeze
7
+ SERVICE_NAME = 'ruby-graphql'.freeze
8
+ end
9
+ end
10
+ end
11
+ 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/ext/app_types'
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 Base
10
- register_as :graphql
8
+ include Contrib::Patcher
11
9
 
12
- option :tracer, default: Datadog.tracer
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
- class << self
20
- def patch
21
- return patched? if patched? || !compatible? || get_option(:schemas).nil?
12
+ def patched?
13
+ done?(:graphql)
14
+ end
22
15
 
23
- get_option(:schemas).each { |s| patch_schema!(s) }
16
+ def patch
17
+ return if get_option(:schemas).nil?
24
18
 
25
- @patched = true
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
- def patch_schema!(schema)
29
- tracer = get_option(:tracer)
30
- service_name = get_option(:service_name)
31
-
32
- if schema.respond_to?(:use)
33
- schema.use(
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
- def patched?
50
- return @patched if defined?(@patched)
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::GRPC::TYPE,
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('grpc.client', options) do |span|
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::GRPC::TYPE,
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('grpc.service', options) do |span|
24
+ tracer.trace(Ext::SPAN_SERVICE, options) do |span|
22
25
  annotate!(span, metadata)
23
26
 
24
27
  yield
@@ -0,0 +1,14 @@
1
+ module Datadog
2
+ module Contrib
3
+ module GRPC
4
+ # gRPC integration constants
5
+ module Ext
6
+ APP = 'grpc'.freeze
7
+ SERVICE_NAME = 'grpc'.freeze
8
+
9
+ SPAN_CLIENT = 'grpc.client'.freeze
10
+ SPAN_SERVICE = 'grpc.service'.freeze
11
+ end
12
+ end
13
+ end
14
+ end
@@ -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
- # requirements should be kept minimal as Patcher is a shared requirement.
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 Base
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 patch
20
- return false unless compatible?
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 patched?
43
- @patched
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: 'grpc',
50
- app_type: 'grpc',
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(Datadog::Contrib::GRPC::InterceptWithDatadog)
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