ddtrace 0.22.0 → 0.23.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 +22 -2
- data/lib/ddtrace/analytics.rb +2 -1
- data/lib/ddtrace/contrib/active_model_serializers/patcher.rb +0 -7
- data/lib/ddtrace/contrib/active_record/configuration/settings.rb +3 -5
- data/lib/ddtrace/contrib/dalli/patcher.rb +0 -7
- data/lib/ddtrace/contrib/faraday/middleware.rb +0 -2
- data/lib/ddtrace/contrib/faraday/patcher.rb +0 -11
- data/lib/ddtrace/contrib/grape/patcher.rb +0 -7
- data/lib/ddtrace/contrib/graphql/configuration/settings.rb +1 -4
- data/lib/ddtrace/contrib/grpc/patcher.rb +0 -7
- data/lib/ddtrace/contrib/racecar/patcher.rb +0 -8
- data/lib/ddtrace/contrib/rack/configuration/settings.rb +2 -10
- data/lib/ddtrace/contrib/rails/framework.rb +0 -7
- data/lib/ddtrace/contrib/rake/instrumentation.rb +2 -4
- data/lib/ddtrace/contrib/rake/patcher.rb +0 -7
- data/lib/ddtrace/contrib/rest_client/configuration/settings.rb +1 -4
- data/lib/ddtrace/contrib/shoryuken/tracer.rb +0 -10
- data/lib/ddtrace/contrib/sidekiq/client_tracer.rb +0 -1
- data/lib/ddtrace/contrib/sidekiq/server_tracer.rb +0 -1
- data/lib/ddtrace/contrib/sidekiq/tracing.rb +0 -10
- data/lib/ddtrace/contrib/sinatra/configuration/settings.rb +1 -4
- data/lib/ddtrace/encoding.rb +0 -5
- data/lib/ddtrace/ext/forced_tracing.rb +9 -0
- data/lib/ddtrace/forced_tracing.rb +64 -0
- data/lib/ddtrace/opentracer/span.rb +8 -0
- data/lib/ddtrace/pin.rb +0 -2
- data/lib/ddtrace/span.rb +4 -1
- data/lib/ddtrace/sync_writer.rb +10 -6
- data/lib/ddtrace/tracer.rb +20 -11
- data/lib/ddtrace/transport.rb +2 -8
- data/lib/ddtrace/version.rb +1 -1
- data/lib/ddtrace/workers.rb +2 -28
- data/lib/ddtrace/writer.rb +13 -23
- metadata +5 -3
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 65dcbe210bf9b8f1824d9636e81c454feb1a606a
|
|
4
|
+
data.tar.gz: 846f031c64443dc6e2fe93572ef96f488dcafc8d
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 1cd1b941a9b4e9d7c75b4212e1fe18a91afa0533446ab6363cee88da063e38a24199a6d33b6ede30eae3ea53f7eb890d60a9b51723274b4581edb15062e1d2df
|
|
7
|
+
data.tar.gz: 5a66c125f2985a3edf2938b5fc32b7c8e4cfb787a2ffde5a2a18b01d6c22500a0ec51a3f195ff4fe0bb68dba8d98dd94f518d8cade3e8551ed7508a42ba346d6
|
data/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,25 @@
|
|
|
4
4
|
|
|
5
5
|
## [Unreleased (beta)]
|
|
6
6
|
|
|
7
|
+
## [0.23.0] - 2019-04-30
|
|
8
|
+
|
|
9
|
+
Release notes: https://github.com/DataDog/dd-trace-rb/releases/tag/v0.23.0
|
|
10
|
+
|
|
11
|
+
Git diff: https://github.com/DataDog/dd-trace-rb/compare/v0.22.0...v0.23.0
|
|
12
|
+
|
|
13
|
+
### Added
|
|
14
|
+
|
|
15
|
+
- Error status support via tags for OpenTracing (#739)
|
|
16
|
+
- Forced sampling support via tags (#720)
|
|
17
|
+
|
|
18
|
+
### Fixed
|
|
19
|
+
|
|
20
|
+
- Wrong return values for Rake integration (#742) (@Redapted)
|
|
21
|
+
|
|
22
|
+
### Removed
|
|
23
|
+
|
|
24
|
+
- Obsolete service telemetry (#738)
|
|
25
|
+
|
|
7
26
|
## [0.22.0] - 2019-04-15
|
|
8
27
|
|
|
9
28
|
Release notes: https://github.com/DataDog/dd-trace-rb/releases/tag/v0.22.0
|
|
@@ -767,8 +786,9 @@ Release notes: https://github.com/DataDog/dd-trace-rb/releases/tag/v0.3.1
|
|
|
767
786
|
|
|
768
787
|
Git diff: https://github.com/DataDog/dd-trace-rb/compare/v0.3.0...v0.3.1
|
|
769
788
|
|
|
770
|
-
[Unreleased (stable)]: https://github.com/DataDog/dd-trace-rb/compare/v0.
|
|
771
|
-
[Unreleased (beta)]: https://github.com/DataDog/dd-trace-rb/compare/v0.
|
|
789
|
+
[Unreleased (stable)]: https://github.com/DataDog/dd-trace-rb/compare/v0.23.0...master
|
|
790
|
+
[Unreleased (beta)]: https://github.com/DataDog/dd-trace-rb/compare/v0.23.0...0.24-dev
|
|
791
|
+
[0.23.0]: https://github.com/DataDog/dd-trace-rb/compare/v0.22.0...v0.23.0
|
|
772
792
|
[0.22.0]: https://github.com/DataDog/dd-trace-rb/compare/v0.21.2...v0.22.0
|
|
773
793
|
[0.21.2]: https://github.com/DataDog/dd-trace-rb/compare/v0.21.1...v0.21.2
|
|
774
794
|
[0.21.1]: https://github.com/DataDog/dd-trace-rb/compare/v0.21.0...v0.21.1
|
data/lib/ddtrace/analytics.rb
CHANGED
|
@@ -29,7 +29,8 @@ module Datadog
|
|
|
29
29
|
def self.included(base)
|
|
30
30
|
base.class_eval do
|
|
31
31
|
alias_method :set_tag_without_analytics, :set_tag
|
|
32
|
-
|
|
32
|
+
# DEV: When we stack multiple extensions the method might already be removed
|
|
33
|
+
remove_method :set_tag if method_defined?(:set_tag)
|
|
33
34
|
end
|
|
34
35
|
end
|
|
35
36
|
|
|
@@ -21,13 +21,6 @@ module Datadog
|
|
|
21
21
|
begin
|
|
22
22
|
# Subscribe to ActiveModelSerializers events
|
|
23
23
|
Events.subscribe!
|
|
24
|
-
|
|
25
|
-
# Set service info
|
|
26
|
-
get_option(:tracer).set_service_info(
|
|
27
|
-
get_option(:service_name),
|
|
28
|
-
Ext::APP,
|
|
29
|
-
Datadog::Ext::AppTypes::WEB
|
|
30
|
-
)
|
|
31
24
|
rescue StandardError => e
|
|
32
25
|
Datadog::Tracer.log.error("Unable to apply ActiveModelSerializers integration: #{e}")
|
|
33
26
|
end
|
|
@@ -17,11 +17,9 @@ module Datadog
|
|
|
17
17
|
lazy: true
|
|
18
18
|
|
|
19
19
|
option :orm_service_name
|
|
20
|
-
option :service_name,
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
end
|
|
24
|
-
end
|
|
20
|
+
option :service_name,
|
|
21
|
+
default: -> { Utils.adapter_name },
|
|
22
|
+
lazy: true
|
|
25
23
|
|
|
26
24
|
option :tracer, default: Datadog.tracer do |value|
|
|
27
25
|
value.tap do
|
|
@@ -21,13 +21,6 @@ module Datadog
|
|
|
21
21
|
begin
|
|
22
22
|
add_pin!
|
|
23
23
|
::Dalli::Server.send(:include, Instrumentation)
|
|
24
|
-
|
|
25
|
-
# TODO: When Dalli pin is removed, set service info.
|
|
26
|
-
# get_option(:tracer).set_service_info(
|
|
27
|
-
# get_option(:service_name),
|
|
28
|
-
# Ext::APP,
|
|
29
|
-
# Datadog::Ext::AppTypes::CACHE
|
|
30
|
-
# )
|
|
31
24
|
rescue StandardError => e
|
|
32
25
|
Datadog::Tracer.log.error("Unable to apply Dalli integration: #{e}")
|
|
33
26
|
end
|
|
@@ -22,9 +22,6 @@ module Datadog
|
|
|
22
22
|
|
|
23
23
|
add_pin!
|
|
24
24
|
add_middleware!
|
|
25
|
-
|
|
26
|
-
# TODO: When Faraday pin is removed, set service info.
|
|
27
|
-
# register_service(get_option(:service_name))
|
|
28
25
|
rescue StandardError => e
|
|
29
26
|
Datadog::Tracer.log.error("Unable to apply Faraday integration: #{e}")
|
|
30
27
|
end
|
|
@@ -45,14 +42,6 @@ module Datadog
|
|
|
45
42
|
::Faraday::Middleware.register_middleware(ddtrace: Middleware)
|
|
46
43
|
end
|
|
47
44
|
|
|
48
|
-
def register_service(name)
|
|
49
|
-
get_option(:tracer).set_service_info(
|
|
50
|
-
name,
|
|
51
|
-
Ext::APP,
|
|
52
|
-
Datadog::Ext::AppTypes::WEB
|
|
53
|
-
)
|
|
54
|
-
end
|
|
55
|
-
|
|
56
45
|
def get_option(option)
|
|
57
46
|
Datadog.configuration[:faraday].get_option(option)
|
|
58
47
|
end
|
|
@@ -26,13 +26,6 @@ module Datadog
|
|
|
26
26
|
|
|
27
27
|
add_pin!
|
|
28
28
|
|
|
29
|
-
# TODO: When Grape pin is removed, set service info.
|
|
30
|
-
# get_option(:tracer).set_service_info(
|
|
31
|
-
# get_option(:service_name),
|
|
32
|
-
# Ext::APP,
|
|
33
|
-
# Datadog::Ext::AppTypes::WEB
|
|
34
|
-
# )
|
|
35
|
-
|
|
36
29
|
# Subscribe to ActiveSupport events
|
|
37
30
|
Datadog::Contrib::Grape::Endpoint.subscribe
|
|
38
31
|
rescue StandardError => e
|
|
@@ -17,10 +17,7 @@ module Datadog
|
|
|
17
17
|
lazy: true
|
|
18
18
|
|
|
19
19
|
option :schemas
|
|
20
|
-
option :service_name, default: Ext::SERVICE_NAME
|
|
21
|
-
get_option(:tracer).set_service_info(value, Ext::APP, Datadog::Ext::AppTypes::WEB)
|
|
22
|
-
value
|
|
23
|
-
end
|
|
20
|
+
option :service_name, default: Ext::SERVICE_NAME
|
|
24
21
|
end
|
|
25
22
|
end
|
|
26
23
|
end
|
|
@@ -23,13 +23,6 @@ module Datadog
|
|
|
23
23
|
|
|
24
24
|
add_pin!
|
|
25
25
|
|
|
26
|
-
# TODO: When GRPC pin is removed, set service info.
|
|
27
|
-
# get_option(:tracer).set_service_info(
|
|
28
|
-
# get_option(:service_name),
|
|
29
|
-
# Ext::APP,
|
|
30
|
-
# Datadog::Ext::AppTypes::WEB
|
|
31
|
-
# )
|
|
32
|
-
|
|
33
26
|
prepend_interceptor
|
|
34
27
|
rescue StandardError => e
|
|
35
28
|
Datadog::Tracer.log.error("Unable to apply gRPC integration: #{e}")
|
|
@@ -21,14 +21,6 @@ module Datadog
|
|
|
21
21
|
begin
|
|
22
22
|
# Subscribe to Racecar events
|
|
23
23
|
Events.subscribe!
|
|
24
|
-
|
|
25
|
-
# Set service info
|
|
26
|
-
configuration = Datadog.configuration[:racecar]
|
|
27
|
-
configuration[:tracer].set_service_info(
|
|
28
|
-
configuration[:service_name],
|
|
29
|
-
Ext::APP,
|
|
30
|
-
Datadog::Ext::AppTypes::WORKER
|
|
31
|
-
)
|
|
32
24
|
rescue StandardError => e
|
|
33
25
|
Datadog::Tracer.log.error("Unable to apply Racecar integration: #{e}")
|
|
34
26
|
end
|
|
@@ -29,17 +29,9 @@ module Datadog
|
|
|
29
29
|
option :quantize, default: {}
|
|
30
30
|
option :request_queuing, default: false
|
|
31
31
|
|
|
32
|
-
option :service_name, default: Ext::SERVICE_NAME
|
|
33
|
-
get_option(:tracer).set_service_info(value, Ext::APP, Datadog::Ext::AppTypes::WEB)
|
|
34
|
-
value
|
|
35
|
-
end
|
|
32
|
+
option :service_name, default: Ext::SERVICE_NAME
|
|
36
33
|
|
|
37
|
-
option :web_service_name, default: Ext::WEBSERVER_SERVICE_NAME
|
|
38
|
-
if get_option(:request_queuing)
|
|
39
|
-
get_option(:tracer).set_service_info(value, Ext::WEBSERVER_APP, Datadog::Ext::AppTypes::WEB)
|
|
40
|
-
end
|
|
41
|
-
value
|
|
42
|
-
end
|
|
34
|
+
option :web_service_name, default: Ext::WEBSERVER_SERVICE_NAME
|
|
43
35
|
end
|
|
44
36
|
end
|
|
45
37
|
end
|
|
@@ -26,7 +26,6 @@ module Datadog
|
|
|
26
26
|
|
|
27
27
|
activate_rack!(config)
|
|
28
28
|
activate_active_record!(config)
|
|
29
|
-
set_service_info!(config)
|
|
30
29
|
|
|
31
30
|
# By default, default service would be guessed from the script
|
|
32
31
|
# being executed, but here we know better, get it from Rails config.
|
|
@@ -64,12 +63,6 @@ module Datadog
|
|
|
64
63
|
tracer: config[:tracer]
|
|
65
64
|
)
|
|
66
65
|
end
|
|
67
|
-
|
|
68
|
-
def self.set_service_info!(config)
|
|
69
|
-
tracer = config[:tracer]
|
|
70
|
-
tracer.set_service_info(config[:controller_service], Ext::APP, Datadog::Ext::AppTypes::WEB)
|
|
71
|
-
tracer.set_service_info(config[:cache_service], Ext::APP, Datadog::Ext::AppTypes::CACHE)
|
|
72
|
-
end
|
|
73
66
|
end
|
|
74
67
|
end
|
|
75
68
|
end
|
|
@@ -16,8 +16,7 @@ module Datadog
|
|
|
16
16
|
return super unless enabled?
|
|
17
17
|
|
|
18
18
|
tracer.trace(Ext::SPAN_INVOKE, span_options) do |span|
|
|
19
|
-
super
|
|
20
|
-
annotate_invoke!(span, args)
|
|
19
|
+
super.tap { annotate_invoke!(span, args) }
|
|
21
20
|
end
|
|
22
21
|
ensure
|
|
23
22
|
shutdown_tracer!
|
|
@@ -27,8 +26,7 @@ module Datadog
|
|
|
27
26
|
return super unless enabled?
|
|
28
27
|
|
|
29
28
|
tracer.trace(Ext::SPAN_EXECUTE, span_options) do |span|
|
|
30
|
-
super
|
|
31
|
-
annotate_execute!(span, args)
|
|
29
|
+
super.tap { annotate_execute!(span, args) }
|
|
32
30
|
end
|
|
33
31
|
ensure
|
|
34
32
|
shutdown_tracer!
|
|
@@ -21,13 +21,6 @@ module Datadog
|
|
|
21
21
|
begin
|
|
22
22
|
# Add instrumentation patch to Rake task
|
|
23
23
|
::Rake::Task.send(:include, Instrumentation)
|
|
24
|
-
|
|
25
|
-
# Set service info
|
|
26
|
-
get_option(:tracer).set_service_info(
|
|
27
|
-
get_option(:service_name),
|
|
28
|
-
Ext::APP,
|
|
29
|
-
Datadog::Ext::AppTypes::WORKER
|
|
30
|
-
)
|
|
31
24
|
rescue StandardError => e
|
|
32
25
|
Datadog::Tracer.log.error("Unable to apply Rake integration: #{e}")
|
|
33
26
|
end
|
|
@@ -16,10 +16,7 @@ module Datadog
|
|
|
16
16
|
lazy: true
|
|
17
17
|
|
|
18
18
|
option :distributed_tracing, default: true
|
|
19
|
-
option :service_name, default: Ext::SERVICE_NAME
|
|
20
|
-
get_option(:tracer).set_service_info(value, Ext::APP, Datadog::Ext::AppTypes::WEB)
|
|
21
|
-
value
|
|
22
|
-
end
|
|
19
|
+
option :service_name, default: Ext::SERVICE_NAME
|
|
23
20
|
end
|
|
24
21
|
end
|
|
25
22
|
end
|
|
@@ -8,7 +8,6 @@ module Datadog
|
|
|
8
8
|
def initialize(options = {})
|
|
9
9
|
@tracer = options[:tracer] || configuration[:tracer]
|
|
10
10
|
@shoryuken_service = options[:service_name] || configuration[:service_name]
|
|
11
|
-
set_service_info(@shoryuken_service)
|
|
12
11
|
end
|
|
13
12
|
|
|
14
13
|
def call(worker_instance, queue, sqs_msg, body)
|
|
@@ -40,15 +39,6 @@ module Datadog
|
|
|
40
39
|
def configuration
|
|
41
40
|
Datadog.configuration[:shoryuken]
|
|
42
41
|
end
|
|
43
|
-
|
|
44
|
-
def set_service_info(service)
|
|
45
|
-
return if @tracer.nil? || @tracer.services[service]
|
|
46
|
-
@tracer.set_service_info(
|
|
47
|
-
service,
|
|
48
|
-
Ext::APP,
|
|
49
|
-
Datadog::Ext::AppTypes::WORKER
|
|
50
|
-
)
|
|
51
|
-
end
|
|
52
42
|
end
|
|
53
43
|
end
|
|
54
44
|
end
|
|
@@ -17,7 +17,6 @@ module Datadog
|
|
|
17
17
|
resource = job_resource(job)
|
|
18
18
|
|
|
19
19
|
service = service_from_worker_config(resource) || @sidekiq_service
|
|
20
|
-
set_service_info(service)
|
|
21
20
|
|
|
22
21
|
@tracer.trace(Ext::SPAN_JOB, service: service, span_type: Datadog::Ext::AppTypes::WORKER) do |span|
|
|
23
22
|
span.resource = resource
|
|
@@ -22,16 +22,6 @@ module Datadog
|
|
|
22
22
|
job['class']
|
|
23
23
|
end
|
|
24
24
|
end
|
|
25
|
-
|
|
26
|
-
def set_service_info(service)
|
|
27
|
-
# Ensure the tracer knows about this service.
|
|
28
|
-
return if @tracer.services[service]
|
|
29
|
-
@tracer.set_service_info(
|
|
30
|
-
service,
|
|
31
|
-
Ext::APP,
|
|
32
|
-
Datadog::Ext::AppTypes::WORKER
|
|
33
|
-
)
|
|
34
|
-
end
|
|
35
25
|
end
|
|
36
26
|
end
|
|
37
27
|
end
|
|
@@ -24,10 +24,7 @@ module Datadog
|
|
|
24
24
|
option :headers, default: DEFAULT_HEADERS
|
|
25
25
|
option :resource_script_names, default: false
|
|
26
26
|
|
|
27
|
-
option :service_name, default: Ext::SERVICE_NAME
|
|
28
|
-
get_option(:tracer).set_service_info(value, Ext::APP, Datadog::Ext::AppTypes::WEB)
|
|
29
|
-
value
|
|
30
|
-
end
|
|
27
|
+
option :service_name, default: Ext::SERVICE_NAME
|
|
31
28
|
end
|
|
32
29
|
end
|
|
33
30
|
end
|
data/lib/ddtrace/encoding.rb
CHANGED
|
@@ -21,11 +21,6 @@ module Datadog
|
|
|
21
21
|
encode(to_send)
|
|
22
22
|
end
|
|
23
23
|
|
|
24
|
-
# Encodes services hash
|
|
25
|
-
def encode_services(services)
|
|
26
|
-
encode(services)
|
|
27
|
-
end
|
|
28
|
-
|
|
29
24
|
# Defines the underlying format used during traces or services encoding.
|
|
30
25
|
# This method must be implemented and should only be used by the internal functions.
|
|
31
26
|
def encode(_)
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
require 'ddtrace/ext/forced_tracing'
|
|
2
|
+
require 'ddtrace/ext/priority'
|
|
3
|
+
|
|
4
|
+
module Datadog
|
|
5
|
+
# Defines analytics behavior
|
|
6
|
+
module ForcedTracing
|
|
7
|
+
class << self
|
|
8
|
+
def keep(span)
|
|
9
|
+
return if span.nil? || span.context.nil?
|
|
10
|
+
span.context.sampling_priority = Datadog::Ext::Priority::USER_KEEP
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def drop(span)
|
|
14
|
+
return if span.nil? || span.context.nil?
|
|
15
|
+
span.context.sampling_priority = Datadog::Ext::Priority::USER_REJECT
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
# Extension for Datadog::Span
|
|
20
|
+
module Span
|
|
21
|
+
def self.included(base)
|
|
22
|
+
if Gem::Version.new(RUBY_VERSION) < Gem::Version.new('2.0.0')
|
|
23
|
+
base.class_eval do
|
|
24
|
+
# Instance methods
|
|
25
|
+
include InstanceMethodsCompatibility
|
|
26
|
+
include InstanceMethods
|
|
27
|
+
end
|
|
28
|
+
else
|
|
29
|
+
base.send(:prepend, InstanceMethods)
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
# Compatibility shim for Rubies not supporting `.prepend`
|
|
34
|
+
# NOTE: This patching strategy only works because it has been applied after
|
|
35
|
+
# Datadog::Analytics::Span. Any changes will likely break this.
|
|
36
|
+
module InstanceMethodsCompatibility
|
|
37
|
+
def self.included(base)
|
|
38
|
+
base.send(:alias_method, :set_tag_without_forced_tracing, :set_tag)
|
|
39
|
+
|
|
40
|
+
define_method :set_tag do |*args, &block|
|
|
41
|
+
set_tag_without_forced_tracing(*args, &block)
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
# Instance methods
|
|
47
|
+
module InstanceMethods
|
|
48
|
+
def set_tag(key, value)
|
|
49
|
+
# Configure sampling priority if they give us a forced tracing tag
|
|
50
|
+
# DEV: Do not set if the value they give us is explicitly "false"
|
|
51
|
+
case key
|
|
52
|
+
when Ext::ForcedTracing::TAG_KEEP
|
|
53
|
+
ForcedTracing.keep(self) unless value == false
|
|
54
|
+
when Ext::ForcedTracing::TAG_DROP
|
|
55
|
+
ForcedTracing.drop(self) unless value == false
|
|
56
|
+
else
|
|
57
|
+
# Otherwise, set the tag normally.
|
|
58
|
+
super if defined?(super)
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
end
|
|
64
|
+
end
|
|
@@ -29,6 +29,14 @@ module Datadog
|
|
|
29
29
|
# @param value [String, Numeric, Boolean] the value of the tag. If it's not
|
|
30
30
|
# a String, Numeric, or Boolean it will be encoded with to_s
|
|
31
31
|
def set_tag(key, value)
|
|
32
|
+
# Special cases to convert opentracing tags to datadog tags
|
|
33
|
+
case key
|
|
34
|
+
when 'error'
|
|
35
|
+
# Opentracing supports and `error: <bool>` tag, we need to convert to span status
|
|
36
|
+
# DEV: Do not return, we want to still set the `error` tag as they requested
|
|
37
|
+
datadog_span.status = value ? Datadog::Ext::Errors::STATUS : 0
|
|
38
|
+
end
|
|
39
|
+
|
|
32
40
|
tap { datadog_span.set_tag(key, value) }
|
|
33
41
|
end
|
|
34
42
|
|
data/lib/ddtrace/pin.rb
CHANGED
data/lib/ddtrace/span.rb
CHANGED
|
@@ -3,7 +3,9 @@ require 'thread'
|
|
|
3
3
|
|
|
4
4
|
require 'ddtrace/utils'
|
|
5
5
|
require 'ddtrace/ext/errors'
|
|
6
|
+
require 'ddtrace/ext/priority'
|
|
6
7
|
require 'ddtrace/analytics'
|
|
8
|
+
require 'ddtrace/forced_tracing'
|
|
7
9
|
|
|
8
10
|
module Datadog
|
|
9
11
|
# Represents a logical unit of work in the system. Each trace consists of one or more spans.
|
|
@@ -73,7 +75,7 @@ module Datadog
|
|
|
73
75
|
# must be strings. A valid example is:
|
|
74
76
|
#
|
|
75
77
|
# span.set_tag('http.method', request.method)
|
|
76
|
-
def set_tag(key, value)
|
|
78
|
+
def set_tag(key, value = nil)
|
|
77
79
|
@meta[key] = value.to_s
|
|
78
80
|
rescue StandardError => e
|
|
79
81
|
Datadog::Tracer.log.debug("Unable to set the tag #{key}, ignoring it. Caused by: #{e}")
|
|
@@ -256,3 +258,4 @@ end
|
|
|
256
258
|
|
|
257
259
|
# Include extensions after Span (for Ruby 1.9 compatibility)
|
|
258
260
|
Datadog::Span.send(:include, Datadog::Analytics::Span)
|
|
261
|
+
Datadog::Span.send(:include, Datadog::ForcedTracing::Span)
|
data/lib/ddtrace/sync_writer.rb
CHANGED
|
@@ -10,9 +10,17 @@ module Datadog
|
|
|
10
10
|
end
|
|
11
11
|
end
|
|
12
12
|
|
|
13
|
-
def write(trace, services)
|
|
13
|
+
def write(trace, services = nil)
|
|
14
|
+
unless services.nil?
|
|
15
|
+
Datadog::Patcher.do_once('SyncWriter#write') do
|
|
16
|
+
Datadog::Tracer.log.warn(%(
|
|
17
|
+
write: Writing services has been deprecated and no longer need to be provided.
|
|
18
|
+
write(traces, services) can be updted to write(traces)
|
|
19
|
+
))
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
|
|
14
23
|
perform_concurrently(
|
|
15
|
-
proc { flush_services(services) },
|
|
16
24
|
proc { flush_trace(trace) }
|
|
17
25
|
)
|
|
18
26
|
rescue => e
|
|
@@ -25,10 +33,6 @@ module Datadog
|
|
|
25
33
|
tasks.map { |task| Thread.new(&task) }.each(&:join)
|
|
26
34
|
end
|
|
27
35
|
|
|
28
|
-
def flush_services(services)
|
|
29
|
-
transport.send(:services, services)
|
|
30
|
-
end
|
|
31
|
-
|
|
32
36
|
def flush_trace(trace)
|
|
33
37
|
processed_traces = Pipeline.process!([trace])
|
|
34
38
|
transport.send(:traces, processed_traces)
|
data/lib/ddtrace/tracer.rb
CHANGED
|
@@ -20,7 +20,7 @@ module Datadog
|
|
|
20
20
|
# of these function calls and sub-requests would be encapsulated within a single trace.
|
|
21
21
|
# rubocop:disable Metrics/ClassLength
|
|
22
22
|
class Tracer
|
|
23
|
-
attr_reader :sampler, :
|
|
23
|
+
attr_reader :sampler, :tags, :provider
|
|
24
24
|
attr_accessor :enabled, :writer
|
|
25
25
|
attr_writer :default_service
|
|
26
26
|
|
|
@@ -67,6 +67,15 @@ module Datadog
|
|
|
67
67
|
log.level == Logger::DEBUG
|
|
68
68
|
end
|
|
69
69
|
|
|
70
|
+
def services
|
|
71
|
+
# Only log each deprecation warning once (safeguard against log spam)
|
|
72
|
+
Datadog::Patcher.do_once('Tracer#set_service_info') do
|
|
73
|
+
Datadog::Tracer.log.warn('services: Usage of Tracer.services has been deprecated')
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
{}
|
|
77
|
+
end
|
|
78
|
+
|
|
70
79
|
# Shorthand that calls the `shutdown!` method of a registered worker.
|
|
71
80
|
# It's useful to ensure that the Trace Buffer is properly flushed before
|
|
72
81
|
# shutting down the application.
|
|
@@ -110,7 +119,6 @@ module Datadog
|
|
|
110
119
|
@context_flush = options[:partial_flush] ? Datadog::ContextFlush.new(options) : nil
|
|
111
120
|
|
|
112
121
|
@mutex = Mutex.new
|
|
113
|
-
@services = {}
|
|
114
122
|
@tags = {}
|
|
115
123
|
end
|
|
116
124
|
|
|
@@ -162,14 +170,16 @@ module Datadog
|
|
|
162
170
|
# Set the information about the given service. A valid example is:
|
|
163
171
|
#
|
|
164
172
|
# tracer.set_service_info('web-application', 'rails', 'web')
|
|
173
|
+
#
|
|
174
|
+
# set_service_info is deprecated, no service information needs to be tracked
|
|
165
175
|
def set_service_info(service, app, app_type)
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
176
|
+
# Only log each deprecation warning once (safeguard against log spam)
|
|
177
|
+
Datadog::Patcher.do_once('Tracer#set_service_info') do
|
|
178
|
+
Datadog::Tracer.log.warn(%(
|
|
179
|
+
set_service_info: Usage of set_service_info has been deprecated,
|
|
180
|
+
service information no longer needs to be reported to the trace agent.
|
|
181
|
+
))
|
|
182
|
+
end
|
|
173
183
|
end
|
|
174
184
|
|
|
175
185
|
# A default value for service. One should really override this one
|
|
@@ -380,8 +390,7 @@ module Datadog
|
|
|
380
390
|
Datadog::Tracer.log.debug(str)
|
|
381
391
|
end
|
|
382
392
|
|
|
383
|
-
@writer.write(trace
|
|
384
|
-
@services = {}
|
|
393
|
+
@writer.write(trace)
|
|
385
394
|
end
|
|
386
395
|
|
|
387
396
|
private :write, :guess_context_and_parent
|
data/lib/ddtrace/transport.rb
CHANGED
|
@@ -11,7 +11,7 @@ module Datadog
|
|
|
11
11
|
# rubocop:disable Metrics/ClassLength
|
|
12
12
|
class HTTPTransport
|
|
13
13
|
attr_accessor :hostname, :port
|
|
14
|
-
attr_reader :traces_endpoint
|
|
14
|
+
attr_reader :traces_endpoint
|
|
15
15
|
|
|
16
16
|
DEFAULT_AGENT_HOST = '127.0.0.1'.freeze
|
|
17
17
|
DEFAULT_TRACE_AGENT_PORT = '8126'.freeze
|
|
@@ -27,21 +27,18 @@ module Datadog
|
|
|
27
27
|
V4 = 'v0.4'.freeze => {
|
|
28
28
|
version: V4,
|
|
29
29
|
traces_endpoint: '/v0.4/traces'.freeze,
|
|
30
|
-
services_endpoint: '/v0.4/services'.freeze,
|
|
31
30
|
encoder: Encoding::MsgpackEncoder,
|
|
32
31
|
fallback: 'v0.3'.freeze
|
|
33
32
|
}.freeze,
|
|
34
33
|
V3 = 'v0.3'.freeze => {
|
|
35
34
|
version: V3,
|
|
36
35
|
traces_endpoint: '/v0.3/traces'.freeze,
|
|
37
|
-
services_endpoint: '/v0.3/services'.freeze,
|
|
38
36
|
encoder: Encoding::MsgpackEncoder,
|
|
39
37
|
fallback: 'v0.2'.freeze
|
|
40
38
|
}.freeze,
|
|
41
39
|
V2 = 'v0.2'.freeze => {
|
|
42
40
|
version: V2,
|
|
43
41
|
traces_endpoint: '/v0.2/traces'.freeze,
|
|
44
|
-
services_endpoint: '/v0.2/services'.freeze,
|
|
45
42
|
encoder: Encoding::JSONEncoder
|
|
46
43
|
}.freeze
|
|
47
44
|
}.freeze
|
|
@@ -78,10 +75,7 @@ module Datadog
|
|
|
78
75
|
def send(endpoint, data)
|
|
79
76
|
case endpoint
|
|
80
77
|
when :services
|
|
81
|
-
|
|
82
|
-
status_code = post(@api[:services_endpoint], payload) do |response|
|
|
83
|
-
process_callback(:services, response)
|
|
84
|
-
end
|
|
78
|
+
return nil
|
|
85
79
|
when :traces
|
|
86
80
|
count = data.length
|
|
87
81
|
payload = @encoder.encode_traces(data)
|
data/lib/ddtrace/version.rb
CHANGED
data/lib/ddtrace/workers.rb
CHANGED
|
@@ -16,7 +16,6 @@ module Datadog
|
|
|
16
16
|
SHUTDOWN_TIMEOUT = 1
|
|
17
17
|
|
|
18
18
|
attr_reader \
|
|
19
|
-
:service_buffer,
|
|
20
19
|
:trace_buffer
|
|
21
20
|
|
|
22
21
|
def initialize(options = {})
|
|
@@ -24,7 +23,6 @@ module Datadog
|
|
|
24
23
|
|
|
25
24
|
# Callbacks
|
|
26
25
|
@trace_task = options[:on_trace]
|
|
27
|
-
@service_task = options[:on_service]
|
|
28
26
|
@runtime_metrics_task = options[:on_runtime_metrics]
|
|
29
27
|
|
|
30
28
|
# Intervals
|
|
@@ -35,7 +33,6 @@ module Datadog
|
|
|
35
33
|
# Buffers
|
|
36
34
|
buffer_size = options.fetch(:buffer_size, 100)
|
|
37
35
|
@trace_buffer = TraceBuffer.new(buffer_size)
|
|
38
|
-
@service_buffer = TraceBuffer.new(buffer_size)
|
|
39
36
|
|
|
40
37
|
# Threading
|
|
41
38
|
@shutdown = ConditionVariable.new
|
|
@@ -60,21 +57,6 @@ module Datadog
|
|
|
60
57
|
end
|
|
61
58
|
end
|
|
62
59
|
|
|
63
|
-
# Callback function that process traces and executes the +send_services()+ method.
|
|
64
|
-
def callback_services
|
|
65
|
-
return true if @service_buffer.empty?
|
|
66
|
-
|
|
67
|
-
begin
|
|
68
|
-
services = @service_buffer.pop()
|
|
69
|
-
@service_task.call(services[0], @transport) unless @service_task.nil?
|
|
70
|
-
rescue StandardError => e
|
|
71
|
-
# ensures that the thread will not die because of an exception.
|
|
72
|
-
# TODO[manu]: findout the reason and reschedule the send if it's not
|
|
73
|
-
# a fatal exception
|
|
74
|
-
Datadog::Tracer.log.error("Error during services flush: dropped #{services.length} items. Cause: #{e}")
|
|
75
|
-
end
|
|
76
|
-
end
|
|
77
|
-
|
|
78
60
|
def callback_runtime_metrics
|
|
79
61
|
@runtime_metrics_task.call unless @runtime_metrics_task.nil?
|
|
80
62
|
rescue StandardError => e
|
|
@@ -91,13 +73,12 @@ module Datadog
|
|
|
91
73
|
end
|
|
92
74
|
end
|
|
93
75
|
|
|
94
|
-
# Closes all available queues and waits for the trace
|
|
76
|
+
# Closes all available queues and waits for the trace buffer to flush
|
|
95
77
|
def stop
|
|
96
78
|
@mutex.synchronize do
|
|
97
79
|
return unless @run
|
|
98
80
|
|
|
99
81
|
@trace_buffer.close
|
|
100
|
-
@service_buffer.close
|
|
101
82
|
@run = false
|
|
102
83
|
@shutdown.signal
|
|
103
84
|
end
|
|
@@ -117,12 +98,6 @@ module Datadog
|
|
|
117
98
|
@trace_buffer.push(trace)
|
|
118
99
|
end
|
|
119
100
|
|
|
120
|
-
# Enqueue an item in the service internal buffer. This operation is thread-safe.
|
|
121
|
-
def enqueue_service(service)
|
|
122
|
-
return if service == {} # no use to send this, not worth it
|
|
123
|
-
@service_buffer.push(service)
|
|
124
|
-
end
|
|
125
|
-
|
|
126
101
|
private
|
|
127
102
|
|
|
128
103
|
alias flush_data callback_traces
|
|
@@ -131,11 +106,10 @@ module Datadog
|
|
|
131
106
|
loop do
|
|
132
107
|
@back_off = flush_data ? @flush_interval : [@back_off * BACK_OFF_RATIO, BACK_OFF_MAX].min
|
|
133
108
|
|
|
134
|
-
callback_services
|
|
135
109
|
callback_runtime_metrics
|
|
136
110
|
|
|
137
111
|
@mutex.synchronize do
|
|
138
|
-
return if !@run && @trace_buffer.empty?
|
|
112
|
+
return if !@run && @trace_buffer.empty?
|
|
139
113
|
@shutdown.wait(@mutex, @back_off) if @run # do not wait when shutting down
|
|
140
114
|
end
|
|
141
115
|
end
|
data/lib/ddtrace/writer.rb
CHANGED
|
@@ -34,31 +34,25 @@ module Datadog
|
|
|
34
34
|
Runtime::Metrics.new
|
|
35
35
|
end
|
|
36
36
|
|
|
37
|
-
@services = {}
|
|
38
|
-
|
|
39
37
|
# handles the thread creation after an eventual fork
|
|
40
38
|
@mutex_after_fork = Mutex.new
|
|
41
39
|
@pid = nil
|
|
42
40
|
|
|
43
41
|
@traces_flushed = 0
|
|
44
|
-
@services_flushed = 0
|
|
45
42
|
|
|
46
|
-
# one worker for
|
|
43
|
+
# one worker for traces
|
|
47
44
|
@worker = nil
|
|
48
45
|
end
|
|
49
46
|
|
|
50
|
-
# spawns
|
|
51
|
-
# they share the same transport which is thread-safe
|
|
47
|
+
# spawns a worker for spans; they share the same transport which is thread-safe
|
|
52
48
|
def start
|
|
53
49
|
@pid = Process.pid
|
|
54
50
|
@trace_handler = ->(items, transport) { send_spans(items, transport) }
|
|
55
|
-
@service_handler = ->(items, transport) { send_services(items, transport) }
|
|
56
51
|
@runtime_metrics_handler = -> { send_runtime_metrics }
|
|
57
52
|
@worker = Datadog::Workers::AsyncTransport.new(
|
|
58
53
|
transport: @transport,
|
|
59
54
|
buffer_size: @buff_size,
|
|
60
55
|
on_trace: @trace_handler,
|
|
61
|
-
on_service: @service_handler,
|
|
62
56
|
on_runtime_metrics: @runtime_metrics_handler,
|
|
63
57
|
interval: @flush_interval
|
|
64
58
|
)
|
|
@@ -66,7 +60,7 @@ module Datadog
|
|
|
66
60
|
@worker.start()
|
|
67
61
|
end
|
|
68
62
|
|
|
69
|
-
# stops
|
|
63
|
+
# stops worker for spans.
|
|
70
64
|
def stop
|
|
71
65
|
@worker.stop()
|
|
72
66
|
@worker = nil
|
|
@@ -83,17 +77,6 @@ module Datadog
|
|
|
83
77
|
status
|
|
84
78
|
end
|
|
85
79
|
|
|
86
|
-
# flush services to the trace-agent, handles services only
|
|
87
|
-
def send_services(services, transport)
|
|
88
|
-
return true if services.empty?
|
|
89
|
-
|
|
90
|
-
code = transport.send(:services, services)
|
|
91
|
-
status = !transport.server_error?(code)
|
|
92
|
-
@services_flushed += 1 if status
|
|
93
|
-
|
|
94
|
-
status
|
|
95
|
-
end
|
|
96
|
-
|
|
97
80
|
def send_runtime_metrics
|
|
98
81
|
return unless Datadog.configuration.runtime_metrics_enabled
|
|
99
82
|
|
|
@@ -101,7 +84,16 @@ module Datadog
|
|
|
101
84
|
end
|
|
102
85
|
|
|
103
86
|
# enqueue the trace for submission to the API
|
|
104
|
-
def write(trace, services)
|
|
87
|
+
def write(trace, services = nil)
|
|
88
|
+
unless services.nil?
|
|
89
|
+
Datadog::Patcher.do_once('Writer#write') do
|
|
90
|
+
Datadog::Tracer.log.warn(%(
|
|
91
|
+
write: Writing services has been deprecated and no longer need to be provided.
|
|
92
|
+
write(traces, services) can be updted to write(traces)
|
|
93
|
+
))
|
|
94
|
+
end
|
|
95
|
+
end
|
|
96
|
+
|
|
105
97
|
# In multiprocess environments, the main process initializes the +Writer+ instance and if
|
|
106
98
|
# the process forks (i.e. a web server like Unicorn or Puma with multiple workers) the new
|
|
107
99
|
# processes will share the same +Writer+ until the first write (COW). Because of that,
|
|
@@ -122,14 +114,12 @@ module Datadog
|
|
|
122
114
|
runtime_metrics.associate_with_span(trace.first) unless trace.empty?
|
|
123
115
|
|
|
124
116
|
@worker.enqueue_trace(trace)
|
|
125
|
-
@worker.enqueue_service(services)
|
|
126
117
|
end
|
|
127
118
|
|
|
128
119
|
# stats returns a dictionary of stats about the writer.
|
|
129
120
|
def stats
|
|
130
121
|
{
|
|
131
122
|
traces_flushed: @traces_flushed,
|
|
132
|
-
services_flushed: @services_flushed,
|
|
133
123
|
transport: @transport.stats
|
|
134
124
|
}
|
|
135
125
|
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.23.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-04-
|
|
11
|
+
date: 2019-04-30 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: msgpack
|
|
@@ -523,12 +523,14 @@ files:
|
|
|
523
523
|
- lib/ddtrace/ext/app_types.rb
|
|
524
524
|
- lib/ddtrace/ext/distributed.rb
|
|
525
525
|
- lib/ddtrace/ext/errors.rb
|
|
526
|
+
- lib/ddtrace/ext/forced_tracing.rb
|
|
526
527
|
- lib/ddtrace/ext/http.rb
|
|
527
528
|
- lib/ddtrace/ext/metrics.rb
|
|
528
529
|
- lib/ddtrace/ext/net.rb
|
|
529
530
|
- lib/ddtrace/ext/priority.rb
|
|
530
531
|
- lib/ddtrace/ext/runtime.rb
|
|
531
532
|
- lib/ddtrace/ext/sql.rb
|
|
533
|
+
- lib/ddtrace/forced_tracing.rb
|
|
532
534
|
- lib/ddtrace/logger.rb
|
|
533
535
|
- lib/ddtrace/metrics.rb
|
|
534
536
|
- lib/ddtrace/monkey.rb
|
|
@@ -598,7 +600,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
598
600
|
version: '0'
|
|
599
601
|
requirements: []
|
|
600
602
|
rubyforge_project:
|
|
601
|
-
rubygems_version: 2.
|
|
603
|
+
rubygems_version: 2.6.14
|
|
602
604
|
signing_key:
|
|
603
605
|
specification_version: 4
|
|
604
606
|
summary: Datadog tracing code for your Ruby applications
|