ddtrace 1.0.0.beta2 → 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +42 -1
- data/ddtrace.gemspec +1 -1
- data/docs/GettingStarted.md +1 -0
- data/docs/UpgradeGuide.md +1 -0
- data/lib/datadog/appsec/contrib/rack/request.rb +8 -1
- data/lib/datadog/tracing/context_provider.rb +18 -19
- data/lib/datadog/tracing/contrib/graphql/ext.rb +2 -2
- data/lib/datadog/tracing/contrib/graphql/patcher.rb +29 -2
- data/lib/datadog/tracing/contrib/rails/patcher.rb +6 -2
- data/lib/datadog/tracing/correlation.rb +10 -19
- data/lib/datadog/tracing/span.rb +5 -4
- data/lib/datadog/tracing/span_operation.rb +4 -4
- data/lib/datadog/tracing/trace_operation.rb +28 -22
- data/lib/datadog/tracing/trace_segment.rb +2 -2
- data/lib/datadog/tracing/tracer.rb +1 -1
- data/lib/ddtrace/version.rb +1 -1
- metadata +5 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 14636ceebc61d9de8ea83328295cb728de928bd0cf80af29f6c4f73d759ff243
|
4
|
+
data.tar.gz: 92110181e57676c407a782a3729a19499b3175fd653162ff260b79be8f75a502
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0dc73ef73c3269adfb1cbf50ba22df0f06b5e9a0237f8bec8428e1b4f9445e45f20fb5ede5c88355e18f4562b2f561b0a4f089715ff44aabf52130a6915e4498
|
7
|
+
data.tar.gz: f44f40e302ae841147d5bbd62ebc0fe716ee6b30e8776820efd4c39fd3f9c184b0919dc3752b30316c87e0cde19f5380a42ad6cb9290e319183b8440fef11be1
|
data/CHANGELOG.md
CHANGED
@@ -2,6 +2,34 @@
|
|
2
2
|
|
3
3
|
## [Unreleased]
|
4
4
|
|
5
|
+
## [1.0.0] - 2022-04-28
|
6
|
+
|
7
|
+
Release notes: https://github.com/DataDog/dd-trace-rb/releases/tag/v1.0.0
|
8
|
+
|
9
|
+
Git diff: https://github.com/DataDog/dd-trace-rb/compare/v1.0.0.beta2...v1.0.0
|
10
|
+
|
11
|
+
Diff since last stable release: https://github.com/DataDog/dd-trace-rb/compare/v0.54.2...v1.0.0
|
12
|
+
|
13
|
+
### Added
|
14
|
+
|
15
|
+
- GraphQL 2.0 support ([#1982][])
|
16
|
+
|
17
|
+
### Changed
|
18
|
+
|
19
|
+
- AppSec: Update libddwaf to 1.3.0 ([#1981][])
|
20
|
+
|
21
|
+
### Fixed
|
22
|
+
|
23
|
+
- Rails log correlation ([#1989][]) ([@cwoodcox][])
|
24
|
+
- Resource not inherited from lazily annotated spans ([#1983][])
|
25
|
+
- AppSec: Query address for libddwaf ([#1990][])
|
26
|
+
|
27
|
+
### Refactored
|
28
|
+
|
29
|
+
- Docs: Add undocumented Rake option ([#1980][]) ([@ecdemis123][])
|
30
|
+
- Improvements to test suite & CI ([#1970][], [#1974][], [#1991][])
|
31
|
+
- Improvements to documentation ([#1984][])
|
32
|
+
|
5
33
|
## [1.0.0.beta2] - 2022-04-14
|
6
34
|
|
7
35
|
Release notes: https://github.com/DataDog/dd-trace-rb/releases/tag/v1.0.0.beta2
|
@@ -1959,7 +1987,8 @@ Release notes: https://github.com/DataDog/dd-trace-rb/releases/tag/v0.3.1
|
|
1959
1987
|
|
1960
1988
|
Git diff: https://github.com/DataDog/dd-trace-rb/compare/v0.3.0...v0.3.1
|
1961
1989
|
|
1962
|
-
[Unreleased]: https://github.com/DataDog/dd-trace-rb/compare/v1.0.0
|
1990
|
+
[Unreleased]: https://github.com/DataDog/dd-trace-rb/compare/v1.0.0...master
|
1991
|
+
[1.0.0]: https://github.com/DataDog/dd-trace-rb/compare/v1.0.0.beta2...v1.0.0
|
1963
1992
|
[1.0.0.beta2]: https://github.com/DataDog/dd-trace-rb/compare/v1.0.0.beta1...v1.0.0.beta2
|
1964
1993
|
[1.0.0.beta1]: https://github.com/DataDog/dd-trace-rb/compare/v0.54.2...v1.0.0.beta1
|
1965
1994
|
[0.54.2]: https://github.com/DataDog/dd-trace-rb/compare/v0.54.1...v0.54.2
|
@@ -2782,9 +2811,19 @@ Git diff: https://github.com/DataDog/dd-trace-rb/compare/v0.3.0...v0.3.1
|
|
2782
2811
|
[#1964]: https://github.com/DataDog/dd-trace-rb/issues/1964
|
2783
2812
|
[#1965]: https://github.com/DataDog/dd-trace-rb/issues/1965
|
2784
2813
|
[#1968]: https://github.com/DataDog/dd-trace-rb/issues/1968
|
2814
|
+
[#1970]: https://github.com/DataDog/dd-trace-rb/issues/1970
|
2785
2815
|
[#1973]: https://github.com/DataDog/dd-trace-rb/issues/1973
|
2816
|
+
[#1974]: https://github.com/DataDog/dd-trace-rb/issues/1974
|
2786
2817
|
[#1975]: https://github.com/DataDog/dd-trace-rb/issues/1975
|
2787
2818
|
[#1976]: https://github.com/DataDog/dd-trace-rb/issues/1976
|
2819
|
+
[#1980]: https://github.com/DataDog/dd-trace-rb/issues/1980
|
2820
|
+
[#1981]: https://github.com/DataDog/dd-trace-rb/issues/1981
|
2821
|
+
[#1982]: https://github.com/DataDog/dd-trace-rb/issues/1982
|
2822
|
+
[#1983]: https://github.com/DataDog/dd-trace-rb/issues/1983
|
2823
|
+
[#1984]: https://github.com/DataDog/dd-trace-rb/issues/1984
|
2824
|
+
[#1989]: https://github.com/DataDog/dd-trace-rb/issues/1989
|
2825
|
+
[#1990]: https://github.com/DataDog/dd-trace-rb/issues/1990
|
2826
|
+
[#1991]: https://github.com/DataDog/dd-trace-rb/issues/1991
|
2788
2827
|
[@AdrianLC]: https://github.com/AdrianLC
|
2789
2828
|
[@Azure7111]: https://github.com/Azure7111
|
2790
2829
|
[@BabyGroot]: https://github.com/BabyGroot
|
@@ -2826,6 +2865,7 @@ Git diff: https://github.com/DataDog/dd-trace-rb/compare/v0.3.0...v0.3.1
|
|
2826
2865
|
[@ck3g]: https://github.com/ck3g
|
2827
2866
|
[@components]: https://github.com/components
|
2828
2867
|
[@cswatt]: https://github.com/cswatt
|
2868
|
+
[@cwoodcox]: https://github.com/cwoodcox
|
2829
2869
|
[@dasch]: https://github.com/dasch
|
2830
2870
|
[@dim]: https://github.com/dim
|
2831
2871
|
[@dirk]: https://github.com/dirk
|
@@ -2834,6 +2874,7 @@ Git diff: https://github.com/DataDog/dd-trace-rb/compare/v0.3.0...v0.3.1
|
|
2834
2874
|
[@drcapulet]: https://github.com/drcapulet
|
2835
2875
|
[@dudo]: https://github.com/dudo
|
2836
2876
|
[@e1senh0rn]: https://github.com/e1senh0rn
|
2877
|
+
[@ecdemis123]: https://github.com/ecdemis123
|
2837
2878
|
[@elliterate]: https://github.com/elliterate
|
2838
2879
|
[@elyalvarado]: https://github.com/elyalvarado
|
2839
2880
|
[@ericmustin]: https://github.com/ericmustin
|
data/ddtrace.gemspec
CHANGED
@@ -53,7 +53,7 @@ Gem::Specification.new do |spec|
|
|
53
53
|
spec.add_dependency 'debase-ruby_core_source', '<= 0.10.15'
|
54
54
|
|
55
55
|
# Used by appsec
|
56
|
-
spec.add_dependency 'libddwaf', '~> 1.
|
56
|
+
spec.add_dependency 'libddwaf', '~> 1.3.0.0.0.a'
|
57
57
|
|
58
58
|
spec.extensions = ['ext/ddtrace_profiling_native_extension/extconf.rb']
|
59
59
|
end
|
data/docs/GettingStarted.md
CHANGED
@@ -1585,6 +1585,7 @@ Where `options` is an optional `Hash` that accepts the following parameters:
|
|
1585
1585
|
| --- | ----------- | ------- |
|
1586
1586
|
| `enabled` | Defines whether Rake tasks should be traced. Useful for temporarily disabling tracing. `true` or `false` | `true` |
|
1587
1587
|
| `quantize` | Hash containing options for quantization of task arguments. See below for more details and examples. | `{}` |
|
1588
|
+
| `service_name` | Service name used for `rake` instrumentation | `'rake'` |
|
1588
1589
|
|
1589
1590
|
**Configuring task quantization behavior**
|
1590
1591
|
|
data/docs/UpgradeGuide.md
CHANGED
@@ -689,6 +689,7 @@ end
|
|
689
689
|
| General | Changed | Many constants have been moved from `Datadog` to `Datadog::Core`, `Datadog::Tracing` | Update your references to these [new namespaces](#1.0-appendix-namespace-constants) where appropriate. |
|
690
690
|
| General | Changed | Some `require` paths have been moved from `ddtrace` to `datadog` | Update your references to these [new paths](#1.0-appendix-namespace-requires) where appropriate. |
|
691
691
|
| General | Removed | Support for trace agent API v0.2 | Use v0.4 instead (default behavior.) |
|
692
|
+
| General | Removed | `Datadog.configure` can no longer be called without a block | Remove uses of `Datadog.configure` without a block. |
|
692
693
|
| CI API | Changed | `DD_TRACE_CI_MODE_ENABLED` environment variable is now `DD_TRACE_CI_ENABLED` | Use `DD_TRACE_CI_ENABLED` instead. |
|
693
694
|
| Configuration | Changed | Many settings have been namespaced under specific categories | Update your configuration to these [new settings](#1.0-configuration-settings) where appropriate. |
|
694
695
|
| Configuration | Removed | `Datadog.configure(client, options)` | Use `Datadog::Tracing.configure_onto(client, options)` instead. |
|
@@ -7,7 +7,14 @@ module Datadog
|
|
7
7
|
# Normalized extration of data from Rack::Request
|
8
8
|
module Request
|
9
9
|
def self.query(request)
|
10
|
-
|
10
|
+
# Downstream libddwaf expects keys and values to be extractable
|
11
|
+
# separately so we can't use [[k, v], ...]. We also want to allow
|
12
|
+
# duplicate keys, so we use [{k, v}, ...] instead.
|
13
|
+
request.query_string.split('&').map do |e|
|
14
|
+
k, v = e.split('=').map { |s| CGI.unescape(s) }
|
15
|
+
|
16
|
+
{ k => v }
|
17
|
+
end
|
11
18
|
end
|
12
19
|
|
13
20
|
# Rack < 2.0 does not have :each_header
|
@@ -5,12 +5,14 @@ require 'datadog/tracing/context'
|
|
5
5
|
module Datadog
|
6
6
|
module Tracing
|
7
7
|
# DefaultContextProvider is a default context provider that retrieves
|
8
|
-
# all contexts from the current
|
8
|
+
# all contexts from the current fiber-local storage. It is suitable for
|
9
9
|
# synchronous programming.
|
10
|
+
#
|
11
|
+
# @see https://ruby-doc.org/core-3.1.2/Thread.html#method-i-5B-5D Thread attributes are fiber-local
|
10
12
|
class DefaultContextProvider
|
11
|
-
# Initializes the default context provider with a
|
13
|
+
# Initializes the default context provider with a fiber-bound context.
|
12
14
|
def initialize
|
13
|
-
@context =
|
15
|
+
@context = FiberLocalContext.new
|
14
16
|
end
|
15
17
|
|
16
18
|
# Sets the current context.
|
@@ -35,32 +37,29 @@ module Datadog
|
|
35
37
|
end
|
36
38
|
end
|
37
39
|
|
38
|
-
#
|
39
|
-
# a different {Datadog::Tracing::Context} for each
|
40
|
-
#
|
41
|
-
#
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
#
|
46
|
-
#
|
47
|
-
#
|
48
|
-
# To support multiple tracers simultaneously, each {Datadog::Tracing::ThreadLocalContext}
|
49
|
-
# instance has its own thread-local variable.
|
40
|
+
# FiberLocalContext can be used as a tracer global reference to create
|
41
|
+
# a different {Datadog::Tracing::Context} for each fiber. This allows for the tracer
|
42
|
+
# to create a serial execution graph regardless of any concurrent execution: each
|
43
|
+
# concurrent execution path creates a new trace graph.
|
44
|
+
#
|
45
|
+
# @see https://ruby-doc.org/core-3.1.2/Thread.html#method-i-5B-5D Thread attributes are fiber-local
|
46
|
+
class FiberLocalContext
|
47
|
+
# To support multiple tracers simultaneously, each {Datadog::Tracing::FiberLocalContext}
|
48
|
+
# instance has its own fiber-local variable.
|
50
49
|
def initialize
|
51
50
|
@key = "datadog_context_#{object_id}".to_sym
|
52
51
|
|
53
52
|
self.local = Context.new
|
54
53
|
end
|
55
54
|
|
56
|
-
# Override the
|
55
|
+
# Override the fiber-local context with a new context.
|
57
56
|
def local=(ctx)
|
58
57
|
Thread.current[@key] = ctx
|
59
58
|
end
|
60
59
|
|
61
|
-
# Return the
|
62
|
-
def local(
|
63
|
-
|
60
|
+
# Return the fiber-local context.
|
61
|
+
def local(storage = Thread.current)
|
62
|
+
storage[@key] ||= Context.new
|
64
63
|
end
|
65
64
|
end
|
66
65
|
end
|
@@ -7,11 +7,11 @@ module Datadog
|
|
7
7
|
# GraphQL integration constants
|
8
8
|
# @public_api Changing resource names, tag names, or environment variables creates breaking changes.
|
9
9
|
module Ext
|
10
|
-
APP = 'ruby-graphql'.freeze
|
11
10
|
ENV_ENABLED = 'DD_TRACE_GRAPHQL_ENABLED'.freeze
|
12
11
|
ENV_ANALYTICS_ENABLED = 'DD_TRACE_GRAPHQL_ANALYTICS_ENABLED'.freeze
|
13
12
|
ENV_ANALYTICS_SAMPLE_RATE = 'DD_TRACE_GRAPHQL_ANALYTICS_SAMPLE_RATE'.freeze
|
14
|
-
SERVICE_NAME = '
|
13
|
+
SERVICE_NAME = 'graphql'.freeze
|
14
|
+
TAG_COMPONENT = 'graphql'.freeze
|
15
15
|
end
|
16
16
|
end
|
17
17
|
end
|
@@ -20,9 +20,11 @@ module Datadog
|
|
20
20
|
end
|
21
21
|
|
22
22
|
def patch
|
23
|
-
|
23
|
+
if (schemas = get_option(:schemas))
|
24
|
+
schemas.each { |s| patch_schema!(s) }
|
25
|
+
end
|
24
26
|
|
25
|
-
|
27
|
+
patch_legacy_gem!
|
26
28
|
end
|
27
29
|
|
28
30
|
def patch_schema!(schema)
|
@@ -55,9 +57,34 @@ module Datadog
|
|
55
57
|
end
|
56
58
|
end
|
57
59
|
|
60
|
+
# Before https://github.com/rmosolgo/graphql-ruby/pull/4038 was introduced,
|
61
|
+
# we were left with incompatibilities between ddtrace 1.0 and older graphql gem versions.
|
62
|
+
def patch_legacy_gem!
|
63
|
+
return unless Gem::Version.new(::GraphQL::VERSION) <= Gem::Version.new('2.0.6')
|
64
|
+
|
65
|
+
::GraphQL::Tracing::DataDogTracing.prepend(PatchLegacyGem)
|
66
|
+
end
|
67
|
+
|
58
68
|
def get_option(option)
|
59
69
|
Datadog.configuration.tracing[:graphql].get_option(option)
|
60
70
|
end
|
71
|
+
|
72
|
+
# Patches the graphql gem to support ddtrace 1.0.
|
73
|
+
# This is not necessary in versions containing https://github.com/rmosolgo/graphql-ruby/pull/4038.
|
74
|
+
module PatchLegacyGem
|
75
|
+
# Ensure invocation to #trace method targets the new namespaced public API object,
|
76
|
+
# instead of the old global Datadog.trace.
|
77
|
+
# This is fixed in graphql > 2.0.3.
|
78
|
+
def tracer
|
79
|
+
options.fetch(:tracer, Datadog::Tracing) # GraphQL will invoke #trace on the returned object
|
80
|
+
end
|
81
|
+
|
82
|
+
# Ensure resource name is not left as `nil`.
|
83
|
+
# This is fixed in graphql > 2.0.6.
|
84
|
+
def fallback_transaction_name(context)
|
85
|
+
context[:tracing_fallback_transaction_name] || 'execute.graphql'
|
86
|
+
end
|
87
|
+
end
|
61
88
|
end
|
62
89
|
end
|
63
90
|
end
|
@@ -81,7 +81,9 @@ module Datadog
|
|
81
81
|
|
82
82
|
# if lograge isn't set, check if tagged logged is enabled.
|
83
83
|
# if so, add proc that injects trace identifiers for tagged logging.
|
84
|
-
|
84
|
+
logger = app.config.logger || ::Rails.logger
|
85
|
+
|
86
|
+
if logger \
|
85
87
|
&& defined?(::ActiveSupport::TaggedLogging) \
|
86
88
|
&& logger.is_a?(::ActiveSupport::TaggedLogging)
|
87
89
|
|
@@ -89,7 +91,9 @@ module Datadog
|
|
89
91
|
should_warn = false
|
90
92
|
end
|
91
93
|
|
92
|
-
|
94
|
+
if should_warn
|
95
|
+
Datadog.logger.warn("Unable to enable Datadog Trace context, Logger #{logger.class} is not supported")
|
96
|
+
end
|
93
97
|
end
|
94
98
|
|
95
99
|
def patch_after_intialize
|
@@ -30,8 +30,6 @@ module Datadog
|
|
30
30
|
:trace_service,
|
31
31
|
:version
|
32
32
|
|
33
|
-
# rubocop:disable Metrics/CyclomaticComplexity
|
34
|
-
# rubocop:disable Metrics/PerceivedComplexity
|
35
33
|
# @!visibility private
|
36
34
|
def initialize(
|
37
35
|
env: nil,
|
@@ -48,26 +46,19 @@ module Datadog
|
|
48
46
|
version: nil
|
49
47
|
)
|
50
48
|
# Dup and freeze strings so they aren't modified by reference.
|
51
|
-
@env = env || Datadog.configuration.env
|
52
|
-
@service = service || Datadog.configuration.service
|
49
|
+
@env = Core::Utils::SafeDup.frozen_or_dup(env || Datadog.configuration.env).freeze
|
50
|
+
@service = Core::Utils::SafeDup.frozen_or_dup(service || Datadog.configuration.service).freeze
|
53
51
|
@span_id = span_id || 0
|
54
|
-
@span_name = span_name
|
55
|
-
@span_resource = span_resource
|
56
|
-
@span_service = span_service
|
57
|
-
@span_type = span_type
|
52
|
+
@span_name = Core::Utils::SafeDup.frozen_or_dup(span_name).freeze
|
53
|
+
@span_resource = Core::Utils::SafeDup.frozen_or_dup(span_resource).freeze
|
54
|
+
@span_service = Core::Utils::SafeDup.frozen_or_dup(span_service).freeze
|
55
|
+
@span_type = Core::Utils::SafeDup.frozen_or_dup(span_type).freeze
|
58
56
|
@trace_id = trace_id || 0
|
59
|
-
@trace_name = trace_name
|
60
|
-
@trace_resource = trace_resource
|
61
|
-
@trace_service = trace_service
|
62
|
-
@version = version || Datadog.configuration.version
|
63
|
-
|
64
|
-
# Finish freezing globals
|
65
|
-
@service = @service.dup.freeze unless @service.nil?
|
66
|
-
@env = @env.dup.freeze unless @env.nil?
|
67
|
-
@version = @version.dup.freeze unless @version.nil?
|
57
|
+
@trace_name = Core::Utils::SafeDup.frozen_or_dup(trace_name).freeze
|
58
|
+
@trace_resource = Core::Utils::SafeDup.frozen_or_dup(trace_resource).freeze
|
59
|
+
@trace_service = Core::Utils::SafeDup.frozen_or_dup(trace_service).freeze
|
60
|
+
@version = Core::Utils::SafeDup.frozen_or_dup(version || Datadog.configuration.version).freeze
|
68
61
|
end
|
69
|
-
# rubocop:enable Metrics/CyclomaticComplexity
|
70
|
-
# rubocop:enable Metrics/PerceivedComplexity
|
71
62
|
|
72
63
|
def to_log_format
|
73
64
|
@log_format ||= begin
|
data/lib/datadog/tracing/span.rb
CHANGED
@@ -3,6 +3,7 @@
|
|
3
3
|
# typed: true
|
4
4
|
|
5
5
|
require 'datadog/core/utils'
|
6
|
+
require 'datadog/core/utils/safe_dup'
|
6
7
|
|
7
8
|
require 'datadog/tracing/metadata/ext'
|
8
9
|
require 'datadog/tracing/metadata'
|
@@ -79,10 +80,10 @@ module Datadog
|
|
79
80
|
type: span_type,
|
80
81
|
trace_id: nil
|
81
82
|
)
|
82
|
-
@name = name
|
83
|
-
@service = service
|
84
|
-
@resource = resource
|
85
|
-
@type = type
|
83
|
+
@name = Core::Utils::SafeDup.frozen_or_dup(name)
|
84
|
+
@service = Core::Utils::SafeDup.frozen_or_dup(service)
|
85
|
+
@resource = Core::Utils::SafeDup.frozen_or_dup(resource)
|
86
|
+
@type = Core::Utils::SafeDup.frozen_or_dup(type)
|
86
87
|
|
87
88
|
@id = id || Core::Utils.next_id
|
88
89
|
@parent_id = parent_id || 0
|
@@ -457,18 +457,18 @@ module Datadog
|
|
457
457
|
# we don't want this SpanOperation to modify it further.
|
458
458
|
def build_span
|
459
459
|
Span.new(
|
460
|
-
@name
|
460
|
+
@name,
|
461
461
|
duration: duration,
|
462
462
|
end_time: @end_time,
|
463
463
|
id: @id,
|
464
464
|
meta: meta.dup,
|
465
465
|
metrics: metrics.dup,
|
466
466
|
parent_id: @parent_id,
|
467
|
-
resource: @resource
|
468
|
-
service: @service
|
467
|
+
resource: @resource,
|
468
|
+
service: @service,
|
469
469
|
start_time: @start_time,
|
470
470
|
status: @status,
|
471
|
-
type: @type
|
471
|
+
type: @type,
|
472
472
|
trace_id: @trace_id
|
473
473
|
)
|
474
474
|
end
|
@@ -32,14 +32,11 @@ module Datadog
|
|
32
32
|
attr_accessor \
|
33
33
|
:agent_sample_rate,
|
34
34
|
:hostname,
|
35
|
-
:name,
|
36
35
|
:origin,
|
37
36
|
:rate_limiter_rate,
|
38
|
-
:resource,
|
39
37
|
:rule_sample_rate,
|
40
38
|
:sample_rate,
|
41
|
-
:sampling_priority
|
42
|
-
:service
|
39
|
+
:sampling_priority
|
43
40
|
|
44
41
|
attr_reader \
|
45
42
|
:active_span_count,
|
@@ -49,7 +46,10 @@ module Datadog
|
|
49
46
|
:parent_span_id
|
50
47
|
|
51
48
|
attr_writer \
|
52
|
-
:
|
49
|
+
:name,
|
50
|
+
:resource,
|
51
|
+
:sampled,
|
52
|
+
:service
|
53
53
|
|
54
54
|
def initialize(
|
55
55
|
agent_sample_rate: nil,
|
@@ -128,6 +128,18 @@ module Datadog
|
|
128
128
|
self.sampling_priority = Sampling::Ext::Priority::USER_REJECT
|
129
129
|
end
|
130
130
|
|
131
|
+
def name
|
132
|
+
@name || (root_span && root_span.name)
|
133
|
+
end
|
134
|
+
|
135
|
+
def resource
|
136
|
+
@resource || (root_span && root_span.resource)
|
137
|
+
end
|
138
|
+
|
139
|
+
def service
|
140
|
+
@service || (root_span && root_span.service)
|
141
|
+
end
|
142
|
+
|
131
143
|
def measure(
|
132
144
|
op_name,
|
133
145
|
events: nil,
|
@@ -242,13 +254,13 @@ module Datadog
|
|
242
254
|
span_type: (@active_span && @active_span.type),
|
243
255
|
trace_hostname: @hostname,
|
244
256
|
trace_id: @id,
|
245
|
-
trace_name:
|
257
|
+
trace_name: name,
|
246
258
|
trace_origin: @origin,
|
247
259
|
trace_process_id: Core::Environment::Identity.pid,
|
248
|
-
trace_resource:
|
260
|
+
trace_resource: resource,
|
249
261
|
trace_runtime_id: Core::Environment::Identity.id,
|
250
262
|
trace_sampling_priority: @sampling_priority,
|
251
|
-
trace_service:
|
263
|
+
trace_service: service,
|
252
264
|
).freeze
|
253
265
|
end
|
254
266
|
|
@@ -261,16 +273,16 @@ module Datadog
|
|
261
273
|
hostname: (@hostname && @hostname.dup),
|
262
274
|
id: @id,
|
263
275
|
max_length: @max_length,
|
264
|
-
name: (
|
276
|
+
name: (name && name.dup),
|
265
277
|
origin: (@origin && @origin.dup),
|
266
278
|
parent_span_id: (@active_span && @active_span.id) || @parent_span_id,
|
267
279
|
rate_limiter_rate: @rate_limiter_rate,
|
268
|
-
resource: (
|
280
|
+
resource: (resource && resource.dup),
|
269
281
|
rule_sample_rate: @rule_sample_rate,
|
270
282
|
sample_rate: @sample_rate,
|
271
283
|
sampled: @sampled,
|
272
284
|
sampling_priority: @sampling_priority,
|
273
|
-
service: (
|
285
|
+
service: (service && service.dup),
|
274
286
|
tags: meta.dup,
|
275
287
|
metrics: metrics.dup
|
276
288
|
)
|
@@ -370,7 +382,7 @@ module Datadog
|
|
370
382
|
deactivate_span!(span_op)
|
371
383
|
|
372
384
|
# Set finished, to signal root span has completed.
|
373
|
-
@finished = true if span_op ==
|
385
|
+
@finished = true if span_op == root_span
|
374
386
|
|
375
387
|
# Update active span count
|
376
388
|
@active_span_count -= 1
|
@@ -390,12 +402,6 @@ module Datadog
|
|
390
402
|
return if span.nil? || root_span
|
391
403
|
|
392
404
|
@root_span = span
|
393
|
-
|
394
|
-
# Auto populate these attributes if
|
395
|
-
# they haven't been set yet.
|
396
|
-
@name ||= span.name
|
397
|
-
@resource ||= span.resource
|
398
|
-
@service ||= span.service
|
399
405
|
end
|
400
406
|
|
401
407
|
def build_trace(spans, partial = false)
|
@@ -412,12 +418,12 @@ module Datadog
|
|
412
418
|
runtime_id: Core::Environment::Identity.id,
|
413
419
|
sample_rate: @sample_rate,
|
414
420
|
sampling_priority: @sampling_priority,
|
415
|
-
name:
|
416
|
-
resource:
|
417
|
-
service:
|
421
|
+
name: name,
|
422
|
+
resource: resource,
|
423
|
+
service: service,
|
418
424
|
tags: meta,
|
419
425
|
metrics: metrics,
|
420
|
-
root_span_id: !partial ?
|
426
|
+
root_span_id: !partial ? root_span && root_span.id : nil
|
421
427
|
)
|
422
428
|
end
|
423
429
|
end
|
@@ -62,8 +62,8 @@ module Datadog
|
|
62
62
|
|
63
63
|
# Does not make an effort to move metrics out of tags
|
64
64
|
# The caller is expected to have done that
|
65
|
-
@meta = tags || {}
|
66
|
-
@metrics = metrics || {}
|
65
|
+
@meta = (tags && tags.dup) || {}
|
66
|
+
@metrics = (metrics && metrics.dup) || {}
|
67
67
|
|
68
68
|
# Set well-known tags, defaulting to getting the values from tags
|
69
69
|
@agent_sample_rate = agent_sample_rate || agent_sample_rate_tag
|
@@ -199,7 +199,7 @@ module Datadog
|
|
199
199
|
|
200
200
|
# The active, unfinished trace, representing the current instrumentation context.
|
201
201
|
#
|
202
|
-
# The active trace is
|
202
|
+
# The active trace is fiber-local.
|
203
203
|
#
|
204
204
|
# @param [Thread] key Thread to retrieve trace from. Defaults to current thread. For internal use only.
|
205
205
|
# @return [Datadog::Tracing::TraceSegment] the active trace
|
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: 1.0.0
|
4
|
+
version: 1.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Datadog, Inc.
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-04-
|
11
|
+
date: 2022-04-29 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: msgpack
|
@@ -44,14 +44,14 @@ dependencies:
|
|
44
44
|
requirements:
|
45
45
|
- - "~>"
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version: 1.
|
47
|
+
version: 1.3.0.0.0.a
|
48
48
|
type: :runtime
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
52
|
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version: 1.
|
54
|
+
version: 1.3.0.0.0.a
|
55
55
|
description: |
|
56
56
|
ddtrace is Datadog’s tracing client for Ruby. It is used to trace requests
|
57
57
|
as they flow across web servers, databases and microservices so that developers
|
@@ -717,7 +717,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
717
717
|
- !ruby/object:Gem::Version
|
718
718
|
version: 2.0.0
|
719
719
|
requirements: []
|
720
|
-
rubygems_version: 3.
|
720
|
+
rubygems_version: 3.1.6
|
721
721
|
signing_key:
|
722
722
|
specification_version: 4
|
723
723
|
summary: Datadog tracing code for your Ruby applications
|