ddtrace 0.32.0 → 0.33.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/.env +2 -0
- data/Appraisals +9 -6
- data/CHANGELOG.md +32 -1
- data/Rakefile +3 -2
- data/ddtrace.gemspec +2 -1
- data/docker-compose.yml +9 -0
- data/docs/GettingStarted.md +69 -6
- data/lib/ddtrace.rb +1 -0
- data/lib/ddtrace/configuration/option.rb +3 -2
- data/lib/ddtrace/configuration/option_definition.rb +1 -1
- data/lib/ddtrace/configuration/options.rb +5 -0
- data/lib/ddtrace/contrib/action_cable/integration.rb +2 -2
- data/lib/ddtrace/contrib/action_pack/integration.rb +2 -2
- data/lib/ddtrace/contrib/action_view/integration.rb +2 -2
- data/lib/ddtrace/contrib/active_model_serializers/integration.rb +3 -5
- data/lib/ddtrace/contrib/active_record/configuration/resolver.rb +4 -5
- data/lib/ddtrace/contrib/active_record/integration.rb +2 -2
- data/lib/ddtrace/contrib/active_support/integration.rb +2 -2
- data/lib/ddtrace/contrib/aws/integration.rb +6 -2
- data/lib/ddtrace/contrib/aws/patcher.rb +8 -2
- data/lib/ddtrace/contrib/concurrent_ruby/integration.rb +6 -2
- data/lib/ddtrace/contrib/configurable.rb +30 -13
- data/lib/ddtrace/contrib/configuration/resolver.rb +7 -3
- data/lib/ddtrace/contrib/dalli/integration.rb +2 -2
- data/lib/ddtrace/contrib/delayed_job/integration.rb +6 -2
- data/lib/ddtrace/contrib/elasticsearch/integration.rb +2 -2
- data/lib/ddtrace/contrib/ethon/integration.rb +6 -2
- data/lib/ddtrace/contrib/excon/integration.rb +6 -2
- data/lib/ddtrace/contrib/faraday/integration.rb +2 -2
- data/lib/ddtrace/contrib/grape/integration.rb +3 -3
- data/lib/ddtrace/contrib/graphql/integration.rb +3 -5
- data/lib/ddtrace/contrib/grpc/integration.rb +2 -2
- data/lib/ddtrace/contrib/http/integration.rb +4 -0
- data/lib/ddtrace/contrib/mongodb/integration.rb +2 -2
- data/lib/ddtrace/contrib/mysql2/integration.rb +6 -2
- data/lib/ddtrace/contrib/patchable.rb +21 -4
- data/lib/ddtrace/contrib/presto/configuration/settings.rb +23 -0
- data/lib/ddtrace/contrib/presto/ext.rb +25 -0
- data/lib/ddtrace/contrib/presto/instrumentation.rb +107 -0
- data/lib/ddtrace/contrib/presto/integration.rb +36 -0
- data/lib/ddtrace/contrib/presto/patcher.rb +30 -0
- data/lib/ddtrace/contrib/racecar/integration.rb +3 -3
- data/lib/ddtrace/contrib/rack/integration.rb +6 -2
- data/lib/ddtrace/contrib/rails/integration.rb +6 -3
- data/lib/ddtrace/contrib/rake/integration.rb +6 -2
- data/lib/ddtrace/contrib/redis/configuration/resolver.rb +36 -0
- data/lib/ddtrace/contrib/redis/integration.rb +7 -3
- data/lib/ddtrace/contrib/redis/patcher.rb +11 -2
- data/lib/ddtrace/contrib/redis/vendor/resolver.rb +159 -0
- data/lib/ddtrace/contrib/resque/integration.rb +8 -2
- data/lib/ddtrace/contrib/rest_client/integration.rb +6 -2
- data/lib/ddtrace/contrib/sequel/integration.rb +6 -2
- data/lib/ddtrace/contrib/shoryuken/integration.rb +9 -7
- data/lib/ddtrace/contrib/sidekiq/configuration/settings.rb +5 -0
- data/lib/ddtrace/contrib/sidekiq/ext.rb +2 -0
- data/lib/ddtrace/contrib/sidekiq/integration.rb +2 -2
- data/lib/ddtrace/contrib/sidekiq/server_tracer.rb +7 -3
- data/lib/ddtrace/contrib/sidekiq/tracing.rb +19 -2
- data/lib/ddtrace/contrib/sinatra/integration.rb +2 -2
- data/lib/ddtrace/contrib/sucker_punch/integration.rb +3 -3
- data/lib/ddtrace/runtime/metrics.rb +2 -2
- data/lib/ddtrace/sampling/rule_sampler.rb +16 -2
- data/lib/ddtrace/version.rb +1 -1
- metadata +12 -18
@@ -17,6 +17,11 @@ module Datadog
|
|
17
17
|
o.lazy
|
18
18
|
end
|
19
19
|
|
20
|
+
option :tag_args do |o|
|
21
|
+
o.default { env_to_bool(Ext::ENV_TAG_JOB_ARGS, false) }
|
22
|
+
o.lazy
|
23
|
+
end
|
24
|
+
|
20
25
|
option :service_name, default: Ext::SERVICE_NAME
|
21
26
|
option :client_service_name, default: Ext::CLIENT_SERVICE_NAME
|
22
27
|
end
|
@@ -7,6 +7,7 @@ module Datadog
|
|
7
7
|
CLIENT_SERVICE_NAME = 'sidekiq-client'.freeze
|
8
8
|
ENV_ANALYTICS_ENABLED = 'DD_SIDEKIQ_ANALYTICS_ENABLED'.freeze
|
9
9
|
ENV_ANALYTICS_SAMPLE_RATE = 'DD_SIDEKIQ_ANALYTICS_SAMPLE_RATE'.freeze
|
10
|
+
ENV_TAG_JOB_ARGS = 'DD_SIDEKIQ_TAG_JOB_ARGS'.freeze
|
10
11
|
SERVICE_NAME = 'sidekiq'.freeze
|
11
12
|
SPAN_PUSH = 'sidekiq.push'.freeze
|
12
13
|
SPAN_JOB = 'sidekiq.job'.freeze
|
@@ -15,6 +16,7 @@ module Datadog
|
|
15
16
|
TAG_JOB_QUEUE = 'sidekiq.job.queue'.freeze
|
16
17
|
TAG_JOB_RETRY = 'sidekiq.job.retry'.freeze
|
17
18
|
TAG_JOB_WRAPPER = 'sidekiq.job.wrapper'.freeze
|
19
|
+
TAG_JOB_ARGS = 'sidekiq.job.args'.freeze
|
18
20
|
end
|
19
21
|
end
|
20
22
|
end
|
@@ -16,7 +16,8 @@ module Datadog
|
|
16
16
|
def call(worker, job, queue)
|
17
17
|
resource = job_resource(job)
|
18
18
|
|
19
|
-
service =
|
19
|
+
service = worker_config(resource, :service_name) || @sidekiq_service
|
20
|
+
tag_args = worker_config(resource, :tag_args) || configuration[:tag_args]
|
20
21
|
|
21
22
|
@tracer.trace(Ext::SPAN_JOB, service: service, span_type: Datadog::Ext::AppTypes::WORKER) do |span|
|
22
23
|
span.resource = resource
|
@@ -29,6 +30,9 @@ module Datadog
|
|
29
30
|
span.set_tag(Ext::TAG_JOB_QUEUE, job['queue'])
|
30
31
|
span.set_tag(Ext::TAG_JOB_WRAPPER, job['class']) if job['wrapped']
|
31
32
|
span.set_tag(Ext::TAG_JOB_DELAY, 1000.0 * (Time.now.utc.to_f - job['enqueued_at'].to_f))
|
33
|
+
if tag_args && !job['args'].nil? && !job['args'].empty?
|
34
|
+
span.set_tag(Ext::TAG_JOB_ARGS, job['args'])
|
35
|
+
end
|
32
36
|
|
33
37
|
yield
|
34
38
|
end
|
@@ -40,7 +44,7 @@ module Datadog
|
|
40
44
|
Datadog.configuration[:sidekiq]
|
41
45
|
end
|
42
46
|
|
43
|
-
def
|
47
|
+
def worker_config(resource, key)
|
44
48
|
# Try to get the Ruby class from the resource name.
|
45
49
|
worker_klass = begin
|
46
50
|
Object.const_get(resource)
|
@@ -49,7 +53,7 @@ module Datadog
|
|
49
53
|
end
|
50
54
|
|
51
55
|
if worker_klass.respond_to?(:datadog_tracer_config)
|
52
|
-
worker_klass.datadog_tracer_config[
|
56
|
+
worker_klass.datadog_tracer_config[key]
|
53
57
|
end
|
54
58
|
end
|
55
59
|
end
|
@@ -1,6 +1,8 @@
|
|
1
1
|
require 'ddtrace/ext/app_types'
|
2
2
|
require 'ddtrace/contrib/sidekiq/ext'
|
3
3
|
|
4
|
+
require 'yaml'
|
5
|
+
|
4
6
|
module Datadog
|
5
7
|
module Contrib
|
6
8
|
module Sidekiq
|
@@ -17,10 +19,25 @@ module Datadog
|
|
17
19
|
# primarily to support `ActiveJob`.
|
18
20
|
def job_resource(job)
|
19
21
|
if job['wrapped']
|
20
|
-
job['wrapped']
|
22
|
+
job['wrapped'].to_s
|
23
|
+
elsif job['class'] == 'Sidekiq::Extensions::DelayedClass'
|
24
|
+
delay_extension_class(job).to_s
|
21
25
|
else
|
22
|
-
job['class']
|
26
|
+
job['class'].to_s
|
23
27
|
end
|
28
|
+
rescue => e
|
29
|
+
Datadog::Logger.log.debug { "Error retrieving Sidekiq job class name (jid:#{job['jid']}): #{e}" }
|
30
|
+
|
31
|
+
job['class'].to_s
|
32
|
+
end
|
33
|
+
|
34
|
+
#
|
35
|
+
def delay_extension_class(job)
|
36
|
+
clazz, method = YAML.parse(job['args'].first).children.first.children
|
37
|
+
|
38
|
+
method = method.value[1..-1] # Remove leading `:` from method symbol
|
39
|
+
|
40
|
+
"#{clazz.value}.#{method}"
|
24
41
|
end
|
25
42
|
end
|
26
43
|
end
|
@@ -15,12 +15,12 @@ module Datadog
|
|
15
15
|
Gem.loaded_specs['sucker_punch'] && Gem.loaded_specs['sucker_punch'].version
|
16
16
|
end
|
17
17
|
|
18
|
-
def self.
|
19
|
-
|
18
|
+
def self.loaded?
|
19
|
+
defined?(::SuckerPunch)
|
20
20
|
end
|
21
21
|
|
22
22
|
def self.compatible?
|
23
|
-
super &&
|
23
|
+
super && version >= Gem::Version.new('2.0.0')
|
24
24
|
end
|
25
25
|
|
26
26
|
def default_configuration
|
@@ -19,7 +19,7 @@ module Datadog
|
|
19
19
|
end
|
20
20
|
|
21
21
|
def associate_with_span(span)
|
22
|
-
return if span.nil?
|
22
|
+
return if !enabled? || span.nil?
|
23
23
|
|
24
24
|
# Register service as associated with metrics
|
25
25
|
register_service(span.service) unless span.service.nil?
|
@@ -30,7 +30,7 @@ module Datadog
|
|
30
30
|
|
31
31
|
# Associate service with runtime metrics
|
32
32
|
def register_service(service)
|
33
|
-
return if service.nil?
|
33
|
+
return if !enabled? || service.nil?
|
34
34
|
|
35
35
|
service = service.to_s
|
36
36
|
|
@@ -16,6 +16,8 @@ module Datadog
|
|
16
16
|
class RuleSampler
|
17
17
|
extend Forwardable
|
18
18
|
|
19
|
+
AGENT_RATE_METRIC_KEY = '_dd.agent_psr'.freeze
|
20
|
+
|
19
21
|
attr_reader :rules, :rate_limiter, :default_sampler
|
20
22
|
|
21
23
|
# @param rules [Array<Rule>] ordered list of rules to be applied to a span
|
@@ -68,14 +70,26 @@ module Datadog
|
|
68
70
|
end
|
69
71
|
|
70
72
|
def sample!(span)
|
71
|
-
sampled = sample_span(span)
|
73
|
+
sampled = sample_span(span) do |s|
|
74
|
+
@default_sampler.sample!(s).tap do
|
75
|
+
# We want to make sure the span is tagged with the agent-derived
|
76
|
+
# service rate. Retrieve this from the rate by service sampler.
|
77
|
+
# Only do this if it was set by a RateByServiceSampler.
|
78
|
+
if @default_sampler.is_a?(RateByServiceSampler)
|
79
|
+
s.set_metric(AGENT_RATE_METRIC_KEY, @default_sampler.sample_rate(span))
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
72
83
|
|
73
84
|
sampled.tap do
|
74
85
|
span.sampled = sampled
|
75
86
|
end
|
76
87
|
end
|
77
88
|
|
78
|
-
|
89
|
+
def update(*args)
|
90
|
+
return false unless @default_sampler.respond_to?(:update)
|
91
|
+
@default_sampler.update(*args)
|
92
|
+
end
|
79
93
|
|
80
94
|
private
|
81
95
|
|
data/lib/ddtrace/version.rb
CHANGED
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.
|
4
|
+
version: 0.33.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Datadog, Inc.
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-
|
11
|
+
date: 2020-02-13 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: msgpack
|
@@ -290,20 +290,6 @@ dependencies:
|
|
290
290
|
- - "~>"
|
291
291
|
- !ruby/object:Gem::Version
|
292
292
|
version: 0.4.9.2
|
293
|
-
- !ruby/object:Gem::Dependency
|
294
|
-
name: warning
|
295
|
-
requirement: !ruby/object:Gem::Requirement
|
296
|
-
requirements:
|
297
|
-
- - ">="
|
298
|
-
- !ruby/object:Gem::Version
|
299
|
-
version: '0'
|
300
|
-
type: :development
|
301
|
-
prerelease: false
|
302
|
-
version_requirements: !ruby/object:Gem::Requirement
|
303
|
-
requirements:
|
304
|
-
- - ">="
|
305
|
-
- !ruby/object:Gem::Version
|
306
|
-
version: '0'
|
307
293
|
description: |
|
308
294
|
ddtrace is Datadog’s tracing client for Ruby. It is used to trace requests
|
309
295
|
as they flow across web servers, databases and microservices so that developers
|
@@ -512,6 +498,11 @@ files:
|
|
512
498
|
- lib/ddtrace/contrib/mysql2/patcher.rb
|
513
499
|
- lib/ddtrace/contrib/patchable.rb
|
514
500
|
- lib/ddtrace/contrib/patcher.rb
|
501
|
+
- lib/ddtrace/contrib/presto/configuration/settings.rb
|
502
|
+
- lib/ddtrace/contrib/presto/ext.rb
|
503
|
+
- lib/ddtrace/contrib/presto/instrumentation.rb
|
504
|
+
- lib/ddtrace/contrib/presto/integration.rb
|
505
|
+
- lib/ddtrace/contrib/presto/patcher.rb
|
515
506
|
- lib/ddtrace/contrib/racecar/configuration/settings.rb
|
516
507
|
- lib/ddtrace/contrib/racecar/event.rb
|
517
508
|
- lib/ddtrace/contrib/racecar/events.rb
|
@@ -539,12 +530,14 @@ files:
|
|
539
530
|
- lib/ddtrace/contrib/rake/instrumentation.rb
|
540
531
|
- lib/ddtrace/contrib/rake/integration.rb
|
541
532
|
- lib/ddtrace/contrib/rake/patcher.rb
|
533
|
+
- lib/ddtrace/contrib/redis/configuration/resolver.rb
|
542
534
|
- lib/ddtrace/contrib/redis/configuration/settings.rb
|
543
535
|
- lib/ddtrace/contrib/redis/ext.rb
|
544
536
|
- lib/ddtrace/contrib/redis/integration.rb
|
545
537
|
- lib/ddtrace/contrib/redis/patcher.rb
|
546
538
|
- lib/ddtrace/contrib/redis/quantize.rb
|
547
539
|
- lib/ddtrace/contrib/redis/tags.rb
|
540
|
+
- lib/ddtrace/contrib/redis/vendor/resolver.rb
|
548
541
|
- lib/ddtrace/contrib/registerable.rb
|
549
542
|
- lib/ddtrace/contrib/registry.rb
|
550
543
|
- lib/ddtrace/contrib/resque/configuration/settings.rb
|
@@ -714,9 +707,10 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
714
707
|
requirements:
|
715
708
|
- - ">="
|
716
709
|
- !ruby/object:Gem::Version
|
717
|
-
version:
|
710
|
+
version: 2.0.0
|
718
711
|
requirements: []
|
719
|
-
|
712
|
+
rubyforge_project:
|
713
|
+
rubygems_version: 2.6.14
|
720
714
|
signing_key:
|
721
715
|
specification_version: 4
|
722
716
|
summary: Datadog tracing code for your Ruby applications
|