ddtrace 0.12.1 → 0.13.0.beta1

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 (82) hide show
  1. checksums.yaml +4 -4
  2. data/.env +11 -21
  3. data/.rubocop.yml +1 -4
  4. data/Appraisals +75 -439
  5. data/CHANGELOG.md +16 -19
  6. data/Rakefile +89 -259
  7. data/circle.yml +69 -0
  8. data/ddtrace.gemspec +6 -6
  9. data/docker-compose.yml +37 -222
  10. data/docs/GettingStarted.md +260 -19
  11. data/gemfiles/contrib.gemfile +5 -0
  12. data/gemfiles/contrib_old.gemfile +4 -1
  13. data/gemfiles/rails30_postgres.gemfile +0 -1
  14. data/gemfiles/rails30_postgres_sidekiq.gemfile +0 -1
  15. data/gemfiles/rails32_mysql2.gemfile +0 -1
  16. data/gemfiles/rails32_postgres.gemfile +0 -1
  17. data/gemfiles/rails32_postgres_redis.gemfile +0 -1
  18. data/gemfiles/rails32_postgres_sidekiq.gemfile +0 -1
  19. data/gemfiles/rails5_mysql2.gemfile +1 -1
  20. data/gemfiles/rails5_postgres.gemfile +1 -1
  21. data/gemfiles/rails5_postgres_redis.gemfile +1 -1
  22. data/gemfiles/rails5_postgres_sidekiq.gemfile +1 -1
  23. data/lib/ddtrace.rb +6 -0
  24. data/lib/ddtrace/configuration.rb +2 -2
  25. data/lib/ddtrace/contrib/active_model_serializers/event.rb +57 -0
  26. data/lib/ddtrace/contrib/active_model_serializers/events.rb +30 -0
  27. data/lib/ddtrace/contrib/active_model_serializers/events/render.rb +32 -0
  28. data/lib/ddtrace/contrib/active_model_serializers/events/serialize.rb +35 -0
  29. data/lib/ddtrace/contrib/active_model_serializers/patcher.rb +62 -0
  30. data/lib/ddtrace/contrib/active_record/event.rb +30 -0
  31. data/lib/ddtrace/contrib/active_record/events.rb +30 -0
  32. data/lib/ddtrace/contrib/active_record/events/instantiation.rb +51 -0
  33. data/lib/ddtrace/contrib/active_record/events/sql.rb +48 -0
  34. data/lib/ddtrace/contrib/active_record/patcher.rb +3 -73
  35. data/lib/ddtrace/contrib/active_record/utils.rb +1 -15
  36. data/lib/ddtrace/contrib/active_support/notifications/event.rb +62 -0
  37. data/lib/ddtrace/contrib/aws/instrumentation.rb +2 -2
  38. data/lib/ddtrace/contrib/elasticsearch/patcher.rb +2 -2
  39. data/lib/ddtrace/contrib/elasticsearch/quantize.rb +8 -40
  40. data/lib/ddtrace/contrib/excon/middleware.rb +140 -0
  41. data/lib/ddtrace/contrib/excon/patcher.rb +50 -0
  42. data/lib/ddtrace/contrib/grpc/datadog_interceptor.rb +65 -0
  43. data/lib/ddtrace/contrib/grpc/datadog_interceptor/client.rb +49 -0
  44. data/lib/ddtrace/contrib/grpc/datadog_interceptor/server.rb +66 -0
  45. data/lib/ddtrace/contrib/grpc/intercept_with_datadog.rb +49 -0
  46. data/lib/ddtrace/contrib/grpc/patcher.rb +62 -0
  47. data/lib/ddtrace/contrib/http/patcher.rb +16 -18
  48. data/lib/ddtrace/contrib/racecar/event.rb +61 -0
  49. data/lib/ddtrace/contrib/racecar/events.rb +30 -0
  50. data/lib/ddtrace/contrib/racecar/events/batch.rb +27 -0
  51. data/lib/ddtrace/contrib/racecar/events/message.rb +27 -0
  52. data/lib/ddtrace/contrib/racecar/patcher.rb +6 -52
  53. data/lib/ddtrace/contrib/rack/middlewares.rb +65 -11
  54. data/lib/ddtrace/contrib/rack/patcher.rb +16 -0
  55. data/lib/ddtrace/contrib/rack/request_queue.rb +34 -0
  56. data/lib/ddtrace/contrib/rails/action_view.rb +65 -0
  57. data/lib/ddtrace/contrib/rails/active_support.rb +8 -9
  58. data/lib/ddtrace/contrib/rails/core_extensions.rb +115 -74
  59. data/lib/ddtrace/contrib/rake/instrumentation.rb +70 -0
  60. data/lib/ddtrace/contrib/rake/patcher.rb +53 -0
  61. data/lib/ddtrace/contrib/sequel/database.rb +58 -0
  62. data/lib/ddtrace/contrib/sequel/dataset.rb +59 -0
  63. data/lib/ddtrace/contrib/sequel/patcher.rb +56 -0
  64. data/lib/ddtrace/contrib/sequel/utils.rb +28 -0
  65. data/lib/ddtrace/ext/distributed.rb +5 -0
  66. data/lib/ddtrace/ext/grpc.rb +7 -0
  67. data/lib/ddtrace/ext/http.rb +35 -5
  68. data/lib/ddtrace/propagation/grpc_propagator.rb +54 -0
  69. data/lib/ddtrace/quantization/hash.rb +89 -0
  70. data/lib/ddtrace/tracer.rb +1 -4
  71. data/lib/ddtrace/utils.rb +4 -10
  72. data/lib/ddtrace/utils/database.rb +21 -0
  73. data/lib/ddtrace/version.rb +3 -3
  74. metadata +38 -13
  75. data/.circleci/config.yml +0 -456
  76. data/.circleci/images/primary/Dockerfile-1.9.3 +0 -69
  77. data/.circleci/images/primary/Dockerfile-2.0.0 +0 -69
  78. data/.circleci/images/primary/Dockerfile-2.1.10 +0 -69
  79. data/.circleci/images/primary/Dockerfile-2.2.10 +0 -69
  80. data/.circleci/images/primary/Dockerfile-2.3.7 +0 -73
  81. data/.circleci/images/primary/Dockerfile-2.4.4 +0 -73
  82. data/lib/ddtrace/contrib/rails/action_controller_patch.rb +0 -77
@@ -3,10 +3,13 @@
3
3
  source "https://rubygems.org"
4
4
 
5
5
  gem "pry-nav", git: "https://github.com/nixme/pry-nav.git", branch: "master"
6
+ gem "active_model_serializers", ">= 0.10.0"
6
7
  gem "elasticsearch-transport"
8
+ gem "excon"
7
9
  gem "mongo", "< 2.5"
8
10
  gem "graphql"
9
11
  gem "grape"
12
+ gem "grpc"
10
13
  gem "rack"
11
14
  gem "rack-test"
12
15
  gem "redis", "< 4.0"
@@ -14,10 +17,12 @@ gem "hiredis"
14
17
  gem "sinatra"
15
18
  gem "sqlite3"
16
19
  gem "activerecord", "< 5.1.5"
20
+ gem "sequel"
17
21
  gem "sidekiq"
18
22
  gem "aws-sdk"
19
23
  gem "sucker_punch"
20
24
  gem "dalli"
25
+ gem "rake"
21
26
  gem "resque", "< 2.0"
22
27
  gem "racecar", ">= 0.3.5"
23
28
  gem "mysql2", "< 0.5", platform: :ruby
@@ -3,20 +3,23 @@
3
3
  source "https://rubygems.org"
4
4
 
5
5
  gem "pry-nav", git: "https://github.com/nixme/pry-nav.git", branch: "master"
6
+ gem "active_model_serializers", "~> 0.9.0"
6
7
  gem "elasticsearch-transport"
8
+ gem "excon"
7
9
  gem "mongo", "< 2.5"
8
10
  gem "redis", "< 4.0"
9
11
  gem "hiredis"
10
12
  gem "rack", "1.4.7"
11
13
  gem "rack-test", "0.7.0"
12
- gem "rack-cache", "1.7.1"
13
14
  gem "sinatra", "1.4.5"
14
15
  gem "sqlite3"
16
+ gem "sequel", "~> 4.0", "< 4.37"
15
17
  gem "activerecord", "3.2.22.5"
16
18
  gem "sidekiq", "4.0.0"
17
19
  gem "aws-sdk", "~> 2.0"
18
20
  gem "sucker_punch"
19
21
  gem "dalli"
22
+ gem "rake", "< 12.3"
20
23
  gem "resque", "< 2.0"
21
24
  gem "mysql2", "0.3.21", platform: :ruby
22
25
  gem "activerecord-mysql-adapter", platform: :ruby
@@ -7,6 +7,5 @@ gem "test-unit"
7
7
  gem "rails", "3.0.20"
8
8
  gem "pg", "0.15.1", platform: :ruby
9
9
  gem "activerecord-jdbcpostgresql-adapter", platform: :jruby
10
- gem "rack-cache", "1.7.1"
11
10
 
12
11
  gemspec path: "../"
@@ -8,6 +8,5 @@ gem "rails", "3.0.20"
8
8
  gem "pg", "0.15.1", platform: :ruby
9
9
  gem "activerecord-jdbcpostgresql-adapter", platform: :jruby
10
10
  gem "sidekiq", "4.0.0"
11
- gem "rack-cache", "1.7.1"
12
11
 
13
12
  gemspec path: "../"
@@ -8,6 +8,5 @@ gem "rails", "3.2.22.5"
8
8
  gem "mysql2", "0.3.21", platform: :ruby
9
9
  gem "activerecord-mysql-adapter", platform: :ruby
10
10
  gem "activerecord-jdbcmysql-adapter", platform: :jruby
11
- gem "rack-cache", "1.7.1"
12
11
 
13
12
  gemspec path: "../"
@@ -7,6 +7,5 @@ gem "test-unit"
7
7
  gem "rails", "3.2.22.5"
8
8
  gem "pg", "0.15.1", platform: :ruby
9
9
  gem "activerecord-jdbcpostgresql-adapter", platform: :jruby
10
- gem "rack-cache", "1.7.1"
11
10
 
12
11
  gemspec path: "../"
@@ -9,6 +9,5 @@ gem "pg", "0.15.1", platform: :ruby
9
9
  gem "activerecord-jdbcpostgresql-adapter", platform: :jruby
10
10
  gem "redis-rails"
11
11
  gem "redis", "< 4.0"
12
- gem "rack-cache", "1.7.1"
13
12
 
14
13
  gemspec path: "../"
@@ -8,6 +8,5 @@ gem "rails", "3.2.22.5"
8
8
  gem "pg", "0.15.1", platform: :ruby
9
9
  gem "activerecord-jdbcpostgresql-adapter", platform: :jruby
10
10
  gem "sidekiq", "4.0.0"
11
- gem "rack-cache", "1.7.1"
12
11
 
13
12
  gemspec path: "../"
@@ -3,7 +3,7 @@
3
3
  source "https://rubygems.org"
4
4
 
5
5
  gem "pry-nav", git: "https://github.com/nixme/pry-nav.git", branch: "master"
6
- gem "rails", "~> 5.1.6"
6
+ gem "rails", "5.1.5"
7
7
  gem "mysql2", "< 0.5", platform: :ruby
8
8
 
9
9
  gemspec path: "../"
@@ -3,7 +3,7 @@
3
3
  source "https://rubygems.org"
4
4
 
5
5
  gem "pry-nav", git: "https://github.com/nixme/pry-nav.git", branch: "master"
6
- gem "rails", "~> 5.1.6"
6
+ gem "rails", "5.1.5"
7
7
  gem "pg", "< 1.0", platform: :ruby
8
8
 
9
9
  gemspec path: "../"
@@ -3,7 +3,7 @@
3
3
  source "https://rubygems.org"
4
4
 
5
5
  gem "pry-nav", git: "https://github.com/nixme/pry-nav.git", branch: "master"
6
- gem "rails", "~> 5.1.6"
6
+ gem "rails", "5.1.5"
7
7
  gem "pg", "< 1.0", platform: :ruby
8
8
  gem "redis-rails"
9
9
  gem "redis"
@@ -3,7 +3,7 @@
3
3
  source "https://rubygems.org"
4
4
 
5
5
  gem "pry-nav", git: "https://github.com/nixme/pry-nav.git", branch: "master"
6
- gem "rails", "~> 5.1.6"
6
+ gem "rails", "5.1.5"
7
7
  gem "pg", "< 1.0", platform: :ruby
8
8
  gem "sidekiq"
9
9
  gem "activejob"
data/lib/ddtrace.rb CHANGED
@@ -4,6 +4,7 @@ require 'ddtrace/registry'
4
4
  require 'ddtrace/pin'
5
5
  require 'ddtrace/tracer'
6
6
  require 'ddtrace/error'
7
+ require 'ddtrace/quantization/hash'
7
8
  require 'ddtrace/quantization/http'
8
9
  require 'ddtrace/pipeline'
9
10
  require 'ddtrace/configuration'
@@ -56,18 +57,23 @@ end
56
57
  require 'ddtrace/contrib/base'
57
58
  require 'ddtrace/contrib/rack/patcher'
58
59
  require 'ddtrace/contrib/rails/patcher'
60
+ require 'ddtrace/contrib/active_model_serializers/patcher'
59
61
  require 'ddtrace/contrib/active_record/patcher'
62
+ require 'ddtrace/contrib/sequel/patcher'
60
63
  require 'ddtrace/contrib/elasticsearch/patcher'
61
64
  require 'ddtrace/contrib/faraday/patcher'
62
65
  require 'ddtrace/contrib/grape/patcher'
63
66
  require 'ddtrace/contrib/graphql/patcher'
67
+ require 'ddtrace/contrib/grpc/patcher'
64
68
  require 'ddtrace/contrib/redis/patcher'
65
69
  require 'ddtrace/contrib/http/patcher'
66
70
  require 'ddtrace/contrib/aws/patcher'
67
71
  require 'ddtrace/contrib/sucker_punch/patcher'
68
72
  require 'ddtrace/contrib/mongodb/patcher'
69
73
  require 'ddtrace/contrib/dalli/patcher'
74
+ require 'ddtrace/contrib/rake/patcher'
70
75
  require 'ddtrace/contrib/resque/patcher'
71
76
  require 'ddtrace/contrib/racecar/patcher'
72
77
  require 'ddtrace/contrib/sidekiq/patcher'
78
+ require 'ddtrace/contrib/excon/patcher'
73
79
  require 'ddtrace/monkey'
@@ -9,11 +9,11 @@ module Datadog
9
9
 
10
10
  def initialize(options = {})
11
11
  @registry = options.fetch(:registry, Datadog.registry)
12
- @wrapped_registry = {}
13
12
  end
14
13
 
15
14
  def [](integration_name)
16
- @wrapped_registry[integration_name] ||= Proxy.new(fetch_integration(integration_name))
15
+ integration = fetch_integration(integration_name)
16
+ Proxy.new(integration)
17
17
  end
18
18
 
19
19
  def use(integration_name, options = {})
@@ -0,0 +1,57 @@
1
+ require 'ddtrace/contrib/active_support/notifications/event'
2
+
3
+ module Datadog
4
+ module Contrib
5
+ module ActiveModelSerializers
6
+ # Defines basic behaviors for an ActiveModelSerializers event.
7
+ module Event
8
+ def self.included(base)
9
+ base.send(:include, ActiveSupport::Notifications::Event)
10
+ base.send(:extend, ClassMethods)
11
+ end
12
+
13
+ # Class methods for ActiveModelSerializers events.
14
+ # Note, they share the same process method and before_trace method.
15
+ module ClassMethods
16
+ def span_options
17
+ { service: configuration[:service_name] }
18
+ end
19
+
20
+ def tracer
21
+ configuration[:tracer]
22
+ end
23
+
24
+ def configuration
25
+ Datadog.configuration[:active_model_serializers]
26
+ end
27
+
28
+ def process(span, event, _id, payload)
29
+ span.service = configuration[:service_name]
30
+
31
+ # Set the resource name and serializer name
32
+ res = resource(payload[:serializer])
33
+ span.resource = res
34
+ span.set_tag('active_model_serializers.serializer', res)
35
+
36
+ span.span_type = Datadog::Ext::HTTP::TEMPLATE
37
+
38
+ # Will be nil in 0.9
39
+ span.set_tag('active_model_serializers.adapter', payload[:adapter].class) unless payload[:adapter].nil?
40
+ end
41
+
42
+ private
43
+
44
+ def resource(serializer)
45
+ # Depending on the version of ActiveModelSerializers
46
+ # serializer will be a string or an object.
47
+ if serializer.respond_to?(:name)
48
+ serializer.name
49
+ else
50
+ serializer
51
+ end
52
+ end
53
+ end
54
+ end
55
+ end
56
+ end
57
+ end
@@ -0,0 +1,30 @@
1
+ require 'ddtrace/contrib/active_model_serializers/events/render'
2
+ require 'ddtrace/contrib/active_model_serializers/events/serialize'
3
+
4
+ module Datadog
5
+ module Contrib
6
+ module ActiveModelSerializers
7
+ # Defines collection of instrumented ActiveModelSerializers events
8
+ module Events
9
+ ALL = [
10
+ Events::Render,
11
+ Events::Serialize
12
+ ].freeze
13
+
14
+ module_function
15
+
16
+ def all
17
+ self::ALL
18
+ end
19
+
20
+ def subscriptions
21
+ all.collect(&:subscriptions).collect(&:to_a).flatten
22
+ end
23
+
24
+ def subscribe!
25
+ all.each(&:subscribe!)
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,32 @@
1
+ require 'ddtrace/contrib/active_model_serializers/event'
2
+
3
+ module Datadog
4
+ module Contrib
5
+ module ActiveModelSerializers
6
+ module Events
7
+ # Defines instrumentation for render.active_model_serializers event
8
+ module Render
9
+ include ActiveModelSerializers::Event
10
+
11
+ EVENT_NAME = 'render.active_model_serializers'.freeze
12
+ SPAN_NAME = 'active_model_serializers.render'.freeze
13
+
14
+ module_function
15
+
16
+ def supported?
17
+ Gem.loaded_specs['active_model_serializers'] \
18
+ && Gem.loaded_specs['active_model_serializers'].version >= Gem::Version.new('0.10')
19
+ end
20
+
21
+ def event_name
22
+ self::EVENT_NAME
23
+ end
24
+
25
+ def span_name
26
+ self::SPAN_NAME
27
+ end
28
+ end
29
+ end
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,35 @@
1
+ require 'ddtrace/contrib/active_model_serializers/event'
2
+
3
+ module Datadog
4
+ module Contrib
5
+ module ActiveModelSerializers
6
+ module Events
7
+ # Defines instrumentation for !serialize.active_model_serializers event
8
+ module Serialize
9
+ include ActiveModelSerializers::Event
10
+
11
+ EVENT_NAME = '!serialize.active_model_serializers'.freeze
12
+ SPAN_NAME = 'active_model_serializers.serialize'.freeze
13
+
14
+ module_function
15
+
16
+ def supported?
17
+ Gem.loaded_specs['active_model_serializers'] \
18
+ && ( \
19
+ Gem.loaded_specs['active_model_serializers'].version >= Gem::Version.new('0.9') \
20
+ && Gem.loaded_specs['active_model_serializers'].version < Gem::Version.new('0.10') \
21
+ )
22
+ end
23
+
24
+ def event_name
25
+ self::EVENT_NAME
26
+ end
27
+
28
+ def span_name
29
+ self::SPAN_NAME
30
+ end
31
+ end
32
+ end
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,62 @@
1
+ require 'ddtrace/ext/app_types'
2
+ require 'ddtrace/ext/http'
3
+ require 'ddtrace/contrib/active_model_serializers/events'
4
+
5
+ module Datadog
6
+ module Contrib
7
+ module ActiveModelSerializers
8
+ # Provides instrumentation for ActiveModelSerializers through ActiveSupport instrumentation signals
9
+ module Patcher
10
+ include Base
11
+
12
+ VERSION_REQUIRED = Gem::Version.new('0.9.0')
13
+
14
+ register_as :active_model_serializers
15
+
16
+ option :service_name, default: 'active_model_serializers'
17
+ option :tracer, default: Datadog.tracer do |value|
18
+ (value || Datadog.tracer).tap do |v|
19
+ # Make sure to update tracers of all subscriptions
20
+ Events.subscriptions.each do |subscription|
21
+ subscription.tracer = v
22
+ end
23
+ end
24
+ end
25
+
26
+ class << self
27
+ def patch
28
+ return patched? if patched? || !compatible?
29
+
30
+ # Subscribe to ActiveModelSerializers events
31
+ Events.subscribe!
32
+
33
+ # Set service info
34
+ configuration[:tracer].set_service_info(
35
+ configuration[:service_name],
36
+ 'active_model_serializers',
37
+ Ext::AppTypes::WEB
38
+ )
39
+
40
+ @patched = true
41
+ end
42
+
43
+ def patched?
44
+ return @patched if defined?(@patched)
45
+ @patched = false
46
+ end
47
+
48
+ private
49
+
50
+ def configuration
51
+ Datadog.configuration[:active_model_serializers]
52
+ end
53
+
54
+ def compatible?
55
+ Gem.loaded_specs['active_model_serializers'] && Gem.loaded_specs['activesupport'] \
56
+ && Gem.loaded_specs['active_model_serializers'].version >= VERSION_REQUIRED
57
+ end
58
+ end
59
+ end
60
+ end
61
+ end
62
+ end
@@ -0,0 +1,30 @@
1
+ require 'ddtrace/contrib/active_support/notifications/event'
2
+
3
+ module Datadog
4
+ module Contrib
5
+ module ActiveRecord
6
+ # Defines basic behaviors for an ActiveRecord event.
7
+ module Event
8
+ def self.included(base)
9
+ base.send(:include, ActiveSupport::Notifications::Event)
10
+ base.send(:extend, ClassMethods)
11
+ end
12
+
13
+ # Class methods for ActiveRecord events.
14
+ module ClassMethods
15
+ def span_options
16
+ { service: configuration[:service_name] }
17
+ end
18
+
19
+ def tracer
20
+ configuration[:tracer]
21
+ end
22
+
23
+ def configuration
24
+ Datadog.configuration[:active_record]
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end