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.
- checksums.yaml +4 -4
- data/Appraisals +8 -8
- data/CHANGELOG.md +293 -0
- data/README.md +11 -114
- data/Rakefile +26 -18
- data/docs/GettingStarted.md +704 -453
- data/gemfiles/contrib.gemfile +2 -2
- data/gemfiles/rails4_mysql2.gemfile +1 -1
- data/gemfiles/rails5_mysql2.gemfile +2 -2
- data/gemfiles/rails5_postgres.gemfile +1 -1
- data/gemfiles/rails5_postgres_redis.gemfile +1 -1
- data/gemfiles/rails5_postgres_sidekiq.gemfile +1 -1
- data/lib/ddtrace.rb +1 -0
- data/lib/ddtrace/context.rb +96 -34
- data/lib/ddtrace/context_flush.rb +132 -0
- data/lib/ddtrace/contrib/active_record/patcher.rb +55 -70
- data/lib/ddtrace/contrib/active_record/utils.rb +83 -0
- data/lib/ddtrace/contrib/active_support/notifications/subscriber.rb +66 -0
- data/lib/ddtrace/contrib/active_support/notifications/subscription.rb +155 -0
- data/lib/ddtrace/contrib/elasticsearch/patcher.rb +6 -1
- data/lib/ddtrace/contrib/elasticsearch/quantize.rb +89 -0
- data/lib/ddtrace/contrib/grape/endpoint.rb +1 -1
- data/lib/ddtrace/contrib/racecar/patcher.rb +43 -19
- data/lib/ddtrace/contrib/rack/middlewares.rb +58 -11
- data/lib/ddtrace/contrib/rack/patcher.rb +18 -11
- data/lib/ddtrace/contrib/rails/action_controller.rb +9 -11
- data/lib/ddtrace/contrib/rails/action_view.rb +5 -1
- data/lib/ddtrace/contrib/rails/active_support.rb +6 -2
- data/lib/ddtrace/contrib/rails/core_extensions.rb +280 -215
- data/lib/ddtrace/contrib/rails/framework.rb +38 -23
- data/lib/ddtrace/contrib/rails/middlewares.rb +7 -2
- data/lib/ddtrace/contrib/rails/patcher.rb +9 -6
- data/lib/ddtrace/contrib/rails/railtie.rb +4 -2
- data/lib/ddtrace/contrib/rails/utils.rb +9 -40
- data/lib/ddtrace/patcher.rb +32 -10
- data/lib/ddtrace/quantization/http.rb +86 -0
- data/lib/ddtrace/tracer.rb +29 -2
- data/lib/ddtrace/transport.rb +33 -20
- data/lib/ddtrace/version.rb +1 -1
- data/lib/ddtrace/writer.rb +11 -5
- metadata +8 -3
- data/lib/ddtrace/contrib/rails/active_record.rb +0 -80
data/lib/ddtrace/version.rb
CHANGED
data/lib/ddtrace/writer.rb
CHANGED
@@ -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
|
-
|
123
|
-
|
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.
|
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-
|
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
|