ddtrace 0.35.2 → 0.40.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/.circleci/config.yml +59 -1
- data/.gitignore +2 -0
- data/.gitlab-ci.yml +27 -0
- data/.rubocop.yml +4 -0
- data/.simplecov +38 -0
- data/Appraisals +139 -12
- data/CHANGELOG.md +185 -1
- data/Rakefile +524 -464
- data/ddtrace.gemspec +6 -0
- data/docker-compose.yml +37 -2
- data/docs/DevelopmentGuide.md +16 -0
- data/docs/GettingStarted.md +192 -111
- data/lib/ddtrace.rb +4 -0
- data/lib/ddtrace/configuration.rb +36 -5
- data/lib/ddtrace/configuration/components.rb +4 -7
- data/lib/ddtrace/configuration/pin_setup.rb +3 -2
- data/lib/ddtrace/configuration/settings.rb +27 -3
- data/lib/ddtrace/contrib/action_cable/configuration/settings.rb +7 -2
- data/lib/ddtrace/contrib/action_cable/ext.rb +5 -2
- data/lib/ddtrace/contrib/action_pack/configuration/settings.rb +7 -2
- data/lib/ddtrace/contrib/action_pack/ext.rb +5 -2
- data/lib/ddtrace/contrib/action_view/configuration/settings.rb +7 -2
- data/lib/ddtrace/contrib/action_view/ext.rb +5 -2
- data/lib/ddtrace/contrib/active_model_serializers/configuration/settings.rb +7 -2
- data/lib/ddtrace/contrib/active_model_serializers/ext.rb +5 -2
- data/lib/ddtrace/contrib/active_record/configuration/settings.rb +7 -2
- data/lib/ddtrace/contrib/active_record/ext.rb +5 -2
- data/lib/ddtrace/contrib/active_support/cache/redis.rb +1 -1
- data/lib/ddtrace/contrib/active_support/configuration/settings.rb +7 -2
- data/lib/ddtrace/contrib/active_support/ext.rb +5 -2
- data/lib/ddtrace/contrib/active_support/notifications/event.rb +3 -1
- data/lib/ddtrace/contrib/active_support/notifications/subscription.rb +1 -1
- data/lib/ddtrace/contrib/aws/configuration/settings.rb +7 -2
- data/lib/ddtrace/contrib/aws/ext.rb +5 -2
- data/lib/ddtrace/contrib/concurrent_ruby/configuration/settings.rb +5 -0
- data/lib/ddtrace/contrib/concurrent_ruby/context_composite_executor_service.rb +9 -3
- data/lib/ddtrace/contrib/concurrent_ruby/ext.rb +1 -0
- data/lib/ddtrace/contrib/configuration/settings.rb +19 -0
- data/lib/ddtrace/contrib/dalli/configuration/settings.rb +7 -2
- data/lib/ddtrace/contrib/dalli/ext.rb +5 -2
- data/lib/ddtrace/contrib/dalli/patcher.rb +1 -5
- data/lib/ddtrace/contrib/delayed_job/configuration/settings.rb +7 -2
- data/lib/ddtrace/contrib/delayed_job/ext.rb +5 -2
- data/lib/ddtrace/contrib/elasticsearch/configuration/settings.rb +7 -2
- data/lib/ddtrace/contrib/elasticsearch/ext.rb +5 -2
- data/lib/ddtrace/contrib/elasticsearch/patcher.rb +1 -2
- data/lib/ddtrace/contrib/ethon/configuration/settings.rb +7 -2
- data/lib/ddtrace/contrib/ethon/ext.rb +5 -2
- data/lib/ddtrace/contrib/excon/configuration/settings.rb +7 -2
- data/lib/ddtrace/contrib/excon/ext.rb +5 -2
- data/lib/ddtrace/contrib/extensions.rb +39 -5
- data/lib/ddtrace/contrib/faraday/configuration/settings.rb +7 -2
- data/lib/ddtrace/contrib/faraday/ext.rb +5 -2
- data/lib/ddtrace/contrib/faraday/middleware.rb +5 -3
- data/lib/ddtrace/contrib/faraday/patcher.rb +13 -5
- data/lib/ddtrace/contrib/grape/configuration/settings.rb +7 -3
- data/lib/ddtrace/contrib/grape/ext.rb +5 -2
- data/lib/ddtrace/contrib/grape/patcher.rb +1 -1
- data/lib/ddtrace/contrib/graphql/configuration/settings.rb +7 -2
- data/lib/ddtrace/contrib/graphql/ext.rb +5 -2
- data/lib/ddtrace/contrib/graphql/patcher.rb +6 -3
- data/lib/ddtrace/contrib/grpc/configuration/settings.rb +7 -2
- data/lib/ddtrace/contrib/grpc/datadog_interceptor.rb +1 -1
- data/lib/ddtrace/contrib/grpc/datadog_interceptor/client.rb +1 -3
- data/lib/ddtrace/contrib/grpc/ext.rb +5 -2
- data/lib/ddtrace/contrib/grpc/patcher.rb +1 -5
- data/lib/ddtrace/contrib/http/configuration/settings.rb +7 -2
- data/lib/ddtrace/contrib/http/ext.rb +5 -2
- data/lib/ddtrace/contrib/http/instrumentation.rb +12 -7
- data/lib/ddtrace/contrib/httprb/configuration/settings.rb +32 -0
- data/lib/ddtrace/contrib/httprb/ext.rb +17 -0
- data/lib/ddtrace/contrib/httprb/instrumentation.rb +160 -0
- data/lib/ddtrace/contrib/httprb/integration.rb +43 -0
- data/lib/ddtrace/contrib/httprb/patcher.rb +35 -0
- data/lib/ddtrace/contrib/kafka/configuration/settings.rb +30 -0
- data/lib/ddtrace/contrib/kafka/consumer_event.rb +14 -0
- data/lib/ddtrace/contrib/kafka/consumer_group_event.rb +14 -0
- data/lib/ddtrace/contrib/kafka/event.rb +51 -0
- data/lib/ddtrace/contrib/kafka/events.rb +44 -0
- data/lib/ddtrace/contrib/kafka/events/connection/request.rb +34 -0
- data/lib/ddtrace/contrib/kafka/events/consumer/process_batch.rb +41 -0
- data/lib/ddtrace/contrib/kafka/events/consumer/process_message.rb +39 -0
- data/lib/ddtrace/contrib/kafka/events/consumer_group/heartbeat.rb +39 -0
- data/lib/ddtrace/contrib/kafka/events/consumer_group/join_group.rb +29 -0
- data/lib/ddtrace/contrib/kafka/events/consumer_group/leave_group.rb +29 -0
- data/lib/ddtrace/contrib/kafka/events/consumer_group/sync_group.rb +29 -0
- data/lib/ddtrace/contrib/kafka/events/produce_operation/send_messages.rb +32 -0
- data/lib/ddtrace/contrib/kafka/events/producer/deliver_messages.rb +35 -0
- data/lib/ddtrace/contrib/kafka/ext.rb +41 -0
- data/lib/ddtrace/contrib/kafka/integration.rb +39 -0
- data/lib/ddtrace/contrib/kafka/patcher.rb +26 -0
- data/lib/ddtrace/contrib/mongodb/configuration/settings.rb +7 -2
- data/lib/ddtrace/contrib/mongodb/ext.rb +5 -2
- data/lib/ddtrace/contrib/mongodb/instrumentation.rb +1 -2
- data/lib/ddtrace/contrib/mysql2/configuration/settings.rb +7 -2
- data/lib/ddtrace/contrib/mysql2/ext.rb +5 -2
- data/lib/ddtrace/contrib/mysql2/instrumentation.rb +1 -1
- data/lib/ddtrace/contrib/patcher.rb +14 -8
- data/lib/ddtrace/contrib/presto/configuration/settings.rb +7 -2
- data/lib/ddtrace/contrib/presto/ext.rb +5 -2
- data/lib/ddtrace/contrib/que/configuration/settings.rb +42 -0
- data/lib/ddtrace/contrib/que/ext.rb +30 -0
- data/lib/ddtrace/contrib/que/integration.rb +42 -0
- data/lib/ddtrace/contrib/que/patcher.rb +24 -0
- data/lib/ddtrace/contrib/que/tracer.rb +56 -0
- data/lib/ddtrace/contrib/racecar/configuration/settings.rb +7 -2
- data/lib/ddtrace/contrib/racecar/events.rb +2 -0
- data/lib/ddtrace/contrib/racecar/events/consume.rb +27 -0
- data/lib/ddtrace/contrib/racecar/ext.rb +6 -2
- data/lib/ddtrace/contrib/rack/configuration/settings.rb +7 -2
- data/lib/ddtrace/contrib/rack/ext.rb +5 -2
- data/lib/ddtrace/contrib/rack/middlewares.rb +17 -12
- data/lib/ddtrace/contrib/rails/configuration/settings.rb +10 -11
- data/lib/ddtrace/contrib/rails/ext.rb +6 -2
- data/lib/ddtrace/contrib/rails/framework.rb +52 -46
- data/lib/ddtrace/contrib/rails/integration.rb +1 -1
- data/lib/ddtrace/contrib/rails/log_injection.rb +81 -0
- data/lib/ddtrace/contrib/rails/middlewares.rb +7 -2
- data/lib/ddtrace/contrib/rails/patcher.rb +15 -0
- data/lib/ddtrace/contrib/rake/configuration/settings.rb +7 -3
- data/lib/ddtrace/contrib/rake/ext.rb +5 -2
- data/lib/ddtrace/contrib/redis/configuration/settings.rb +7 -2
- data/lib/ddtrace/contrib/redis/ext.rb +5 -2
- data/lib/ddtrace/contrib/redis/patcher.rb +1 -1
- data/lib/ddtrace/contrib/resque/configuration/settings.rb +7 -2
- data/lib/ddtrace/contrib/resque/ext.rb +5 -2
- data/lib/ddtrace/contrib/rest_client/configuration/settings.rb +7 -2
- data/lib/ddtrace/contrib/rest_client/ext.rb +5 -2
- data/lib/ddtrace/contrib/rest_client/request_patch.rb +2 -2
- data/lib/ddtrace/contrib/sequel/configuration/settings.rb +7 -2
- data/lib/ddtrace/contrib/sequel/database.rb +1 -1
- data/lib/ddtrace/contrib/sequel/ext.rb +5 -2
- data/lib/ddtrace/contrib/sequel/utils.rb +19 -1
- data/lib/ddtrace/contrib/shoryuken/configuration/settings.rb +7 -2
- data/lib/ddtrace/contrib/shoryuken/ext.rb +5 -2
- data/lib/ddtrace/contrib/sidekiq/configuration/settings.rb +7 -2
- data/lib/ddtrace/contrib/sidekiq/ext.rb +6 -2
- data/lib/ddtrace/contrib/sidekiq/patcher.rb +8 -1
- data/lib/ddtrace/contrib/sidekiq/server_tracer.rb +1 -0
- data/lib/ddtrace/contrib/sinatra/configuration/settings.rb +7 -2
- data/lib/ddtrace/contrib/sinatra/env.rb +5 -4
- data/lib/ddtrace/contrib/sinatra/ext.rb +5 -2
- data/lib/ddtrace/contrib/sinatra/tracer.rb +21 -42
- data/lib/ddtrace/contrib/sinatra/tracer_middleware.rb +50 -23
- data/lib/ddtrace/contrib/sneakers/configuration/settings.rb +32 -0
- data/lib/ddtrace/contrib/sneakers/ext.rb +22 -0
- data/lib/ddtrace/contrib/sneakers/integration.rb +41 -0
- data/lib/ddtrace/contrib/sneakers/patcher.rb +24 -0
- data/lib/ddtrace/contrib/sneakers/tracer.rb +58 -0
- data/lib/ddtrace/contrib/sucker_punch/configuration/settings.rb +7 -2
- data/lib/ddtrace/contrib/sucker_punch/ext.rb +5 -2
- data/lib/ddtrace/contrib/sucker_punch/patcher.rb +1 -1
- data/lib/ddtrace/diagnostics/environment_logger.rb +278 -0
- data/lib/ddtrace/environment.rb +17 -3
- data/lib/ddtrace/ext/diagnostics.rb +3 -0
- data/lib/ddtrace/ext/environment.rb +2 -0
- data/lib/ddtrace/ext/transport.rb +1 -0
- data/lib/ddtrace/logger.rb +1 -1
- data/lib/ddtrace/pin.rb +39 -15
- data/lib/ddtrace/pipeline/span_filter.rb +15 -15
- data/lib/ddtrace/runtime/metrics.rb +18 -4
- data/lib/ddtrace/sampler.rb +2 -0
- data/lib/ddtrace/span.rb +10 -0
- data/lib/ddtrace/tracer.rb +15 -8
- data/lib/ddtrace/transport/http.rb +15 -0
- data/lib/ddtrace/transport/http/adapters/net.rb +8 -0
- data/lib/ddtrace/transport/http/adapters/test.rb +6 -0
- data/lib/ddtrace/transport/http/adapters/unix_socket.rb +4 -0
- data/lib/ddtrace/transport/response.rb +11 -0
- data/lib/ddtrace/version.rb +2 -2
- data/lib/ddtrace/workers/async.rb +2 -2
- data/lib/ddtrace/workers/loop.rb +1 -1
- data/lib/ddtrace/workers/polling.rb +1 -1
- data/lib/ddtrace/workers/trace_writer.rb +3 -0
- data/lib/ddtrace/writer.rb +33 -12
- metadata +124 -4
|
@@ -7,13 +7,18 @@ module Datadog
|
|
|
7
7
|
module Configuration
|
|
8
8
|
# Custom settings for the SuckerPunch integration
|
|
9
9
|
class Settings < Contrib::Configuration::Settings
|
|
10
|
+
option :enabled do |o|
|
|
11
|
+
o.default { env_to_bool(Ext::ENV_ENABLED, true) }
|
|
12
|
+
o.lazy
|
|
13
|
+
end
|
|
14
|
+
|
|
10
15
|
option :analytics_enabled do |o|
|
|
11
|
-
o.default { env_to_bool(Ext::ENV_ANALYTICS_ENABLED, false) }
|
|
16
|
+
o.default { env_to_bool([Ext::ENV_ANALYTICS_ENABLED, Ext::ENV_ANALYTICS_ENABLED_OLD], false) }
|
|
12
17
|
o.lazy
|
|
13
18
|
end
|
|
14
19
|
|
|
15
20
|
option :analytics_sample_rate do |o|
|
|
16
|
-
o.default { env_to_float(Ext::ENV_ANALYTICS_SAMPLE_RATE, 1.0) }
|
|
21
|
+
o.default { env_to_float([Ext::ENV_ANALYTICS_SAMPLE_RATE, Ext::ENV_ANALYTICS_SAMPLE_RATE_OLD], 1.0) }
|
|
17
22
|
o.lazy
|
|
18
23
|
end
|
|
19
24
|
|
|
@@ -4,8 +4,11 @@ module Datadog
|
|
|
4
4
|
# SuckerPunch integration constants
|
|
5
5
|
module Ext
|
|
6
6
|
APP = 'sucker_punch'.freeze
|
|
7
|
-
|
|
8
|
-
|
|
7
|
+
ENV_ENABLED = 'DD_TRACE_SUCKER_PUNCH_ENABLED'.freeze
|
|
8
|
+
ENV_ANALYTICS_ENABLED = 'DD_TRACE_SUCKER_PUNCH_ANALYTICS_ENABLED'.freeze
|
|
9
|
+
ENV_ANALYTICS_ENABLED_OLD = 'DD_SUCKER_PUNCH_ANALYTICS_ENABLED'.freeze
|
|
10
|
+
ENV_ANALYTICS_SAMPLE_RATE = 'DD_TRACE_SUCKER_PUNCH_ANALYTICS_SAMPLE_RATE'.freeze
|
|
11
|
+
ENV_ANALYTICS_SAMPLE_RATE_OLD = 'DD_SUCKER_PUNCH_ANALYTICS_SAMPLE_RATE'.freeze
|
|
9
12
|
SERVICE_NAME = 'sucker_punch'.freeze
|
|
10
13
|
SPAN_PERFORM = 'sucker_punch.perform'.freeze
|
|
11
14
|
SPAN_PERFORM_ASYNC = 'sucker_punch.perform_async'.freeze
|
|
@@ -0,0 +1,278 @@
|
|
|
1
|
+
require 'date'
|
|
2
|
+
require 'json'
|
|
3
|
+
require 'rbconfig'
|
|
4
|
+
|
|
5
|
+
module Datadog
|
|
6
|
+
module Diagnostics
|
|
7
|
+
# A holistic collection of the environment in which ddtrace is running.
|
|
8
|
+
# This logger should allow for easy reporting by users to Datadog support.
|
|
9
|
+
#
|
|
10
|
+
# rubocop:disable Style/DoubleNegation
|
|
11
|
+
module EnvironmentLogger
|
|
12
|
+
class << self
|
|
13
|
+
# Outputs environment information to {Datadog.logger}.
|
|
14
|
+
# Executes only for the lifetime of the program.
|
|
15
|
+
def log!(transport_responses)
|
|
16
|
+
return if @executed || !log?
|
|
17
|
+
@executed = true
|
|
18
|
+
|
|
19
|
+
data = EnvironmentCollector.new.collect!(transport_responses)
|
|
20
|
+
data.reject! { |_, v| v.nil? } # Remove empty values from hash output
|
|
21
|
+
|
|
22
|
+
log_environment!(data.to_json)
|
|
23
|
+
log_error!('Agent Error'.freeze, data[:agent_error]) if data[:agent_error]
|
|
24
|
+
rescue => e
|
|
25
|
+
Datadog.logger.warn("Failed to collect environment information: #{e} location: #{e.backtrace.first}")
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
private
|
|
29
|
+
|
|
30
|
+
def log_environment!(line)
|
|
31
|
+
Datadog.logger.info("DATADOG TRACER CONFIGURATION - #{line}")
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def log_error!(type, error)
|
|
35
|
+
Datadog.logger.warn("DATADOG TRACER DIAGNOSTIC - #{type}: #{error}")
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
# Are we logging the environment data?
|
|
39
|
+
def log?
|
|
40
|
+
startup_logs_enabled = Datadog.configuration.diagnostics.startup_logs.enabled
|
|
41
|
+
if startup_logs_enabled.nil?
|
|
42
|
+
!repl? # Suppress logs if we running in a REPL
|
|
43
|
+
else
|
|
44
|
+
startup_logs_enabled
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
REPL_PROGRAM_NAMES = %w[irb pry].freeze
|
|
49
|
+
|
|
50
|
+
def repl?
|
|
51
|
+
REPL_PROGRAM_NAMES.include?($PROGRAM_NAME)
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
# Collects environment information for diagnostic logging
|
|
57
|
+
class EnvironmentCollector
|
|
58
|
+
# @return [String] current time in ISO8601 format
|
|
59
|
+
def date
|
|
60
|
+
DateTime.now.iso8601
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
# Best portable guess of OS information.
|
|
64
|
+
# @return [String] platform string
|
|
65
|
+
def os_name
|
|
66
|
+
RbConfig::CONFIG['host'.freeze]
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
# @return [String] ddtrace version
|
|
70
|
+
def version
|
|
71
|
+
VERSION::STRING
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
# @return [String] "ruby"
|
|
75
|
+
def lang
|
|
76
|
+
Ext::Runtime::LANG
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
# Supported Ruby language version.
|
|
80
|
+
# Will be distinct from VM version for non-MRI environments.
|
|
81
|
+
# @return [String]
|
|
82
|
+
def lang_version
|
|
83
|
+
Ext::Runtime::LANG_VERSION
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
# @return [String] configured application environment
|
|
87
|
+
def env
|
|
88
|
+
Datadog.configuration.env
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
# @return [Boolean, nil]
|
|
92
|
+
def enabled
|
|
93
|
+
Datadog.configuration.tracer.enabled
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
# @return [String] configured application service name
|
|
97
|
+
def service
|
|
98
|
+
Datadog.configuration.service
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
# @return [String] configured application version
|
|
102
|
+
def dd_version
|
|
103
|
+
Datadog.configuration.version
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
# @return [String] target agent URL for trace flushing
|
|
107
|
+
def agent_url
|
|
108
|
+
# Retrieve the effect agent URL, regardless of how it was configured
|
|
109
|
+
transport = Datadog.tracer.writer.transport
|
|
110
|
+
adapter = transport.client.api.adapter
|
|
111
|
+
adapter.url
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
# Error returned by Datadog agent during a tracer flush attempt
|
|
115
|
+
# @return [String] concatenated list of transport errors
|
|
116
|
+
def agent_error(transport_responses)
|
|
117
|
+
error_responses = transport_responses.reject(&:ok?)
|
|
118
|
+
|
|
119
|
+
return nil if error_responses.empty?
|
|
120
|
+
|
|
121
|
+
error_responses.map(&:inspect).join(','.freeze)
|
|
122
|
+
end
|
|
123
|
+
|
|
124
|
+
# @return [Boolean, nil] debug mode enabled in configuration
|
|
125
|
+
def debug
|
|
126
|
+
!!Datadog.configuration.diagnostics.debug
|
|
127
|
+
end
|
|
128
|
+
|
|
129
|
+
# @return [Boolean, nil] analytics enabled in configuration
|
|
130
|
+
def analytics_enabled
|
|
131
|
+
!!Datadog.configuration.analytics.enabled
|
|
132
|
+
end
|
|
133
|
+
|
|
134
|
+
# @return [Numeric, nil] tracer sample rate configured
|
|
135
|
+
def sample_rate
|
|
136
|
+
sampler = Datadog.configuration.tracer.sampler
|
|
137
|
+
return nil unless sampler
|
|
138
|
+
|
|
139
|
+
sampler.sample_rate(nil) rescue nil
|
|
140
|
+
end
|
|
141
|
+
|
|
142
|
+
# DEV: We currently only support SimpleRule instances.
|
|
143
|
+
# DEV: These are the most commonly used rules.
|
|
144
|
+
# DEV: We should expand support for other rules in the future,
|
|
145
|
+
# DEV: although it is tricky to serialize arbitrary rules.
|
|
146
|
+
#
|
|
147
|
+
# @return [Hash, nil] sample rules configured
|
|
148
|
+
def sampling_rules
|
|
149
|
+
sampler = Datadog.configuration.tracer.sampler
|
|
150
|
+
return nil unless sampler.is_a?(Datadog::PrioritySampler) &&
|
|
151
|
+
sampler.priority_sampler.is_a?(Datadog::Sampling::RuleSampler)
|
|
152
|
+
|
|
153
|
+
sampler.priority_sampler.rules.map do |rule|
|
|
154
|
+
next unless rule.is_a?(Datadog::Sampling::SimpleRule)
|
|
155
|
+
|
|
156
|
+
{
|
|
157
|
+
name: rule.matcher.name,
|
|
158
|
+
service: rule.matcher.service,
|
|
159
|
+
sample_rate: rule.sampler.sample_rate(nil)
|
|
160
|
+
}
|
|
161
|
+
end.compact
|
|
162
|
+
end
|
|
163
|
+
|
|
164
|
+
# @return [Hash, nil] concatenated list of global tracer tags configured
|
|
165
|
+
def tags
|
|
166
|
+
tags = Datadog.configuration.tags
|
|
167
|
+
return nil if tags.empty?
|
|
168
|
+
hash_serializer(tags)
|
|
169
|
+
end
|
|
170
|
+
|
|
171
|
+
# @return [Boolean, nil] runtime metrics enabled in configuration
|
|
172
|
+
def runtime_metrics_enabled
|
|
173
|
+
Datadog.configuration.runtime_metrics.enabled
|
|
174
|
+
end
|
|
175
|
+
|
|
176
|
+
# Concatenated list of integrations activated, with their gem version.
|
|
177
|
+
# Example: "rails@6.0.3,rack@2.2.3"
|
|
178
|
+
#
|
|
179
|
+
# @return [String, nil]
|
|
180
|
+
def integrations_loaded
|
|
181
|
+
integrations = instrumented_integrations
|
|
182
|
+
return if integrations.empty?
|
|
183
|
+
|
|
184
|
+
integrations.map { |name, integration| "#{name}@#{integration.class.version}" }.join(','.freeze)
|
|
185
|
+
end
|
|
186
|
+
|
|
187
|
+
# Ruby VM name and version.
|
|
188
|
+
# Examples: "ruby-2.7.1", "jruby-9.2.11.1", "truffleruby-20.1.0"
|
|
189
|
+
# @return [String, nil]
|
|
190
|
+
def vm
|
|
191
|
+
# RUBY_ENGINE_VERSION returns the VM version, which
|
|
192
|
+
# will differ from RUBY_VERSION for non-mri VMs.
|
|
193
|
+
if defined?(RUBY_ENGINE_VERSION)
|
|
194
|
+
"#{RUBY_ENGINE}-#{RUBY_ENGINE_VERSION}"
|
|
195
|
+
else
|
|
196
|
+
# Ruby < 2.3 doesn't support RUBY_ENGINE_VERSION
|
|
197
|
+
"#{RUBY_ENGINE}-#{RUBY_VERSION}"
|
|
198
|
+
end
|
|
199
|
+
end
|
|
200
|
+
|
|
201
|
+
# @return [Boolean, nil] partial flushing enabled in configuration
|
|
202
|
+
def partial_flushing_enabled
|
|
203
|
+
!!Datadog.configuration.tracer.partial_flush.enabled
|
|
204
|
+
end
|
|
205
|
+
|
|
206
|
+
# @return [Boolean, nil] priority sampling enabled in configuration
|
|
207
|
+
def priority_sampling_enabled
|
|
208
|
+
!!Datadog.configuration.tracer.priority_sampling
|
|
209
|
+
end
|
|
210
|
+
|
|
211
|
+
# @return [Boolean, nil] health metrics enabled in configuration
|
|
212
|
+
def health_metrics_enabled
|
|
213
|
+
!!Datadog.configuration.diagnostics.health_metrics.enabled
|
|
214
|
+
end
|
|
215
|
+
|
|
216
|
+
# TODO: Populate when profiling is implemented
|
|
217
|
+
# def profiling_enabled
|
|
218
|
+
# end
|
|
219
|
+
|
|
220
|
+
# TODO: Populate when automatic log correlation is implemented
|
|
221
|
+
# def logs_correlation_enabled
|
|
222
|
+
# end
|
|
223
|
+
|
|
224
|
+
# @return [Hash] environment information available at call time
|
|
225
|
+
def collect!(transport_responses)
|
|
226
|
+
{
|
|
227
|
+
date: date,
|
|
228
|
+
os_name: os_name,
|
|
229
|
+
version: version,
|
|
230
|
+
lang: lang,
|
|
231
|
+
lang_version: lang_version,
|
|
232
|
+
env: env,
|
|
233
|
+
enabled: enabled,
|
|
234
|
+
service: service,
|
|
235
|
+
dd_version: dd_version,
|
|
236
|
+
agent_url: agent_url,
|
|
237
|
+
agent_error: agent_error(transport_responses),
|
|
238
|
+
debug: debug,
|
|
239
|
+
analytics_enabled: analytics_enabled,
|
|
240
|
+
sample_rate: sample_rate,
|
|
241
|
+
sampling_rules: sampling_rules,
|
|
242
|
+
tags: tags,
|
|
243
|
+
runtime_metrics_enabled: runtime_metrics_enabled,
|
|
244
|
+
integrations_loaded: integrations_loaded,
|
|
245
|
+
vm: vm,
|
|
246
|
+
partial_flushing_enabled: partial_flushing_enabled,
|
|
247
|
+
priority_sampling_enabled: priority_sampling_enabled,
|
|
248
|
+
health_metrics_enabled: health_metrics_enabled,
|
|
249
|
+
**instrumented_integrations_settings
|
|
250
|
+
}
|
|
251
|
+
end
|
|
252
|
+
|
|
253
|
+
private
|
|
254
|
+
|
|
255
|
+
def instrumented_integrations
|
|
256
|
+
Datadog.configuration.instrumented_integrations
|
|
257
|
+
end
|
|
258
|
+
|
|
259
|
+
# Capture all active integration settings into "integrationName_settingName: value" entries.
|
|
260
|
+
def instrumented_integrations_settings
|
|
261
|
+
Hash[instrumented_integrations.flat_map do |name, integration|
|
|
262
|
+
integration.configuration.to_h.flat_map do |setting, value|
|
|
263
|
+
next [] if setting == :tracer # Skip internal Ruby objects
|
|
264
|
+
|
|
265
|
+
# Convert value to a string to avoid custom #to_json
|
|
266
|
+
# handlers possibly causing errors.
|
|
267
|
+
[[:"integration_#{name}_#{setting}", value.to_s]]
|
|
268
|
+
end
|
|
269
|
+
end]
|
|
270
|
+
end
|
|
271
|
+
|
|
272
|
+
# Outputs "k1:v1,k2:v2,..."
|
|
273
|
+
def hash_serializer(h)
|
|
274
|
+
h.map { |k, v| "#{k}:#{v}" }.join(','.freeze)
|
|
275
|
+
end
|
|
276
|
+
end
|
|
277
|
+
end
|
|
278
|
+
end
|
data/lib/ddtrace/environment.rb
CHANGED
|
@@ -6,20 +6,34 @@ module Datadog
|
|
|
6
6
|
# Defines helper methods for environment
|
|
7
7
|
module Helpers
|
|
8
8
|
def env_to_bool(var, default = nil)
|
|
9
|
-
|
|
9
|
+
var = decode_array(var)
|
|
10
|
+
var && ENV.key?(var) ? ENV[var].to_s.strip.downcase == 'true' : default
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def env_to_int(var, default = nil)
|
|
14
|
+
var = decode_array(var)
|
|
15
|
+
var && ENV.key?(var) ? ENV[var].to_i : default
|
|
10
16
|
end
|
|
11
17
|
|
|
12
18
|
def env_to_float(var, default = nil)
|
|
13
|
-
|
|
19
|
+
var = decode_array(var)
|
|
20
|
+
var && ENV.key?(var) ? ENV[var].to_f : default
|
|
14
21
|
end
|
|
15
22
|
|
|
16
23
|
def env_to_list(var, default = [])
|
|
17
|
-
|
|
24
|
+
var = decode_array(var)
|
|
25
|
+
if var && ENV.key?(var)
|
|
18
26
|
ENV[var].split(',').map(&:strip)
|
|
19
27
|
else
|
|
20
28
|
default
|
|
21
29
|
end
|
|
22
30
|
end
|
|
31
|
+
|
|
32
|
+
private
|
|
33
|
+
|
|
34
|
+
def decode_array(var)
|
|
35
|
+
var.is_a?(Array) ? var.find { |env_var| ENV.key?(env_var) } : var
|
|
36
|
+
end
|
|
23
37
|
end
|
|
24
38
|
|
|
25
39
|
extend Helpers
|
|
@@ -6,6 +6,7 @@ module Datadog
|
|
|
6
6
|
DEFAULT_PORT = 8126
|
|
7
7
|
ENV_DEFAULT_HOST = 'DD_AGENT_HOST'.freeze
|
|
8
8
|
ENV_DEFAULT_PORT = 'DD_TRACE_AGENT_PORT'.freeze
|
|
9
|
+
ENV_DEFAULT_URL = 'DD_TRACE_AGENT_URL'.freeze
|
|
9
10
|
HEADER_CONTAINER_ID = 'Datadog-Container-ID'.freeze
|
|
10
11
|
HEADER_META_LANG = 'Datadog-Meta-Lang'.freeze
|
|
11
12
|
HEADER_META_LANG_VERSION = 'Datadog-Meta-Lang-Version'.freeze
|
data/lib/ddtrace/logger.rb
CHANGED
data/lib/ddtrace/pin.rb
CHANGED
|
@@ -12,26 +12,36 @@ module Datadog
|
|
|
12
12
|
obj.datadog_pin
|
|
13
13
|
end
|
|
14
14
|
|
|
15
|
-
attr_reader :service_name
|
|
16
15
|
attr_accessor :app
|
|
17
|
-
attr_accessor :tags
|
|
18
16
|
attr_accessor :app_type
|
|
19
|
-
attr_accessor :name
|
|
20
|
-
attr_accessor :tracer
|
|
21
17
|
attr_accessor :config
|
|
18
|
+
attr_accessor :name
|
|
19
|
+
attr_accessor :service_name
|
|
20
|
+
attr_accessor :tags
|
|
21
|
+
attr_reader :tracer
|
|
22
|
+
attr_accessor :writer
|
|
23
|
+
|
|
24
|
+
alias service= service_name=
|
|
25
|
+
alias service service_name
|
|
22
26
|
|
|
23
27
|
def initialize(service_name, options = {})
|
|
28
|
+
deprecation_warning unless options[:tracer].is_a?(Proc) || options[:tracer].nil?
|
|
29
|
+
|
|
24
30
|
@app = options[:app]
|
|
25
|
-
@tags = options[:tags]
|
|
26
31
|
@app_type = options[:app_type]
|
|
27
|
-
@name = nil # this would rarely be overriden as it's really span-specific
|
|
28
|
-
@tracer = options[:tracer] || Datadog.tracer
|
|
29
32
|
@config = options[:config]
|
|
30
|
-
|
|
33
|
+
@name = nil # this would rarely be overriden as it's really span-specific
|
|
34
|
+
@service_name = service_name
|
|
35
|
+
@tags = options[:tags]
|
|
36
|
+
@tracer = options[:tracer]
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
def tracer
|
|
40
|
+
@tracer.is_a?(Proc) ? @tracer.call : (@tracer || Datadog.tracer)
|
|
31
41
|
end
|
|
32
42
|
|
|
33
43
|
def enabled?
|
|
34
|
-
return
|
|
44
|
+
return tracer.enabled if tracer
|
|
35
45
|
false
|
|
36
46
|
end
|
|
37
47
|
|
|
@@ -56,15 +66,29 @@ module Datadog
|
|
|
56
66
|
obj.datadog_pin = self
|
|
57
67
|
end
|
|
58
68
|
|
|
59
|
-
def
|
|
60
|
-
|
|
69
|
+
def to_s
|
|
70
|
+
"Pin(service:#{service},app:#{app},app_type:#{app_type},name:#{name})"
|
|
61
71
|
end
|
|
62
72
|
|
|
63
|
-
|
|
64
|
-
alias service service_name
|
|
73
|
+
private
|
|
65
74
|
|
|
66
|
-
|
|
67
|
-
|
|
75
|
+
DEPRECATION_WARNING = %(
|
|
76
|
+
Explicitly providing a tracer instance is DEPRECATED.
|
|
77
|
+
It's recommended to not provide an explicit tracer instance
|
|
78
|
+
and let Datadog::Pin resolve the correct tracer internally.
|
|
79
|
+
).freeze
|
|
80
|
+
|
|
81
|
+
def deprecation_warning
|
|
82
|
+
log_deprecation_warning('Datadog::Pin.new')
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
include Datadog::Patcher
|
|
86
|
+
|
|
87
|
+
def log_deprecation_warning(method_name)
|
|
88
|
+
# Only log each deprecation warning once (safeguard against log spam)
|
|
89
|
+
do_once(method_name) do
|
|
90
|
+
Datadog.logger.warn("#{method_name}:#{DEPRECATION_WARNING}")
|
|
91
|
+
end
|
|
68
92
|
end
|
|
69
93
|
end
|
|
70
94
|
|