ddtrace 0.20.0 → 0.21.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 +4 -4
- data/CHANGELOG.md +24 -3
- data/Rakefile +1 -1
- data/docs/GettingStarted.md +25 -7
- data/lib/ddtrace.rb +4 -31
- data/lib/ddtrace/configuration.rb +13 -46
- data/lib/ddtrace/configuration/{resolver.rb → dependency_resolver.rb} +2 -2
- data/lib/ddtrace/configuration/option.rb +32 -0
- data/lib/ddtrace/configuration/option_definition.rb +27 -0
- data/lib/ddtrace/configuration/option_definition_set.rb +18 -0
- data/lib/ddtrace/configuration/option_set.rb +6 -0
- data/lib/ddtrace/configuration/options.rb +93 -0
- data/lib/ddtrace/configuration/pin_setup.rb +1 -1
- data/lib/ddtrace/configuration/settings.rb +47 -0
- data/lib/ddtrace/contrib/active_model_serializers/configuration/settings.rb +8 -0
- data/lib/ddtrace/contrib/active_model_serializers/event.rb +6 -0
- data/lib/ddtrace/contrib/active_model_serializers/ext.rb +2 -2
- data/lib/ddtrace/contrib/active_record/configuration/settings.rb +8 -0
- data/lib/ddtrace/contrib/active_record/events/instantiation.rb +7 -0
- data/lib/ddtrace/contrib/active_record/events/sql.rb +6 -0
- data/lib/ddtrace/contrib/active_record/ext.rb +2 -3
- data/lib/ddtrace/contrib/analytics.rb +3 -4
- data/lib/ddtrace/contrib/aws/configuration/settings.rb +8 -0
- data/lib/ddtrace/contrib/aws/ext.rb +5 -6
- data/lib/ddtrace/contrib/aws/instrumentation.rb +7 -0
- data/lib/ddtrace/contrib/configuration/settings.rb +4 -14
- data/lib/ddtrace/contrib/dalli/configuration/settings.rb +8 -0
- data/lib/ddtrace/contrib/dalli/ext.rb +3 -2
- data/lib/ddtrace/contrib/dalli/instrumentation.rb +7 -0
- data/lib/ddtrace/contrib/delayed_job/configuration/settings.rb +1 -1
- data/lib/ddtrace/contrib/delayed_job/ext.rb +1 -1
- data/lib/ddtrace/contrib/elasticsearch/configuration/settings.rb +8 -0
- data/lib/ddtrace/contrib/elasticsearch/ext.rb +2 -2
- data/lib/ddtrace/contrib/elasticsearch/patcher.rb +11 -1
- data/lib/ddtrace/contrib/excon/configuration/settings.rb +8 -0
- data/lib/ddtrace/contrib/excon/ext.rb +2 -1
- data/lib/ddtrace/contrib/excon/middleware.rb +15 -0
- data/lib/ddtrace/contrib/extensions.rb +62 -0
- data/lib/ddtrace/contrib/faraday/configuration/settings.rb +8 -0
- data/lib/ddtrace/contrib/faraday/ext.rb +2 -1
- data/lib/ddtrace/contrib/faraday/middleware.rb +15 -0
- data/lib/ddtrace/contrib/grape/configuration/settings.rb +8 -0
- data/lib/ddtrace/contrib/grape/endpoint.rb +19 -0
- data/lib/ddtrace/contrib/grape/ext.rb +2 -2
- data/lib/ddtrace/contrib/graphql/configuration/settings.rb +8 -0
- data/lib/ddtrace/contrib/graphql/ext.rb +2 -0
- data/lib/ddtrace/contrib/graphql/patcher.rb +8 -2
- data/lib/ddtrace/contrib/grpc/configuration/settings.rb +8 -0
- data/lib/ddtrace/contrib/grpc/datadog_interceptor.rb +9 -0
- data/lib/ddtrace/contrib/grpc/datadog_interceptor/client.rb +4 -0
- data/lib/ddtrace/contrib/grpc/datadog_interceptor/server.rb +4 -0
- data/lib/ddtrace/contrib/grpc/ext.rb +2 -1
- data/lib/ddtrace/contrib/http/configuration/settings.rb +8 -0
- data/lib/ddtrace/contrib/http/ext.rb +2 -1
- data/lib/ddtrace/contrib/http/instrumentation.rb +54 -19
- data/lib/ddtrace/contrib/mongodb/configuration/settings.rb +8 -0
- data/lib/ddtrace/contrib/mongodb/ext.rb +2 -2
- data/lib/ddtrace/contrib/mongodb/subscribers.rb +18 -0
- data/lib/ddtrace/contrib/mysql2/configuration/settings.rb +8 -0
- data/lib/ddtrace/contrib/mysql2/ext.rb +2 -2
- data/lib/ddtrace/contrib/mysql2/{client.rb → instrumentation.rb} +32 -12
- data/lib/ddtrace/contrib/mysql2/patcher.rb +2 -2
- data/lib/ddtrace/contrib/racecar/configuration/settings.rb +1 -1
- data/lib/ddtrace/contrib/racecar/ext.rb +1 -1
- data/lib/ddtrace/contrib/rack/configuration/settings.rb +1 -1
- data/lib/ddtrace/contrib/rack/ext.rb +1 -1
- data/lib/ddtrace/contrib/rails/action_controller.rb +3 -0
- data/lib/ddtrace/contrib/rails/active_support.rb +1 -0
- data/lib/ddtrace/contrib/rails/configuration/settings.rb +8 -0
- data/lib/ddtrace/contrib/rails/ext.rb +2 -5
- data/lib/ddtrace/contrib/rails/utils.rb +17 -1
- data/lib/ddtrace/contrib/rake/configuration/settings.rb +1 -1
- data/lib/ddtrace/contrib/rake/ext.rb +1 -1
- data/lib/ddtrace/contrib/redis/configuration/settings.rb +8 -0
- data/lib/ddtrace/contrib/redis/ext.rb +4 -5
- data/lib/ddtrace/contrib/redis/tags.rb +24 -6
- data/lib/ddtrace/contrib/registerable.rb +1 -1
- data/lib/ddtrace/contrib/registry.rb +42 -0
- data/lib/ddtrace/contrib/resque/configuration/settings.rb +1 -1
- data/lib/ddtrace/contrib/resque/ext.rb +1 -1
- data/lib/ddtrace/contrib/rest_client/configuration/settings.rb +8 -0
- data/lib/ddtrace/contrib/rest_client/ext.rb +2 -1
- data/lib/ddtrace/contrib/rest_client/request_patch.rb +14 -0
- data/lib/ddtrace/contrib/sequel/configuration/settings.rb +7 -1
- data/lib/ddtrace/contrib/sequel/database.rb +2 -0
- data/lib/ddtrace/contrib/sequel/dataset.rb +2 -0
- data/lib/ddtrace/contrib/sequel/ext.rb +2 -2
- data/lib/ddtrace/contrib/sequel/utils.rb +32 -14
- data/lib/ddtrace/contrib/shoryuken/configuration/settings.rb +1 -1
- data/lib/ddtrace/contrib/shoryuken/ext.rb +1 -1
- data/lib/ddtrace/contrib/sidekiq/configuration/settings.rb +1 -1
- data/lib/ddtrace/contrib/sidekiq/ext.rb +1 -1
- data/lib/ddtrace/contrib/sinatra/configuration/settings.rb +8 -0
- data/lib/ddtrace/contrib/sinatra/ext.rb +3 -4
- data/lib/ddtrace/contrib/sinatra/tracer.rb +1 -0
- data/lib/ddtrace/contrib/sinatra/tracer_middleware.rb +12 -0
- data/lib/ddtrace/contrib/sucker_punch/configuration/settings.rb +1 -1
- data/lib/ddtrace/contrib/sucker_punch/ext.rb +1 -1
- data/lib/ddtrace/environment.rb +15 -0
- data/lib/ddtrace/ext/analytics.rb +1 -0
- data/lib/ddtrace/opentracer/global_tracer.rb +1 -1
- data/lib/ddtrace/propagation/distributed_headers.rb +14 -4
- data/lib/ddtrace/span.rb +4 -0
- data/lib/ddtrace/tracer.rb +6 -1
- data/lib/ddtrace/version.rb +1 -1
- metadata +14 -15
- data/lib/ddtrace/configurable.rb +0 -83
- data/lib/ddtrace/configuration/proxy.rb +0 -25
- data/lib/ddtrace/contrib/base.rb +0 -16
- data/lib/ddtrace/contrib/configuration/option.rb +0 -33
- data/lib/ddtrace/contrib/configuration/option_definition.rb +0 -29
- data/lib/ddtrace/contrib/configuration/option_definition_set.rb +0 -20
- data/lib/ddtrace/contrib/configuration/option_set.rb +0 -8
- data/lib/ddtrace/contrib/configuration/options.rb +0 -95
- data/lib/ddtrace/registry.rb +0 -42
- data/lib/ddtrace/registry/registerable.rb +0 -20
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
require 'ddtrace/contrib/analytics'
|
|
1
2
|
require 'ddtrace/contrib/sinatra/ext'
|
|
2
3
|
require 'ddtrace/contrib/sinatra/env'
|
|
3
4
|
require 'ddtrace/contrib/sinatra/headers'
|
|
@@ -37,6 +38,9 @@ module Datadog
|
|
|
37
38
|
span.set_tag(name, value) if span.get_tag(name).nil?
|
|
38
39
|
end
|
|
39
40
|
|
|
41
|
+
# Set analytics sample rate
|
|
42
|
+
Contrib::Analytics.set_sample_rate(span, analytics_sample_rate) if analytics_enabled?
|
|
43
|
+
|
|
40
44
|
[status, headers, response_body]
|
|
41
45
|
end
|
|
42
46
|
end
|
|
@@ -47,6 +51,14 @@ module Datadog
|
|
|
47
51
|
configuration[:tracer]
|
|
48
52
|
end
|
|
49
53
|
|
|
54
|
+
def analytics_enabled?
|
|
55
|
+
Contrib::Analytics.enabled?(configuration[:analytics_enabled])
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
def analytics_sample_rate
|
|
59
|
+
configuration[:analytics_sample_rate]
|
|
60
|
+
end
|
|
61
|
+
|
|
50
62
|
def configuration
|
|
51
63
|
Datadog.configuration[:sinatra]
|
|
52
64
|
end
|
|
@@ -8,7 +8,7 @@ module Datadog
|
|
|
8
8
|
# Custom settings for the SuckerPunch integration
|
|
9
9
|
class Settings < Contrib::Configuration::Settings
|
|
10
10
|
option :analytics_enabled,
|
|
11
|
-
default: -> { env_to_bool(Ext::
|
|
11
|
+
default: -> { env_to_bool(Ext::ENV_ANALYTICS_ENABLED, false) },
|
|
12
12
|
lazy: true
|
|
13
13
|
|
|
14
14
|
option :analytics_sample_rate,
|
|
@@ -4,7 +4,7 @@ module Datadog
|
|
|
4
4
|
# SuckerPunch integration constants
|
|
5
5
|
module Ext
|
|
6
6
|
APP = 'sucker_punch'.freeze
|
|
7
|
-
|
|
7
|
+
ENV_ANALYTICS_ENABLED = 'DD_SUCKER_PUNCH_ANALYTICS_ENABLED'.freeze
|
|
8
8
|
ENV_ANALYTICS_SAMPLE_RATE = 'DD_SUCKER_PUNCH_ANALYTICS_SAMPLE_RATE'.freeze
|
|
9
9
|
SERVICE_NAME = 'sucker_punch'.freeze
|
|
10
10
|
SPAN_PERFORM = 'sucker_punch.perform'.freeze
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
module Datadog
|
|
2
|
+
# Namespace for handling application environment
|
|
3
|
+
module Environment
|
|
4
|
+
# Defines helper methods for environment
|
|
5
|
+
module Helpers
|
|
6
|
+
def env_to_bool(var, default = nil)
|
|
7
|
+
ENV.key?(var) ? ENV[var].to_s.downcase == 'true' : default
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def env_to_float(var, default = nil)
|
|
11
|
+
ENV.key?(var) ? ENV[var].to_f : default
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
@@ -2,6 +2,7 @@ module Datadog
|
|
|
2
2
|
module Ext
|
|
3
3
|
# Defines constants for trace analytics
|
|
4
4
|
module Analytics
|
|
5
|
+
ENV_TRACE_ANALYTICS_ENABLED = 'DD_TRACE_ANALYTICS_ENABLED'.freeze
|
|
5
6
|
# Tag for sample rate; used by agent to determine whether analytics event is emitted.
|
|
6
7
|
TAG_SAMPLE_RATE = '_dd1.sr.eausr'.freeze
|
|
7
8
|
end
|
|
@@ -16,7 +16,8 @@ module Datadog
|
|
|
16
16
|
return true if origin == 'synthetics' && trace_id
|
|
17
17
|
|
|
18
18
|
# Sampling priority and origin are optional.
|
|
19
|
-
|
|
19
|
+
# DEV: We want to explicitly return true/false here
|
|
20
|
+
trace_id && parent_id ? true : false
|
|
20
21
|
end
|
|
21
22
|
|
|
22
23
|
def trace_id
|
|
@@ -29,11 +30,19 @@ module Datadog
|
|
|
29
30
|
|
|
30
31
|
def sampling_priority
|
|
31
32
|
hdr = header(HTTP_HEADER_SAMPLING_PRIORITY)
|
|
33
|
+
|
|
32
34
|
# It's important to make a difference between no header,
|
|
33
35
|
# and a header defined to zero.
|
|
34
|
-
return
|
|
36
|
+
return if hdr.nil?
|
|
37
|
+
|
|
38
|
+
# Convert header to an integer
|
|
35
39
|
value = hdr.to_i
|
|
36
|
-
|
|
40
|
+
|
|
41
|
+
# Ensure the parsed number is the same as the original string value
|
|
42
|
+
# e.g. We want to make sure to throw away `'nan'.to_i == 0`
|
|
43
|
+
# DEV: Ruby `.to_i` will return `0` if a number could not be parsed
|
|
44
|
+
return unless value.to_s == hdr.to_s
|
|
45
|
+
|
|
37
46
|
value
|
|
38
47
|
end
|
|
39
48
|
|
|
@@ -53,7 +62,8 @@ module Datadog
|
|
|
53
62
|
|
|
54
63
|
def id(header)
|
|
55
64
|
value = header(header).to_i
|
|
56
|
-
|
|
65
|
+
# Zero or greater than max allowed value of 2**64
|
|
66
|
+
return if value.zero? || value > Span::EXTERNAL_MAX_ID
|
|
57
67
|
value < 0 ? value + 0x1_0000_0000_0000_0000 : value
|
|
58
68
|
end
|
|
59
69
|
end
|
data/lib/ddtrace/span.rb
CHANGED
|
@@ -20,6 +20,10 @@ module Datadog
|
|
|
20
20
|
# and IDs need to be easy to port across various languages and platforms.
|
|
21
21
|
MAX_ID = 2**63
|
|
22
22
|
|
|
23
|
+
# While we only generate 63-bit integers due to limitations in other languages, we support
|
|
24
|
+
# parsing 64-bit integers for distributed tracing since an upstream system may generate one
|
|
25
|
+
EXTERNAL_MAX_ID = 2**64
|
|
26
|
+
|
|
23
27
|
attr_accessor :name, :service, :resource, :span_type,
|
|
24
28
|
:start_time, :end_time,
|
|
25
29
|
:span_id, :trace_id, :parent_id,
|
data/lib/ddtrace/tracer.rb
CHANGED
|
@@ -53,8 +53,13 @@ module Datadog
|
|
|
53
53
|
end
|
|
54
54
|
|
|
55
55
|
# Activate the debug mode providing more information related to tracer usage
|
|
56
|
+
# Default to Warn level unless using custom logger
|
|
56
57
|
def self.debug_logging=(value)
|
|
57
|
-
|
|
58
|
+
if value
|
|
59
|
+
log.level = Logger::DEBUG
|
|
60
|
+
elsif log.is_a?(Datadog::Logger)
|
|
61
|
+
log.level = Logger::WARN
|
|
62
|
+
end
|
|
58
63
|
end
|
|
59
64
|
|
|
60
65
|
# Return if the debug mode is activated or not
|
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.21.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: 2019-03-
|
|
11
|
+
date: 2019-03-20 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: msgpack
|
|
@@ -302,11 +302,15 @@ files:
|
|
|
302
302
|
- lib/ddtrace/augmentation/method_wrapping.rb
|
|
303
303
|
- lib/ddtrace/augmentation/shim.rb
|
|
304
304
|
- lib/ddtrace/buffer.rb
|
|
305
|
-
- lib/ddtrace/configurable.rb
|
|
306
305
|
- lib/ddtrace/configuration.rb
|
|
306
|
+
- lib/ddtrace/configuration/dependency_resolver.rb
|
|
307
|
+
- lib/ddtrace/configuration/option.rb
|
|
308
|
+
- lib/ddtrace/configuration/option_definition.rb
|
|
309
|
+
- lib/ddtrace/configuration/option_definition_set.rb
|
|
310
|
+
- lib/ddtrace/configuration/option_set.rb
|
|
311
|
+
- lib/ddtrace/configuration/options.rb
|
|
307
312
|
- lib/ddtrace/configuration/pin_setup.rb
|
|
308
|
-
- lib/ddtrace/configuration/
|
|
309
|
-
- lib/ddtrace/configuration/resolver.rb
|
|
313
|
+
- lib/ddtrace/configuration/settings.rb
|
|
310
314
|
- lib/ddtrace/context.rb
|
|
311
315
|
- lib/ddtrace/context_flush.rb
|
|
312
316
|
- lib/ddtrace/contrib/active_model_serializers/configuration/settings.rb
|
|
@@ -338,7 +342,6 @@ files:
|
|
|
338
342
|
- lib/ddtrace/contrib/aws/parsed_context.rb
|
|
339
343
|
- lib/ddtrace/contrib/aws/patcher.rb
|
|
340
344
|
- lib/ddtrace/contrib/aws/services.rb
|
|
341
|
-
- lib/ddtrace/contrib/base.rb
|
|
342
345
|
- lib/ddtrace/contrib/concurrent_ruby/configuration/settings.rb
|
|
343
346
|
- lib/ddtrace/contrib/concurrent_ruby/context_composite_executor_service.rb
|
|
344
347
|
- lib/ddtrace/contrib/concurrent_ruby/ext.rb
|
|
@@ -346,11 +349,6 @@ files:
|
|
|
346
349
|
- lib/ddtrace/contrib/concurrent_ruby/integration.rb
|
|
347
350
|
- lib/ddtrace/contrib/concurrent_ruby/patcher.rb
|
|
348
351
|
- lib/ddtrace/contrib/configurable.rb
|
|
349
|
-
- lib/ddtrace/contrib/configuration/option.rb
|
|
350
|
-
- lib/ddtrace/contrib/configuration/option_definition.rb
|
|
351
|
-
- lib/ddtrace/contrib/configuration/option_definition_set.rb
|
|
352
|
-
- lib/ddtrace/contrib/configuration/option_set.rb
|
|
353
|
-
- lib/ddtrace/contrib/configuration/options.rb
|
|
354
352
|
- lib/ddtrace/contrib/configuration/resolver.rb
|
|
355
353
|
- lib/ddtrace/contrib/configuration/settings.rb
|
|
356
354
|
- lib/ddtrace/contrib/dalli/configuration/settings.rb
|
|
@@ -374,6 +372,7 @@ files:
|
|
|
374
372
|
- lib/ddtrace/contrib/excon/integration.rb
|
|
375
373
|
- lib/ddtrace/contrib/excon/middleware.rb
|
|
376
374
|
- lib/ddtrace/contrib/excon/patcher.rb
|
|
375
|
+
- lib/ddtrace/contrib/extensions.rb
|
|
377
376
|
- lib/ddtrace/contrib/faraday/configuration/settings.rb
|
|
378
377
|
- lib/ddtrace/contrib/faraday/ext.rb
|
|
379
378
|
- lib/ddtrace/contrib/faraday/integration.rb
|
|
@@ -411,9 +410,9 @@ files:
|
|
|
411
410
|
- lib/ddtrace/contrib/mongodb/parsers.rb
|
|
412
411
|
- lib/ddtrace/contrib/mongodb/patcher.rb
|
|
413
412
|
- lib/ddtrace/contrib/mongodb/subscribers.rb
|
|
414
|
-
- lib/ddtrace/contrib/mysql2/client.rb
|
|
415
413
|
- lib/ddtrace/contrib/mysql2/configuration/settings.rb
|
|
416
414
|
- lib/ddtrace/contrib/mysql2/ext.rb
|
|
415
|
+
- lib/ddtrace/contrib/mysql2/instrumentation.rb
|
|
417
416
|
- lib/ddtrace/contrib/mysql2/integration.rb
|
|
418
417
|
- lib/ddtrace/contrib/mysql2/patcher.rb
|
|
419
418
|
- lib/ddtrace/contrib/patchable.rb
|
|
@@ -457,6 +456,7 @@ files:
|
|
|
457
456
|
- lib/ddtrace/contrib/redis/quantize.rb
|
|
458
457
|
- lib/ddtrace/contrib/redis/tags.rb
|
|
459
458
|
- lib/ddtrace/contrib/registerable.rb
|
|
459
|
+
- lib/ddtrace/contrib/registry.rb
|
|
460
460
|
- lib/ddtrace/contrib/resque/configuration/settings.rb
|
|
461
461
|
- lib/ddtrace/contrib/resque/ext.rb
|
|
462
462
|
- lib/ddtrace/contrib/resque/integration.rb
|
|
@@ -502,6 +502,7 @@ files:
|
|
|
502
502
|
- lib/ddtrace/contrib/sucker_punch/patcher.rb
|
|
503
503
|
- lib/ddtrace/correlation.rb
|
|
504
504
|
- lib/ddtrace/encoding.rb
|
|
505
|
+
- lib/ddtrace/environment.rb
|
|
505
506
|
- lib/ddtrace/error.rb
|
|
506
507
|
- lib/ddtrace/ext/analytics.rb
|
|
507
508
|
- lib/ddtrace/ext/app_types.rb
|
|
@@ -540,8 +541,6 @@ files:
|
|
|
540
541
|
- lib/ddtrace/provider.rb
|
|
541
542
|
- lib/ddtrace/quantization/hash.rb
|
|
542
543
|
- lib/ddtrace/quantization/http.rb
|
|
543
|
-
- lib/ddtrace/registry.rb
|
|
544
|
-
- lib/ddtrace/registry/registerable.rb
|
|
545
544
|
- lib/ddtrace/sampler.rb
|
|
546
545
|
- lib/ddtrace/span.rb
|
|
547
546
|
- lib/ddtrace/sync_writer.rb
|
|
@@ -575,7 +574,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
575
574
|
version: '0'
|
|
576
575
|
requirements: []
|
|
577
576
|
rubyforge_project:
|
|
578
|
-
rubygems_version: 2.
|
|
577
|
+
rubygems_version: 2.6.14
|
|
579
578
|
signing_key:
|
|
580
579
|
specification_version: 4
|
|
581
580
|
summary: Datadog tracing code for your Ruby applications
|
data/lib/ddtrace/configurable.rb
DELETED
|
@@ -1,83 +0,0 @@
|
|
|
1
|
-
module Datadog
|
|
2
|
-
InvalidOptionError = Class.new(StandardError)
|
|
3
|
-
# Configurable provides configuration methods for a given class/module
|
|
4
|
-
module Configurable
|
|
5
|
-
IDENTITY = ->(x) { x }
|
|
6
|
-
|
|
7
|
-
def self.included(base)
|
|
8
|
-
base.singleton_class.send(:include, ClassMethods)
|
|
9
|
-
end
|
|
10
|
-
|
|
11
|
-
# ClassMethods
|
|
12
|
-
module ClassMethods
|
|
13
|
-
def set_option(name, value)
|
|
14
|
-
__assert_valid!(name)
|
|
15
|
-
|
|
16
|
-
__options[name][:value] = __options[name][:setter].call(value)
|
|
17
|
-
__options[name][:set_flag] = true
|
|
18
|
-
end
|
|
19
|
-
|
|
20
|
-
def get_option(name)
|
|
21
|
-
__assert_valid!(name)
|
|
22
|
-
|
|
23
|
-
return __default_value(name) unless __options[name][:set_flag]
|
|
24
|
-
|
|
25
|
-
__options[name][:value]
|
|
26
|
-
end
|
|
27
|
-
|
|
28
|
-
def to_h
|
|
29
|
-
__options.each_with_object({}) do |(key, _), hash|
|
|
30
|
-
hash[key] = get_option(key)
|
|
31
|
-
end
|
|
32
|
-
end
|
|
33
|
-
|
|
34
|
-
def reset_options!
|
|
35
|
-
__options.each do |name, meta|
|
|
36
|
-
set_option(name, meta[:default])
|
|
37
|
-
end
|
|
38
|
-
end
|
|
39
|
-
|
|
40
|
-
def sorted_options
|
|
41
|
-
Configuration::Resolver.new(__dependency_graph).call
|
|
42
|
-
end
|
|
43
|
-
|
|
44
|
-
private
|
|
45
|
-
|
|
46
|
-
def option(name, meta = {}, &block)
|
|
47
|
-
name = name.to_sym
|
|
48
|
-
meta[:setter] ||= (block || IDENTITY)
|
|
49
|
-
meta[:depends_on] ||= []
|
|
50
|
-
meta[:lazy] ||= false
|
|
51
|
-
__options[name] = meta
|
|
52
|
-
end
|
|
53
|
-
|
|
54
|
-
def __options
|
|
55
|
-
@__options ||= {}
|
|
56
|
-
end
|
|
57
|
-
|
|
58
|
-
def __assert_valid!(name)
|
|
59
|
-
return if __options.key?(name)
|
|
60
|
-
raise(InvalidOptionError, "#{__pretty_name} doesn't have the option: #{name}")
|
|
61
|
-
end
|
|
62
|
-
|
|
63
|
-
def __pretty_name
|
|
64
|
-
entry = Datadog.registry.find { |el| el.klass == self }
|
|
65
|
-
|
|
66
|
-
return entry.name if entry
|
|
67
|
-
|
|
68
|
-
to_s
|
|
69
|
-
end
|
|
70
|
-
|
|
71
|
-
def __dependency_graph
|
|
72
|
-
__options.each_with_object({}) do |(name, meta), graph|
|
|
73
|
-
graph[name] = meta[:depends_on]
|
|
74
|
-
end
|
|
75
|
-
end
|
|
76
|
-
|
|
77
|
-
def __default_value(name)
|
|
78
|
-
return __options[name][:default].call if __options[name][:lazy]
|
|
79
|
-
__options[name][:default]
|
|
80
|
-
end
|
|
81
|
-
end
|
|
82
|
-
end
|
|
83
|
-
end
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
require 'forwardable'
|
|
2
|
-
|
|
3
|
-
module Datadog
|
|
4
|
-
class Configuration
|
|
5
|
-
# Proxy provides a hash-like interface for fetching/setting configurations
|
|
6
|
-
class Proxy
|
|
7
|
-
extend Forwardable
|
|
8
|
-
|
|
9
|
-
def initialize(integration)
|
|
10
|
-
@integration = integration
|
|
11
|
-
end
|
|
12
|
-
|
|
13
|
-
def [](param)
|
|
14
|
-
@integration.get_option(param)
|
|
15
|
-
end
|
|
16
|
-
|
|
17
|
-
def []=(param, value)
|
|
18
|
-
@integration.set_option(param, value)
|
|
19
|
-
end
|
|
20
|
-
|
|
21
|
-
def_delegators :@integration, :to_h, :reset_options!
|
|
22
|
-
def_delegators :to_h, :to_hash, :merge
|
|
23
|
-
end
|
|
24
|
-
end
|
|
25
|
-
end
|
data/lib/ddtrace/contrib/base.rb
DELETED
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
require 'ddtrace/configurable'
|
|
2
|
-
require 'ddtrace/patcher'
|
|
3
|
-
require 'ddtrace/registry/registerable'
|
|
4
|
-
|
|
5
|
-
module Datadog
|
|
6
|
-
module Contrib
|
|
7
|
-
# Base provides features that are shared across all integrations
|
|
8
|
-
module Base
|
|
9
|
-
def self.included(base)
|
|
10
|
-
base.send(:include, Registry::Registerable)
|
|
11
|
-
base.send(:include, Datadog::Configurable)
|
|
12
|
-
base.send(:include, Datadog::Patcher)
|
|
13
|
-
end
|
|
14
|
-
end
|
|
15
|
-
end
|
|
16
|
-
end
|
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
module Datadog
|
|
2
|
-
module Contrib
|
|
3
|
-
module Configuration
|
|
4
|
-
# Represents an instance of an integration configuration option
|
|
5
|
-
class Option
|
|
6
|
-
attr_reader \
|
|
7
|
-
:definition
|
|
8
|
-
|
|
9
|
-
def initialize(definition, context)
|
|
10
|
-
@definition = definition
|
|
11
|
-
@context = context
|
|
12
|
-
@value = nil
|
|
13
|
-
@is_set = false
|
|
14
|
-
end
|
|
15
|
-
|
|
16
|
-
def set(value)
|
|
17
|
-
@value = @context.instance_exec(value, &definition.setter).tap do
|
|
18
|
-
@is_set = true
|
|
19
|
-
end
|
|
20
|
-
end
|
|
21
|
-
|
|
22
|
-
def get
|
|
23
|
-
return definition.default_value unless @is_set
|
|
24
|
-
@value
|
|
25
|
-
end
|
|
26
|
-
|
|
27
|
-
def reset
|
|
28
|
-
set(definition.default_value)
|
|
29
|
-
end
|
|
30
|
-
end
|
|
31
|
-
end
|
|
32
|
-
end
|
|
33
|
-
end
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
module Datadog
|
|
2
|
-
module Contrib
|
|
3
|
-
module Configuration
|
|
4
|
-
# Represents a definition for an integration configuration option
|
|
5
|
-
class OptionDefinition
|
|
6
|
-
IDENTITY = ->(x) { x }
|
|
7
|
-
|
|
8
|
-
attr_reader \
|
|
9
|
-
:default,
|
|
10
|
-
:depends_on,
|
|
11
|
-
:lazy,
|
|
12
|
-
:name,
|
|
13
|
-
:setter
|
|
14
|
-
|
|
15
|
-
def initialize(name, meta = {}, &block)
|
|
16
|
-
@default = meta[:default]
|
|
17
|
-
@depends_on = meta[:depends_on] || []
|
|
18
|
-
@lazy = meta[:lazy] || false
|
|
19
|
-
@name = name.to_sym
|
|
20
|
-
@setter = meta[:setter] || block || IDENTITY
|
|
21
|
-
end
|
|
22
|
-
|
|
23
|
-
def default_value
|
|
24
|
-
lazy ? @default.call : @default
|
|
25
|
-
end
|
|
26
|
-
end
|
|
27
|
-
end
|
|
28
|
-
end
|
|
29
|
-
end
|