ddtrace 0.43.0 → 0.44.0
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 +5 -5
- data/.circleci/config.yml +100 -129
- data/.circleci/images/primary/Dockerfile-3.0.0 +73 -0
- data/.github/workflows/add-milestone-to-pull-requests.yml +1 -1
- data/.simplecov +4 -1
- data/Appraisals +200 -8
- data/CHANGELOG.md +1005 -376
- data/Gemfile +4 -2
- data/Rakefile +121 -4
- data/ddtrace.gemspec +5 -8
- data/docker-compose.yml +30 -0
- data/docs/GettingStarted.md +47 -8
- data/lib/ddtrace.rb +1 -0
- data/lib/ddtrace/contrib/action_view/event.rb +0 -4
- data/lib/ddtrace/contrib/action_view/events/render_partial.rb +1 -0
- data/lib/ddtrace/contrib/action_view/events/render_template.rb +1 -0
- data/lib/ddtrace/contrib/active_record/utils.rb +11 -1
- data/lib/ddtrace/contrib/aws/services.rb +1 -0
- data/lib/ddtrace/contrib/configuration/resolvers/pattern_resolver.rb +2 -0
- data/lib/ddtrace/contrib/ethon/easy_patch.rb +1 -1
- data/lib/ddtrace/contrib/ethon/ext.rb +1 -0
- data/lib/ddtrace/contrib/grape/endpoint.rb +29 -11
- data/lib/ddtrace/contrib/grape/ext.rb +1 -0
- data/lib/ddtrace/contrib/httprb/instrumentation.rb +1 -1
- data/lib/ddtrace/contrib/qless/configuration/settings.rb +35 -0
- data/lib/ddtrace/contrib/qless/ext.rb +20 -0
- data/lib/ddtrace/contrib/qless/integration.rb +38 -0
- data/lib/ddtrace/contrib/qless/patcher.rb +35 -0
- data/lib/ddtrace/contrib/qless/qless_job.rb +72 -0
- data/lib/ddtrace/contrib/qless/tracer_cleaner.rb +32 -0
- data/lib/ddtrace/contrib/redis/configuration/resolver.rb +3 -1
- data/lib/ddtrace/contrib/redis/configuration/settings.rb +5 -0
- data/lib/ddtrace/contrib/redis/ext.rb +1 -0
- data/lib/ddtrace/contrib/redis/patcher.rb +20 -3
- data/lib/ddtrace/contrib/redis/quantize.rb +27 -0
- data/lib/ddtrace/contrib/redis/tags.rb +5 -1
- data/lib/ddtrace/contrib/sinatra/tracer_middleware.rb +2 -2
- data/lib/ddtrace/ext/ci.rb +0 -1
- data/lib/ddtrace/version.rb +1 -1
- data/lib/ddtrace/workers/runtime_metrics.rb +7 -3
- metadata +77 -29
@@ -9,6 +9,7 @@ module Datadog
|
|
9
9
|
ENV_ANALYTICS_ENABLED_OLD = 'DD_REDIS_ANALYTICS_ENABLED'.freeze
|
10
10
|
ENV_ANALYTICS_SAMPLE_RATE = 'DD_TRACE_REDIS_ANALYTICS_SAMPLE_RATE'.freeze
|
11
11
|
ENV_ANALYTICS_SAMPLE_RATE_OLD = 'DD_REDIS_ANALYTICS_SAMPLE_RATE'.freeze
|
12
|
+
ENV_COMMAND_ARGS = 'DD_REDIS_COMMAND_ARGS'.freeze
|
12
13
|
METRIC_PIPELINE_LEN = 'redis.pipeline_length'.freeze
|
13
14
|
SERVICE_NAME = 'redis'.freeze
|
14
15
|
SPAN_COMMAND = 'redis.command'.freeze
|
@@ -28,6 +28,7 @@ module Datadog
|
|
28
28
|
|
29
29
|
# rubocop:disable Metrics/MethodLength
|
30
30
|
# rubocop:disable Metrics/BlockLength
|
31
|
+
# rubocop:disable Metrics/AbcSize
|
31
32
|
def patch_redis_client
|
32
33
|
::Redis::Client.class_eval do
|
33
34
|
alias_method :call_without_datadog, :call
|
@@ -40,7 +41,7 @@ module Datadog
|
|
40
41
|
pin.tracer.trace(Datadog::Contrib::Redis::Ext::SPAN_COMMAND) do |span|
|
41
42
|
span.service = pin.service
|
42
43
|
span.span_type = Datadog::Contrib::Redis::Ext::TYPE
|
43
|
-
span.resource =
|
44
|
+
span.resource = get_command(args)
|
44
45
|
Datadog::Contrib::Redis::Tags.set_common_tags(self, span)
|
45
46
|
|
46
47
|
response = call_without_datadog(*args, &block)
|
@@ -59,10 +60,10 @@ module Datadog
|
|
59
60
|
pin.tracer.trace(Datadog::Contrib::Redis::Ext::SPAN_COMMAND) do |span|
|
60
61
|
span.service = pin.service
|
61
62
|
span.span_type = Datadog::Contrib::Redis::Ext::TYPE
|
62
|
-
commands = args
|
63
|
+
commands = get_pipeline_commands(args)
|
63
64
|
span.resource = commands.join("\n")
|
64
|
-
Datadog::Contrib::Redis::Tags.set_common_tags(self, span)
|
65
65
|
span.set_metric Datadog::Contrib::Redis::Ext::METRIC_PIPELINE_LEN, commands.length
|
66
|
+
Datadog::Contrib::Redis::Tags.set_common_tags(self, span)
|
66
67
|
|
67
68
|
response = call_pipeline_without_datadog(*args, &block)
|
68
69
|
end
|
@@ -84,6 +85,22 @@ module Datadog
|
|
84
85
|
|
85
86
|
private
|
86
87
|
|
88
|
+
def get_command(args)
|
89
|
+
if datadog_configuration[:command_args]
|
90
|
+
Datadog::Contrib::Redis::Quantize.format_command_args(*args)
|
91
|
+
else
|
92
|
+
Datadog::Contrib::Redis::Quantize.get_verb(*args)
|
93
|
+
end
|
94
|
+
end
|
95
|
+
|
96
|
+
def get_pipeline_commands(args)
|
97
|
+
if datadog_configuration[:command_args]
|
98
|
+
args[0].commands.map { |c| Datadog::Contrib::Redis::Quantize.format_command_args(c) }
|
99
|
+
else
|
100
|
+
args[0].commands.map { |c| Datadog::Contrib::Redis::Quantize.get_verb(c) }
|
101
|
+
end
|
102
|
+
end
|
103
|
+
|
87
104
|
def datadog_configuration
|
88
105
|
Datadog.configuration[:redis, options]
|
89
106
|
end
|
@@ -1,3 +1,5 @@
|
|
1
|
+
require 'set'
|
2
|
+
|
1
3
|
module Datadog
|
2
4
|
module Contrib
|
3
5
|
module Redis
|
@@ -8,6 +10,19 @@ module Datadog
|
|
8
10
|
VALUE_MAX_LEN = 50
|
9
11
|
CMD_MAX_LEN = 500
|
10
12
|
|
13
|
+
MULTI_VERB_COMMANDS = Set.new(
|
14
|
+
%w[
|
15
|
+
ACL
|
16
|
+
CLIENT
|
17
|
+
CLUSTER
|
18
|
+
COMMAND
|
19
|
+
CONFIG
|
20
|
+
DEBUG
|
21
|
+
LATENCY
|
22
|
+
MEMORY
|
23
|
+
]
|
24
|
+
).freeze
|
25
|
+
|
11
26
|
module_function
|
12
27
|
|
13
28
|
def format_arg(arg)
|
@@ -27,6 +42,18 @@ module Datadog
|
|
27
42
|
Utils.truncate(cmd, CMD_MAX_LEN, TOO_LONG_MARK)
|
28
43
|
end
|
29
44
|
|
45
|
+
def get_verb(command_args)
|
46
|
+
return unless command_args.is_a?(Array)
|
47
|
+
|
48
|
+
return get_verb(command_args.first) if command_args.first.is_a?(Array)
|
49
|
+
|
50
|
+
arg = command_args.first
|
51
|
+
verb = arg.is_a?(Symbol) ? arg.to_s.upcase : arg.to_s
|
52
|
+
return verb unless MULTI_VERB_COMMANDS.include?(verb) && command_args[1]
|
53
|
+
|
54
|
+
"#{verb} #{command_args[1]}"
|
55
|
+
end
|
56
|
+
|
30
57
|
def auth_command?(command_args)
|
31
58
|
return false unless command_args.is_a?(Array) && !command_args.empty?
|
32
59
|
command_args.first.to_sym == :auth
|
@@ -19,7 +19,7 @@ module Datadog
|
|
19
19
|
span.set_tag Datadog::Ext::NET::TARGET_HOST, client.host
|
20
20
|
span.set_tag Datadog::Ext::NET::TARGET_PORT, client.port
|
21
21
|
span.set_tag Ext::TAG_DB, client.db
|
22
|
-
span.set_tag Ext::TAG_RAW_COMMAND, span.resource
|
22
|
+
span.set_tag Ext::TAG_RAW_COMMAND, span.resource if show_command_args?
|
23
23
|
end
|
24
24
|
|
25
25
|
private
|
@@ -35,6 +35,10 @@ module Datadog
|
|
35
35
|
def analytics_sample_rate
|
36
36
|
datadog_configuration[:analytics_sample_rate]
|
37
37
|
end
|
38
|
+
|
39
|
+
def show_command_args?
|
40
|
+
datadog_configuration[:command_args]
|
41
|
+
end
|
38
42
|
end
|
39
43
|
end
|
40
44
|
end
|
@@ -8,9 +8,9 @@ module Datadog
|
|
8
8
|
module Sinatra
|
9
9
|
# Middleware used for automatically tagging configured headers and handle request span
|
10
10
|
class TracerMiddleware
|
11
|
-
def initialize(app,
|
11
|
+
def initialize(app, opt = {})
|
12
12
|
@app = app
|
13
|
-
@app_instance = app_instance
|
13
|
+
@app_instance = opt[:app_instance]
|
14
14
|
end
|
15
15
|
|
16
16
|
# rubocop:disable Metrics/AbcSize
|
data/lib/ddtrace/ext/ci.rb
CHANGED
@@ -221,7 +221,6 @@ module Datadog
|
|
221
221
|
Git::TAG_COMMIT_SHA => env['GIT_COMMIT'],
|
222
222
|
Git::TAG_REPOSITORY_URL => env['GIT_URL'],
|
223
223
|
Git::TAG_TAG => tag,
|
224
|
-
TAG_JOB_URL => env['JOB_URL'],
|
225
224
|
TAG_PIPELINE_ID => env['BUILD_TAG'],
|
226
225
|
TAG_PIPELINE_NAME => name,
|
227
226
|
TAG_PIPELINE_NUMBER => env['BUILD_NUMBER'],
|
data/lib/ddtrace/version.rb
CHANGED
@@ -12,6 +12,10 @@ module Datadog
|
|
12
12
|
extend Forwardable
|
13
13
|
include Workers::Polling
|
14
14
|
|
15
|
+
# In seconds
|
16
|
+
DEFAULT_FLUSH_INTERVAL = 10
|
17
|
+
DEFAULT_BACK_OFF_MAX = 30
|
18
|
+
|
15
19
|
attr_reader \
|
16
20
|
:metrics
|
17
21
|
|
@@ -22,9 +26,9 @@ module Datadog
|
|
22
26
|
self.fork_policy = options.fetch(:fork_policy, Workers::Async::Thread::FORK_POLICY_STOP)
|
23
27
|
|
24
28
|
# Workers::IntervalLoop settings
|
25
|
-
self.
|
26
|
-
self.
|
27
|
-
self.
|
29
|
+
self.loop_base_interval = options.fetch(:interval, DEFAULT_FLUSH_INTERVAL)
|
30
|
+
self.loop_back_off_ratio = options[:back_off_ratio] if options.key?(:back_off_ratio)
|
31
|
+
self.loop_back_off_max = options.fetch(:back_off_max, DEFAULT_BACK_OFF_MAX)
|
28
32
|
|
29
33
|
self.enabled = options.fetch(:enabled, false)
|
30
34
|
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.
|
4
|
+
version: 0.44.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Datadog, Inc.
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-01-06 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: msgpack
|
@@ -122,6 +122,20 @@ dependencies:
|
|
122
122
|
- - "~>"
|
123
123
|
- !ruby/object:Gem::Version
|
124
124
|
version: '1.1'
|
125
|
+
- !ruby/object:Gem::Dependency
|
126
|
+
name: ruby-prof
|
127
|
+
requirement: !ruby/object:Gem::Requirement
|
128
|
+
requirements:
|
129
|
+
- - "~>"
|
130
|
+
- !ruby/object:Gem::Version
|
131
|
+
version: '1.4'
|
132
|
+
type: :development
|
133
|
+
prerelease: false
|
134
|
+
version_requirements: !ruby/object:Gem::Requirement
|
135
|
+
requirements:
|
136
|
+
- - "~>"
|
137
|
+
- !ruby/object:Gem::Version
|
138
|
+
version: '1.4'
|
125
139
|
- !ruby/object:Gem::Dependency
|
126
140
|
name: minitest
|
127
141
|
requirement: !ruby/object:Gem::Requirement
|
@@ -164,6 +178,20 @@ dependencies:
|
|
164
178
|
- - '='
|
165
179
|
- !ruby/object:Gem::Version
|
166
180
|
version: 1.0.2
|
181
|
+
- !ruby/object:Gem::Dependency
|
182
|
+
name: pimpmychangelog
|
183
|
+
requirement: !ruby/object:Gem::Requirement
|
184
|
+
requirements:
|
185
|
+
- - ">="
|
186
|
+
- !ruby/object:Gem::Version
|
187
|
+
version: 0.1.2
|
188
|
+
type: :development
|
189
|
+
prerelease: false
|
190
|
+
version_requirements: !ruby/object:Gem::Requirement
|
191
|
+
requirements:
|
192
|
+
- - ">="
|
193
|
+
- !ruby/object:Gem::Version
|
194
|
+
version: 0.1.2
|
167
195
|
- !ruby/object:Gem::Dependency
|
168
196
|
name: appraisal
|
169
197
|
requirement: !ruby/object:Gem::Requirement
|
@@ -196,16 +224,16 @@ dependencies:
|
|
196
224
|
name: webmock
|
197
225
|
requirement: !ruby/object:Gem::Requirement
|
198
226
|
requirements:
|
199
|
-
- - "
|
227
|
+
- - ">="
|
200
228
|
- !ruby/object:Gem::Version
|
201
|
-
version:
|
229
|
+
version: 3.10.0
|
202
230
|
type: :development
|
203
231
|
prerelease: false
|
204
232
|
version_requirements: !ruby/object:Gem::Requirement
|
205
233
|
requirements:
|
206
|
-
- - "
|
234
|
+
- - ">="
|
207
235
|
- !ruby/object:Gem::Version
|
208
|
-
version:
|
236
|
+
version: 3.10.0
|
209
237
|
- !ruby/object:Gem::Dependency
|
210
238
|
name: builder
|
211
239
|
requirement: !ruby/object:Gem::Requirement
|
@@ -220,20 +248,6 @@ dependencies:
|
|
220
248
|
- - ">="
|
221
249
|
- !ruby/object:Gem::Version
|
222
250
|
version: '0'
|
223
|
-
- !ruby/object:Gem::Dependency
|
224
|
-
name: sqlite3
|
225
|
-
requirement: !ruby/object:Gem::Requirement
|
226
|
-
requirements:
|
227
|
-
- - "~>"
|
228
|
-
- !ruby/object:Gem::Version
|
229
|
-
version: 1.3.6
|
230
|
-
type: :development
|
231
|
-
prerelease: false
|
232
|
-
version_requirements: !ruby/object:Gem::Requirement
|
233
|
-
requirements:
|
234
|
-
- - "~>"
|
235
|
-
- !ruby/object:Gem::Version
|
236
|
-
version: 1.3.6
|
237
251
|
- !ruby/object:Gem::Dependency
|
238
252
|
name: climate_control
|
239
253
|
requirement: !ruby/object:Gem::Requirement
|
@@ -324,28 +338,42 @@ dependencies:
|
|
324
338
|
requirements:
|
325
339
|
- - "~>"
|
326
340
|
- !ruby/object:Gem::Version
|
327
|
-
version: 0.
|
341
|
+
version: 0.12.2
|
328
342
|
type: :development
|
329
343
|
prerelease: false
|
330
344
|
version_requirements: !ruby/object:Gem::Requirement
|
331
345
|
requirements:
|
332
346
|
- - "~>"
|
333
347
|
- !ruby/object:Gem::Version
|
334
|
-
version: 0.
|
348
|
+
version: 0.12.2
|
349
|
+
- !ruby/object:Gem::Dependency
|
350
|
+
name: pry-nav
|
351
|
+
requirement: !ruby/object:Gem::Requirement
|
352
|
+
requirements:
|
353
|
+
- - "~>"
|
354
|
+
- !ruby/object:Gem::Version
|
355
|
+
version: 0.3.0
|
356
|
+
type: :development
|
357
|
+
prerelease: false
|
358
|
+
version_requirements: !ruby/object:Gem::Requirement
|
359
|
+
requirements:
|
360
|
+
- - "~>"
|
361
|
+
- !ruby/object:Gem::Version
|
362
|
+
version: 0.3.0
|
335
363
|
- !ruby/object:Gem::Dependency
|
336
364
|
name: pry-stack_explorer
|
337
365
|
requirement: !ruby/object:Gem::Requirement
|
338
366
|
requirements:
|
339
367
|
- - "~>"
|
340
368
|
- !ruby/object:Gem::Version
|
341
|
-
version: 0.4.9
|
369
|
+
version: 0.4.9
|
342
370
|
type: :development
|
343
371
|
prerelease: false
|
344
372
|
version_requirements: !ruby/object:Gem::Requirement
|
345
373
|
requirements:
|
346
374
|
- - "~>"
|
347
375
|
- !ruby/object:Gem::Version
|
348
|
-
version: 0.4.9
|
376
|
+
version: 0.4.9
|
349
377
|
- !ruby/object:Gem::Dependency
|
350
378
|
name: simplecov
|
351
379
|
requirement: !ruby/object:Gem::Requirement
|
@@ -360,6 +388,20 @@ dependencies:
|
|
360
388
|
- - "~>"
|
361
389
|
- !ruby/object:Gem::Version
|
362
390
|
version: '0.17'
|
391
|
+
- !ruby/object:Gem::Dependency
|
392
|
+
name: warning
|
393
|
+
requirement: !ruby/object:Gem::Requirement
|
394
|
+
requirements:
|
395
|
+
- - "~>"
|
396
|
+
- !ruby/object:Gem::Version
|
397
|
+
version: '1'
|
398
|
+
type: :development
|
399
|
+
prerelease: false
|
400
|
+
version_requirements: !ruby/object:Gem::Requirement
|
401
|
+
requirements:
|
402
|
+
- - "~>"
|
403
|
+
- !ruby/object:Gem::Version
|
404
|
+
version: '1'
|
363
405
|
description: |
|
364
406
|
ddtrace is Datadog’s tracing client for Ruby. It is used to trace requests
|
365
407
|
as they flow across web servers, databases and microservices so that developers
|
@@ -379,6 +421,7 @@ files:
|
|
379
421
|
- ".circleci/images/primary/Dockerfile-2.5.6"
|
380
422
|
- ".circleci/images/primary/Dockerfile-2.6.4"
|
381
423
|
- ".circleci/images/primary/Dockerfile-2.7.0"
|
424
|
+
- ".circleci/images/primary/Dockerfile-3.0.0"
|
382
425
|
- ".circleci/images/primary/Dockerfile-jruby-9.2"
|
383
426
|
- ".dockerignore"
|
384
427
|
- ".env"
|
@@ -611,6 +654,12 @@ files:
|
|
611
654
|
- lib/ddtrace/contrib/presto/instrumentation.rb
|
612
655
|
- lib/ddtrace/contrib/presto/integration.rb
|
613
656
|
- lib/ddtrace/contrib/presto/patcher.rb
|
657
|
+
- lib/ddtrace/contrib/qless/configuration/settings.rb
|
658
|
+
- lib/ddtrace/contrib/qless/ext.rb
|
659
|
+
- lib/ddtrace/contrib/qless/integration.rb
|
660
|
+
- lib/ddtrace/contrib/qless/patcher.rb
|
661
|
+
- lib/ddtrace/contrib/qless/qless_job.rb
|
662
|
+
- lib/ddtrace/contrib/qless/tracer_cleaner.rb
|
614
663
|
- lib/ddtrace/contrib/que/configuration/settings.rb
|
615
664
|
- lib/ddtrace/contrib/que/ext.rb
|
616
665
|
- lib/ddtrace/contrib/que/integration.rb
|
@@ -839,7 +888,7 @@ licenses:
|
|
839
888
|
- BSD-3-Clause
|
840
889
|
metadata:
|
841
890
|
allowed_push_host: https://rubygems.org
|
842
|
-
post_install_message:
|
891
|
+
post_install_message:
|
843
892
|
rdoc_options: []
|
844
893
|
require_paths:
|
845
894
|
- lib
|
@@ -854,9 +903,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
854
903
|
- !ruby/object:Gem::Version
|
855
904
|
version: 2.0.0
|
856
905
|
requirements: []
|
857
|
-
|
858
|
-
|
859
|
-
signing_key:
|
906
|
+
rubygems_version: 3.2.3
|
907
|
+
signing_key:
|
860
908
|
specification_version: 4
|
861
909
|
summary: Datadog tracing code for your Ruby applications
|
862
910
|
test_files: []
|