ddtrace 0.16.1 → 0.17.0

Sign up to get free protection for your applications and to get access to all the features.
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