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
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
require 'ddtrace/configuration/dependency_resolver'
|
|
2
|
+
|
|
3
|
+
module Datadog
|
|
4
|
+
module Configuration
|
|
5
|
+
# Represents a set of configuration option definitions for an integration
|
|
6
|
+
class OptionDefinitionSet < Hash
|
|
7
|
+
def dependency_order
|
|
8
|
+
DependencyResolver.new(dependency_graph).call
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def dependency_graph
|
|
12
|
+
each_with_object({}) do |(name, option), graph|
|
|
13
|
+
graph[name] = option.depends_on
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
require 'ddtrace/configuration/option'
|
|
2
|
+
require 'ddtrace/configuration/option_set'
|
|
3
|
+
require 'ddtrace/configuration/option_definition'
|
|
4
|
+
require 'ddtrace/configuration/option_definition_set'
|
|
5
|
+
|
|
6
|
+
module Datadog
|
|
7
|
+
module Configuration
|
|
8
|
+
# Behavior for a configuration object that has options
|
|
9
|
+
module Options
|
|
10
|
+
def self.included(base)
|
|
11
|
+
base.send(:extend, ClassMethods)
|
|
12
|
+
base.send(:include, InstanceMethods)
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
# Class behavior for a configuration object with options
|
|
16
|
+
module ClassMethods
|
|
17
|
+
def options
|
|
18
|
+
@options ||= begin
|
|
19
|
+
# Allows for class inheritance of option definitions
|
|
20
|
+
superclass <= Options ? superclass.options.dup : OptionDefinitionSet.new
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
protected
|
|
25
|
+
|
|
26
|
+
def option(name, meta = {}, &block)
|
|
27
|
+
options[name] = OptionDefinition.new(name, meta, &block).tap do
|
|
28
|
+
define_option_accessors(name)
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
private
|
|
33
|
+
|
|
34
|
+
def define_option_accessors(name)
|
|
35
|
+
option_name = name
|
|
36
|
+
|
|
37
|
+
define_method(option_name) do
|
|
38
|
+
get_option(option_name)
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
define_method("#{option_name}=") do |value|
|
|
42
|
+
set_option(option_name, value)
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
# Instance behavior for a configuration object with options
|
|
48
|
+
module InstanceMethods
|
|
49
|
+
def options
|
|
50
|
+
@options ||= OptionSet.new
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
def set_option(name, value)
|
|
54
|
+
add_option(name) unless options.key?(name)
|
|
55
|
+
options[name].set(value)
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
def get_option(name)
|
|
59
|
+
add_option(name) unless options.key?(name)
|
|
60
|
+
options[name].get
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
def to_h
|
|
64
|
+
options.each_with_object({}) do |(key, _), hash|
|
|
65
|
+
hash[key] = get_option(key)
|
|
66
|
+
end
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
def reset_options!
|
|
70
|
+
options.values.each(&:reset)
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
private
|
|
74
|
+
|
|
75
|
+
def add_option(name)
|
|
76
|
+
assert_valid_option!(name)
|
|
77
|
+
definition = self.class.options[name]
|
|
78
|
+
Option.new(definition, self).tap do |option|
|
|
79
|
+
options[name] = option
|
|
80
|
+
end
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
def assert_valid_option!(name)
|
|
84
|
+
unless self.class.options.key?(name)
|
|
85
|
+
raise(InvalidOptionError, "#{self.class.name} doesn't define the option: #{name}")
|
|
86
|
+
end
|
|
87
|
+
end
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
InvalidOptionError = Class.new(StandardError)
|
|
91
|
+
end
|
|
92
|
+
end
|
|
93
|
+
end
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
require 'ddtrace/ext/analytics'
|
|
2
|
+
require 'ddtrace/environment'
|
|
3
|
+
require 'ddtrace/configuration/options'
|
|
4
|
+
|
|
5
|
+
module Datadog
|
|
6
|
+
module Configuration
|
|
7
|
+
# Global configuration settings for the trace library.
|
|
8
|
+
class Settings
|
|
9
|
+
extend Datadog::Environment::Helpers
|
|
10
|
+
include Options
|
|
11
|
+
|
|
12
|
+
option :analytics_enabled,
|
|
13
|
+
default: -> { env_to_bool(Ext::Analytics::ENV_TRACE_ANALYTICS_ENABLED, nil) },
|
|
14
|
+
lazy: true
|
|
15
|
+
|
|
16
|
+
option :tracer, default: Tracer.new
|
|
17
|
+
|
|
18
|
+
def initialize(options = {})
|
|
19
|
+
configure(options)
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def configure(options = {})
|
|
23
|
+
self.class.options.dependency_order.each do |name|
|
|
24
|
+
next unless options.key?(name)
|
|
25
|
+
respond_to?("#{name}=") ? send("#{name}=", options[name]) : set_option(name, options[name])
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
yield(self) if block_given?
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
# Backwards compatibility for configuring tracer e.g. `c.tracer debug: true`
|
|
32
|
+
def tracer(options = nil)
|
|
33
|
+
tracer = options && options.key?(:instance) ? set_option(:tracer, options[:instance]) : get_option(:tracer)
|
|
34
|
+
|
|
35
|
+
tracer.tap do |t|
|
|
36
|
+
unless options.nil?
|
|
37
|
+
t.configure(options)
|
|
38
|
+
t.class.log = options[:log] if options[:log]
|
|
39
|
+
t.set_tags(options[:tags]) if options[:tags]
|
|
40
|
+
t.set_tags(env: options[:env]) if options[:env]
|
|
41
|
+
t.class.debug_logging = options.fetch(:debug, false)
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
end
|
|
@@ -7,6 +7,14 @@ module Datadog
|
|
|
7
7
|
module Configuration
|
|
8
8
|
# Custom settings for the ActiveModelSerializers integration
|
|
9
9
|
class Settings < Contrib::Configuration::Settings
|
|
10
|
+
option :analytics_enabled,
|
|
11
|
+
default: -> { env_to_bool(Ext::ENV_ANALYTICS_ENABLED, false) },
|
|
12
|
+
lazy: true
|
|
13
|
+
|
|
14
|
+
option :analytics_sample_rate,
|
|
15
|
+
default: -> { env_to_float(Ext::ENV_ANALYTICS_SAMPLE_RATE, 1.0) },
|
|
16
|
+
lazy: true
|
|
17
|
+
|
|
10
18
|
option :service_name, default: Ext::SERVICE_NAME
|
|
11
19
|
option :tracer, default: Datadog.tracer do |value|
|
|
12
20
|
(value || Datadog.tracer).tap do |v|
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
require 'ddtrace/ext/http'
|
|
2
|
+
require 'ddtrace/contrib/analytics'
|
|
2
3
|
require 'ddtrace/contrib/active_support/notifications/event'
|
|
3
4
|
require 'ddtrace/contrib/active_model_serializers/ext'
|
|
4
5
|
|
|
@@ -30,6 +31,11 @@ module Datadog
|
|
|
30
31
|
def process(span, event, _id, payload)
|
|
31
32
|
span.service = configuration[:service_name]
|
|
32
33
|
|
|
34
|
+
# Set analytics sample rate
|
|
35
|
+
if Contrib::Analytics.enabled?(configuration[:analytics_enabled])
|
|
36
|
+
Contrib::Analytics.set_sample_rate(span, configuration[:analytics_sample_rate])
|
|
37
|
+
end
|
|
38
|
+
|
|
33
39
|
# Set the resource name and serializer name
|
|
34
40
|
res = resource(payload[:serializer])
|
|
35
41
|
span.resource = res
|
|
@@ -4,11 +4,11 @@ module Datadog
|
|
|
4
4
|
# ActiveModelSerializers integration constants
|
|
5
5
|
module Ext
|
|
6
6
|
APP = 'active_model_serializers'.freeze
|
|
7
|
+
ENV_ANALYTICS_ENABLED = 'DD_ACTIVE_MODEL_SERIALIZERS_ANALYTICS_ENABLED'.freeze
|
|
8
|
+
ENV_ANALYTICS_SAMPLE_RATE = 'DD_ACTIVE_MODEL_SERIALIZERS_ANALYTICS_SAMPLE_RATE'.freeze
|
|
7
9
|
SERVICE_NAME = 'active_model_serializers'.freeze
|
|
8
|
-
|
|
9
10
|
SPAN_RENDER = 'active_model_serializers.render'.freeze
|
|
10
11
|
SPAN_SERIALIZE = 'active_model_serializers.serialize'.freeze
|
|
11
|
-
|
|
12
12
|
TAG_ADAPTER = 'active_model_serializers.adapter'.freeze
|
|
13
13
|
TAG_SERIALIZER = 'active_model_serializers.serializer'.freeze
|
|
14
14
|
end
|
|
@@ -8,6 +8,14 @@ module Datadog
|
|
|
8
8
|
module Configuration
|
|
9
9
|
# Custom settings for the ActiveRecord integration
|
|
10
10
|
class Settings < Contrib::Configuration::Settings
|
|
11
|
+
option :analytics_enabled,
|
|
12
|
+
default: -> { env_to_bool(Ext::ENV_ANALYTICS_ENABLED, false) },
|
|
13
|
+
lazy: true
|
|
14
|
+
|
|
15
|
+
option :analytics_sample_rate,
|
|
16
|
+
default: -> { env_to_float(Ext::ENV_ANALYTICS_SAMPLE_RATE, 1.0) },
|
|
17
|
+
lazy: true
|
|
18
|
+
|
|
11
19
|
option :orm_service_name
|
|
12
20
|
option :service_name, depends_on: [:tracer] do |value|
|
|
13
21
|
(value || Utils.adapter_name).tap do |service_name|
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
require 'ddtrace/contrib/analytics'
|
|
1
2
|
require 'ddtrace/contrib/active_record/ext'
|
|
2
3
|
require 'ddtrace/contrib/active_record/event'
|
|
3
4
|
|
|
@@ -38,6 +39,12 @@ module Datadog
|
|
|
38
39
|
|
|
39
40
|
span.resource = payload.fetch(:class_name)
|
|
40
41
|
span.span_type = Ext::SPAN_TYPE_INSTANTIATION
|
|
42
|
+
|
|
43
|
+
# Set analytics sample rate
|
|
44
|
+
if Contrib::Analytics.enabled?(configuration[:analytics_enabled])
|
|
45
|
+
Contrib::Analytics.set_sample_rate(span, configuration[:analytics_sample_rate])
|
|
46
|
+
end
|
|
47
|
+
|
|
41
48
|
span.set_tag(Ext::TAG_INSTANTIATION_CLASS_NAME, payload.fetch(:class_name))
|
|
42
49
|
span.set_tag(Ext::TAG_INSTANTIATION_RECORD_COUNT, payload.fetch(:record_count))
|
|
43
50
|
rescue StandardError => e
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
require 'ddtrace/ext/net'
|
|
2
|
+
require 'ddtrace/contrib/analytics'
|
|
2
3
|
require 'ddtrace/contrib/active_record/ext'
|
|
3
4
|
require 'ddtrace/contrib/active_record/event'
|
|
4
5
|
|
|
@@ -38,6 +39,11 @@ module Datadog
|
|
|
38
39
|
span.resource = payload.fetch(:sql)
|
|
39
40
|
span.span_type = Datadog::Ext::SQL::TYPE
|
|
40
41
|
|
|
42
|
+
# Set analytics sample rate
|
|
43
|
+
if Contrib::Analytics.enabled?(configuration[:analytics_enabled])
|
|
44
|
+
Contrib::Analytics.set_sample_rate(span, configuration[:analytics_sample_rate])
|
|
45
|
+
end
|
|
46
|
+
|
|
41
47
|
# Find out if the SQL query has been cached in this request. This meta is really
|
|
42
48
|
# helpful to users because some spans may have 0ns of duration because the query
|
|
43
49
|
# is simply cached from memory, so the notification is fired with start == finish.
|
|
@@ -4,13 +4,12 @@ module Datadog
|
|
|
4
4
|
# ActiveRecord integration constants
|
|
5
5
|
module Ext
|
|
6
6
|
APP = 'active_record'.freeze
|
|
7
|
+
ENV_ANALYTICS_ENABLED = 'DD_ACTIVE_RECORD_ANALYTICS_ENABLED'.freeze
|
|
8
|
+
ENV_ANALYTICS_SAMPLE_RATE = 'DD_ACTIVE_RECORD_ANALYTICS_SAMPLE_RATE'.freeze
|
|
7
9
|
SERVICE_NAME = 'active_record'.freeze
|
|
8
|
-
|
|
9
10
|
SPAN_INSTANTIATION = 'active_record.instantiation'.freeze
|
|
10
11
|
SPAN_SQL = 'active_record.sql'.freeze
|
|
11
|
-
|
|
12
12
|
SPAN_TYPE_INSTANTIATION = 'custom'.freeze
|
|
13
|
-
|
|
14
13
|
TAG_DB_CACHED = 'active_record.db.cached'.freeze
|
|
15
14
|
TAG_DB_NAME = 'active_record.db.name'.freeze
|
|
16
15
|
TAG_DB_VENDOR = 'active_record.db.vendor'.freeze
|
|
@@ -9,13 +9,12 @@ module Datadog
|
|
|
9
9
|
# Checks whether analytics should be enabled.
|
|
10
10
|
# `flag` is a truthy/falsey value that represents a setting on the integration.
|
|
11
11
|
def enabled?(flag = nil)
|
|
12
|
-
|
|
13
|
-
# (global_flag && flag != false) || flag == true
|
|
14
|
-
flag == true
|
|
12
|
+
(Datadog.configuration.analytics_enabled && flag != false) || flag == true
|
|
15
13
|
end
|
|
16
14
|
|
|
17
15
|
def set_sample_rate(span, sample_rate)
|
|
18
|
-
span.
|
|
16
|
+
return if span.nil? || sample_rate.nil?
|
|
17
|
+
span.set_metric(Datadog::Ext::Analytics::TAG_SAMPLE_RATE, sample_rate)
|
|
19
18
|
end
|
|
20
19
|
end
|
|
21
20
|
end
|
|
@@ -7,6 +7,14 @@ module Datadog
|
|
|
7
7
|
module Configuration
|
|
8
8
|
# Custom settings for the AWS integration
|
|
9
9
|
class Settings < Contrib::Configuration::Settings
|
|
10
|
+
option :analytics_enabled,
|
|
11
|
+
default: -> { env_to_bool(Ext::ENV_ANALYTICS_ENABLED, false) },
|
|
12
|
+
lazy: true
|
|
13
|
+
|
|
14
|
+
option :analytics_sample_rate,
|
|
15
|
+
default: -> { env_to_float(Ext::ENV_ANALYTICS_SAMPLE_RATE, 1.0) },
|
|
16
|
+
lazy: true
|
|
17
|
+
|
|
10
18
|
option :service_name, default: Ext::SERVICE_NAME
|
|
11
19
|
end
|
|
12
20
|
end
|
|
@@ -4,17 +4,16 @@ module Datadog
|
|
|
4
4
|
# AWS integration constants
|
|
5
5
|
module Ext
|
|
6
6
|
APP = 'aws'.freeze
|
|
7
|
+
ENV_ANALYTICS_ENABLED = 'DD_AWS_ANALYTICS_ENABLED'.freeze
|
|
8
|
+
ENV_ANALYTICS_SAMPLE_RATE = 'DD_AWS_ANALYTICS_SAMPLE_RATE'.freeze
|
|
7
9
|
SERVICE_NAME = 'aws'.freeze
|
|
8
|
-
|
|
9
10
|
SPAN_COMMAND = 'aws.command'.freeze
|
|
10
|
-
|
|
11
11
|
TAG_AGENT = 'aws.agent'.freeze
|
|
12
|
+
TAG_DEFAULT_AGENT = 'aws-sdk-ruby'.freeze
|
|
13
|
+
TAG_HOST = 'host'.freeze
|
|
12
14
|
TAG_OPERATION = 'aws.operation'.freeze
|
|
13
|
-
TAG_REGION = 'aws.region'.freeze
|
|
14
15
|
TAG_PATH = 'path'.freeze
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
TAG_DEFAULT_AGENT = 'aws-sdk-ruby'.freeze
|
|
16
|
+
TAG_REGION = 'aws.region'.freeze
|
|
18
17
|
end
|
|
19
18
|
end
|
|
20
19
|
end
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
require 'ddtrace/contrib/analytics'
|
|
1
2
|
require 'ddtrace/contrib/aws/ext'
|
|
2
3
|
|
|
3
4
|
module Datadog
|
|
@@ -27,6 +28,12 @@ module Datadog
|
|
|
27
28
|
span.span_type = Datadog::Ext::AppTypes::WEB
|
|
28
29
|
span.name = Ext::SPAN_COMMAND
|
|
29
30
|
span.resource = context.safely(:resource)
|
|
31
|
+
|
|
32
|
+
# Set analytics sample rate
|
|
33
|
+
if Contrib::Analytics.enabled?(configuration[:analytics_enabled])
|
|
34
|
+
Contrib::Analytics.set_sample_rate(span, configuration[:analytics_sample_rate])
|
|
35
|
+
end
|
|
36
|
+
|
|
30
37
|
span.set_tag(Ext::TAG_AGENT, Ext::TAG_DEFAULT_AGENT)
|
|
31
38
|
span.set_tag(Ext::TAG_OPERATION, context.safely(:operation))
|
|
32
39
|
span.set_tag(Ext::TAG_REGION, context.safely(:region))
|
|
@@ -1,11 +1,13 @@
|
|
|
1
|
-
require 'ddtrace/
|
|
1
|
+
require 'ddtrace/environment'
|
|
2
|
+
require 'ddtrace/configuration/options'
|
|
2
3
|
|
|
3
4
|
module Datadog
|
|
4
5
|
module Contrib
|
|
5
6
|
module Configuration
|
|
6
7
|
# Common settings for all integrations
|
|
7
8
|
class Settings
|
|
8
|
-
|
|
9
|
+
extend Datadog::Environment::Helpers
|
|
10
|
+
include Datadog::Configuration::Options
|
|
9
11
|
|
|
10
12
|
option :service_name
|
|
11
13
|
option :tracer, default: Datadog.tracer
|
|
@@ -31,18 +33,6 @@ module Datadog
|
|
|
31
33
|
def []=(name, value)
|
|
32
34
|
respond_to?("#{name}=") ? send("#{name}=", value) : set_option(name, value)
|
|
33
35
|
end
|
|
34
|
-
|
|
35
|
-
class << self
|
|
36
|
-
private
|
|
37
|
-
|
|
38
|
-
def env_to_bool(var, default = nil)
|
|
39
|
-
ENV.key?(var) ? ENV[var].to_s.downcase == 'true' : default
|
|
40
|
-
end
|
|
41
|
-
|
|
42
|
-
def env_to_float(var, default = nil)
|
|
43
|
-
ENV.key?(var) ? ENV[var].to_f : default
|
|
44
|
-
end
|
|
45
|
-
end
|
|
46
36
|
end
|
|
47
37
|
end
|
|
48
38
|
end
|
|
@@ -7,6 +7,14 @@ module Datadog
|
|
|
7
7
|
module Configuration
|
|
8
8
|
# Custom settings for the Dalli integration
|
|
9
9
|
class Settings < Contrib::Configuration::Settings
|
|
10
|
+
option :analytics_enabled,
|
|
11
|
+
default: -> { env_to_bool(Ext::ENV_ANALYTICS_ENABLED, false) },
|
|
12
|
+
lazy: true
|
|
13
|
+
|
|
14
|
+
option :analytics_sample_rate,
|
|
15
|
+
default: -> { env_to_float(Ext::ENV_ANALYTICS_SAMPLE_RATE, 1.0) },
|
|
16
|
+
lazy: true
|
|
17
|
+
|
|
10
18
|
option :service_name, default: Ext::SERVICE_NAME
|
|
11
19
|
end
|
|
12
20
|
end
|
|
@@ -4,9 +4,10 @@ module Datadog
|
|
|
4
4
|
# Dalli integration constants
|
|
5
5
|
module Ext
|
|
6
6
|
APP = 'dalli'.freeze
|
|
7
|
-
|
|
8
|
-
|
|
7
|
+
ENV_ANALYTICS_ENABLED = 'DD_DALLI_ANALYTICS_ENABLED'.freeze
|
|
8
|
+
ENV_ANALYTICS_SAMPLE_RATE = 'DD_DALLI_ANALYTICS_SAMPLE_RATE'.freeze
|
|
9
9
|
QUANTIZE_MAX_CMD_LENGTH = 100
|
|
10
|
+
SERVICE_NAME = 'memcached'.freeze
|
|
10
11
|
SPAN_COMMAND = 'memcached.command'.freeze
|
|
11
12
|
TAG_COMMAND = 'memcached.command'.freeze
|
|
12
13
|
end
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
require 'ddtrace/ext/app_types'
|
|
2
2
|
require 'ddtrace/ext/net'
|
|
3
|
+
require 'ddtrace/contrib/analytics'
|
|
3
4
|
require 'ddtrace/contrib/dalli/quantize'
|
|
4
5
|
|
|
5
6
|
module Datadog
|
|
@@ -35,6 +36,12 @@ module Datadog
|
|
|
35
36
|
span.resource = op.to_s.upcase
|
|
36
37
|
span.service = datadog_configuration[:service_name]
|
|
37
38
|
span.span_type = Datadog::Ext::AppTypes::CACHE
|
|
39
|
+
|
|
40
|
+
# Set analytics sample rate
|
|
41
|
+
if Contrib::Analytics.enabled?(datadog_configuration[:analytics_enabled])
|
|
42
|
+
Contrib::Analytics.set_sample_rate(span, datadog_configuration[:analytics_sample_rate])
|
|
43
|
+
end
|
|
44
|
+
|
|
38
45
|
span.set_tag(Datadog::Ext::NET::TARGET_HOST, hostname)
|
|
39
46
|
span.set_tag(Datadog::Ext::NET::TARGET_PORT, port)
|
|
40
47
|
cmd = Datadog::Contrib::Dalli::Quantize.format_command(op, args)
|