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,44 +1,28 @@
1
- require 'ddtrace/ext/app_types'
1
+ require 'ddtrace/contrib/patcher'
2
2
 
3
3
  module Datadog
4
4
  module Contrib
5
5
  module Excon
6
- # Responsible for hooking the instrumentation into Excon
6
+ # Patcher enables patching of 'excon' module.
7
7
  module Patcher
8
- include Base
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
- @patched
13
+ done?(:excon)
38
14
  end
39
15
 
40
- def compatible?
41
- defined?(::Excon)
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,13 @@
1
+ module Datadog
2
+ module Contrib
3
+ module Faraday
4
+ # Faraday integration constants
5
+ module Ext
6
+ APP = 'faraday'.freeze
7
+ SERVICE_NAME = 'faraday'.freeze
8
+
9
+ SPAN_REQUEST = 'faraday.request'.freeze
10
+ end
11
+ end
12
+ end
13
+ 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(NAME) do |span|
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
- COMPATIBLE_UNTIL = Gem::Version.new('1.0.0')
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 Base
10
+ include Contrib::Patcher
11
11
 
12
- register_as :faraday, auto_patch: true
12
+ module_function
13
13
 
14
- DEFAULT_ERROR_HANDLER = lambda do |env|
15
- Ext::HTTP::ERROR_RANGE.cover?(env[:status])
14
+ def patched?
15
+ done?(:faraday)
16
16
  end
17
17
 
18
- option :service_name, default: SERVICE
19
- option :distributed_tracing, default: false
20
- option :error_handler, default: DEFAULT_ERROR_HANDLER
21
- option :tracer, default: Datadog.tracer
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
- def register_service(name)
46
- get_option(:tracer).set_service_info(name, 'faraday', Ext::AppTypes::WEB)
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
- private
50
-
51
- def compatible?
52
- return unless defined?(::Faraday::VERSION)
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
- Gem::Version.new(::Faraday::VERSION) < COMPATIBLE_UNTIL
55
- end
40
+ def add_middleware
41
+ ::Faraday::Middleware.register_middleware(ddtrace: Middleware)
42
+ end
56
43
 
57
- def add_pin
58
- Pin.new(
59
- get_option(:service_name),
60
- app: 'faraday',
61
- app_type: Ext::AppTypes::WEB,
62
- tracer: get_option(:tracer)
63
- ).onto(::Faraday)
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
- def add_middleware
67
- ::Faraday::Middleware.register_middleware(ddtrace: Middleware)
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/middlewares'
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('grape.endpoint_run', service: service, span_type: type)
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::TraceMiddleware::RACK_REQUEST_SPAN]
76
- if !request_span.nil? && request_span.name == 'rack.request'
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('grape.route.endpoint', api_view)
85
- span.set_tag('grape.route.path', path)
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('grape.endpoint_render', service: service, span_type: type)
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('grape.filter.type', type.to_s)
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