ddtrace 0.12.0.beta2 → 0.12.0.rc1

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 (42) hide show
  1. checksums.yaml +4 -4
  2. data/Appraisals +8 -8
  3. data/CHANGELOG.md +293 -0
  4. data/README.md +11 -114
  5. data/Rakefile +26 -18
  6. data/docs/GettingStarted.md +704 -453
  7. data/gemfiles/contrib.gemfile +2 -2
  8. data/gemfiles/rails4_mysql2.gemfile +1 -1
  9. data/gemfiles/rails5_mysql2.gemfile +2 -2
  10. data/gemfiles/rails5_postgres.gemfile +1 -1
  11. data/gemfiles/rails5_postgres_redis.gemfile +1 -1
  12. data/gemfiles/rails5_postgres_sidekiq.gemfile +1 -1
  13. data/lib/ddtrace.rb +1 -0
  14. data/lib/ddtrace/context.rb +96 -34
  15. data/lib/ddtrace/context_flush.rb +132 -0
  16. data/lib/ddtrace/contrib/active_record/patcher.rb +55 -70
  17. data/lib/ddtrace/contrib/active_record/utils.rb +83 -0
  18. data/lib/ddtrace/contrib/active_support/notifications/subscriber.rb +66 -0
  19. data/lib/ddtrace/contrib/active_support/notifications/subscription.rb +155 -0
  20. data/lib/ddtrace/contrib/elasticsearch/patcher.rb +6 -1
  21. data/lib/ddtrace/contrib/elasticsearch/quantize.rb +89 -0
  22. data/lib/ddtrace/contrib/grape/endpoint.rb +1 -1
  23. data/lib/ddtrace/contrib/racecar/patcher.rb +43 -19
  24. data/lib/ddtrace/contrib/rack/middlewares.rb +58 -11
  25. data/lib/ddtrace/contrib/rack/patcher.rb +18 -11
  26. data/lib/ddtrace/contrib/rails/action_controller.rb +9 -11
  27. data/lib/ddtrace/contrib/rails/action_view.rb +5 -1
  28. data/lib/ddtrace/contrib/rails/active_support.rb +6 -2
  29. data/lib/ddtrace/contrib/rails/core_extensions.rb +280 -215
  30. data/lib/ddtrace/contrib/rails/framework.rb +38 -23
  31. data/lib/ddtrace/contrib/rails/middlewares.rb +7 -2
  32. data/lib/ddtrace/contrib/rails/patcher.rb +9 -6
  33. data/lib/ddtrace/contrib/rails/railtie.rb +4 -2
  34. data/lib/ddtrace/contrib/rails/utils.rb +9 -40
  35. data/lib/ddtrace/patcher.rb +32 -10
  36. data/lib/ddtrace/quantization/http.rb +86 -0
  37. data/lib/ddtrace/tracer.rb +29 -2
  38. data/lib/ddtrace/transport.rb +33 -20
  39. data/lib/ddtrace/version.rb +1 -1
  40. data/lib/ddtrace/writer.rb +11 -5
  41. metadata +8 -3
  42. data/lib/ddtrace/contrib/rails/active_record.rb +0 -80
@@ -3,7 +3,7 @@ module Datadog
3
3
  MAJOR = 0
4
4
  MINOR = 12
5
5
  PATCH = 0
6
- PRE = 'beta2'.freeze
6
+ PRE = 'rc1'.freeze
7
7
 
8
8
  STRING = [MAJOR, MINOR, PATCH, PRE].compact.join('.')
9
9
  end
@@ -5,7 +5,7 @@ require 'ddtrace/workers'
5
5
  module Datadog
6
6
  # Traces and services writer that periodically sends data to the trace-agent
7
7
  class Writer
8
- attr_reader :transport, :worker
8
+ attr_reader :transport, :worker, :priority_sampler
9
9
 
10
10
  HOSTNAME = 'localhost'.freeze
11
11
  PORT = '8126'.freeze
@@ -117,10 +117,16 @@ module Datadog
117
117
 
118
118
  private
119
119
 
120
- def sampling_updater(response)
121
- return unless response.is_a?(Net::HTTPOK)
122
- service_rates = JSON.parse(response.body)
123
- @priority_sampler.update(service_rates)
120
+ def sampling_updater(action, response, api)
121
+ return unless action == :traces && response.is_a?(Net::HTTPOK)
122
+
123
+ if api[:version] == HTTPTransport::V4
124
+ service_rates = JSON.parse(response.body)
125
+ @priority_sampler.update(service_rates)
126
+ true
127
+ else
128
+ false
129
+ end
124
130
  end
125
131
  end
126
132
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ddtrace
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.12.0.beta2
4
+ version: 0.12.0.rc1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Datadog, Inc.
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-02-28 00:00:00.000000000 Z
11
+ date: 2018-04-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: msgpack
@@ -222,6 +222,7 @@ files:
222
222
  - ".rubocop.yml"
223
223
  - ".yardopts"
224
224
  - Appraisals
225
+ - CHANGELOG.md
225
226
  - Gemfile
226
227
  - LICENSE
227
228
  - README.md
@@ -254,7 +255,11 @@ files:
254
255
  - lib/ddtrace/configuration/proxy.rb
255
256
  - lib/ddtrace/configuration/resolver.rb
256
257
  - lib/ddtrace/context.rb
258
+ - lib/ddtrace/context_flush.rb
257
259
  - lib/ddtrace/contrib/active_record/patcher.rb
260
+ - lib/ddtrace/contrib/active_record/utils.rb
261
+ - lib/ddtrace/contrib/active_support/notifications/subscriber.rb
262
+ - lib/ddtrace/contrib/active_support/notifications/subscription.rb
258
263
  - lib/ddtrace/contrib/aws/instrumentation.rb
259
264
  - lib/ddtrace/contrib/aws/parsed_context.rb
260
265
  - lib/ddtrace/contrib/aws/patcher.rb
@@ -279,7 +284,6 @@ files:
279
284
  - lib/ddtrace/contrib/rack/patcher.rb
280
285
  - lib/ddtrace/contrib/rails/action_controller.rb
281
286
  - lib/ddtrace/contrib/rails/action_view.rb
282
- - lib/ddtrace/contrib/rails/active_record.rb
283
287
  - lib/ddtrace/contrib/rails/active_support.rb
284
288
  - lib/ddtrace/contrib/rails/core_extensions.rb
285
289
  - lib/ddtrace/contrib/rails/framework.rb
@@ -320,6 +324,7 @@ files:
320
324
  - lib/ddtrace/propagation/distributed_headers.rb
321
325
  - lib/ddtrace/propagation/http_propagator.rb
322
326
  - lib/ddtrace/provider.rb
327
+ - lib/ddtrace/quantization/http.rb
323
328
  - lib/ddtrace/registry.rb
324
329
  - lib/ddtrace/registry/registerable.rb
325
330
  - lib/ddtrace/sampler.rb
@@ -1,80 +0,0 @@
1
- require 'ddtrace/ext/sql'
2
- require 'ddtrace/contrib/rails/utils'
3
-
4
- module Datadog
5
- module Contrib
6
- module Rails
7
- # Code used to create and handle 'mysql.query', 'postgres.query', ... spans.
8
- module ActiveRecord
9
- def self.instrument
10
- # ActiveRecord is instrumented only if it's available
11
- return unless defined?(::ActiveRecord)
12
-
13
- # subscribe when the active record query has been processed
14
- ::ActiveSupport::Notifications.subscribe('sql.active_record') do |*args|
15
- sql(*args)
16
- end
17
-
18
- if Datadog::Contrib::Rails::Patcher.active_record_instantiation_tracing_supported?
19
- # subscribe when the active record instantiates objects
20
- ::ActiveSupport::Notifications.subscribe('instantiation.active_record') do |*args|
21
- instantiation(*args)
22
- end
23
- end
24
- end
25
-
26
- def self.sql(_name, start, finish, _id, payload)
27
- tracer = Datadog.configuration[:rails][:tracer]
28
- database_service = Datadog.configuration[:rails][:database_service]
29
- adapter_name = Datadog::Contrib::Rails::Utils.adapter_name
30
- database_name = Datadog::Contrib::Rails::Utils.database_name
31
- adapter_host = Datadog::Contrib::Rails::Utils.adapter_host
32
- adapter_port = Datadog::Contrib::Rails::Utils.adapter_port
33
-
34
- span = tracer.trace(
35
- "#{adapter_name}.query",
36
- resource: payload.fetch(:sql),
37
- service: database_service,
38
- span_type: Datadog::Ext::SQL::TYPE
39
- )
40
-
41
- # Find out if the SQL query has been cached in this request. This meta is really
42
- # helpful to users because some spans may have 0ns of duration because the query
43
- # is simply cached from memory, so the notification is fired with start == finish.
44
- cached = payload[:cached] || (payload[:name] == 'CACHE')
45
-
46
- # the span should have the query ONLY in the Resource attribute,
47
- # so that the ``sql.query`` tag will be set in the agent with an
48
- # obfuscated version
49
- span.set_tag('rails.db.vendor', adapter_name)
50
- span.set_tag('rails.db.name', database_name)
51
- span.set_tag('rails.db.cached', cached) if cached
52
- span.set_tag('out.host', adapter_host)
53
- span.set_tag('out.port', adapter_port)
54
- span.start_time = start
55
- span.finish(finish)
56
- rescue StandardError => e
57
- Datadog::Tracer.log.debug(e.message)
58
- end
59
-
60
- def self.instantiation(_name, start, finish, _id, payload)
61
- tracer = Datadog.configuration[:rails][:tracer]
62
-
63
- span = tracer.trace(
64
- 'active_record.instantiation',
65
- resource: payload.fetch(:class_name),
66
- span_type: 'custom'
67
- )
68
-
69
- span.service = span.parent ? span.parent.service : Datadog.configuration[:rails][:service_name]
70
- span.set_tag('active_record.instantiation.class_name', payload.fetch(:class_name))
71
- span.set_tag('active_record.instantiation.record_count', payload.fetch(:record_count))
72
- span.start_time = start
73
- span.finish(finish)
74
- rescue StandardError => e
75
- Datadog::Tracer.log.debug(e.message)
76
- end
77
- end
78
- end
79
- end
80
- end