datadog-ci 0.3.0 → 0.4.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.
@@ -1,82 +1,118 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require "datadog/tracing"
4
- require "datadog/tracing/contrib/analytics"
4
+
5
+ require "rbconfig"
5
6
 
6
7
  require_relative "ext/app_types"
7
8
  require_relative "ext/test"
8
9
  require_relative "ext/environment"
9
10
 
10
- require "rbconfig"
11
+ require_relative "context/local"
12
+
13
+ require_relative "span"
14
+ require_relative "test"
11
15
 
12
16
  module Datadog
13
17
  module CI
14
18
  # Common behavior for CI tests
15
- module Recorder
19
+ class Recorder
20
+ attr_reader :environment_tags
21
+
22
+ def initialize
23
+ @environment_tags = Ext::Environment.tags(ENV).freeze
24
+ @local_context = Context::Local.new
25
+ end
26
+
16
27
  # Creates a new span for a CI test
17
- def self.trace(span_name, options = {})
28
+ def trace_test(test_name, service_name: nil, operation_name: "test", tags: {}, &block)
18
29
  span_options = {
30
+ resource: test_name,
31
+ service: service_name,
19
32
  span_type: Ext::AppTypes::TYPE_TEST
20
- }.merge(options[:span_options] || {})
33
+ }
34
+
35
+ tags[Ext::Test::TAG_NAME] = test_name
21
36
 
22
- if block_given?
23
- ::Datadog::Tracing.trace(span_name, **span_options) do |span, trace|
24
- set_tags!(trace, span, options)
25
- yield(span, trace)
37
+ if block
38
+ Datadog::Tracing.trace(operation_name, **span_options) do |tracer_span, trace|
39
+ set_trace_origin(trace)
40
+
41
+ test = build_test(tracer_span, tags)
42
+
43
+ @local_context.activate_test!(test) do
44
+ block.call(test)
45
+ end
26
46
  end
27
47
  else
28
- span = ::Datadog::Tracing.trace(span_name, **span_options)
29
- trace = ::Datadog::Tracing.active_trace
30
- set_tags!(trace, span, options)
31
- span
48
+ tracer_span = Datadog::Tracing.trace(operation_name, **span_options)
49
+ trace = Datadog::Tracing.active_trace
50
+
51
+ set_trace_origin(trace)
52
+
53
+ test = build_test(tracer_span, tags)
54
+ @local_context.activate_test!(test)
55
+ test
32
56
  end
33
57
  end
34
58
 
35
- # Adds tags to a CI test span.
36
- def self.set_tags!(trace, span, tags = {})
37
- tags ||= {}
38
-
39
- # Set default tags
40
- trace.origin = Ext::Test::CONTEXT_ORIGIN if trace
41
- ::Datadog::Tracing::Contrib::Analytics.set_measured(span)
42
- span.set_tag(Ext::Test::TAG_SPAN_KIND, Ext::AppTypes::TYPE_TEST)
59
+ def trace(span_type, span_name, tags: {}, &block)
60
+ span_options = {
61
+ resource: span_name,
62
+ span_type: span_type
63
+ }
43
64
 
44
- # Set environment tags
45
- @environment_tags ||= Ext::Environment.tags(ENV)
46
- @environment_tags.each { |k, v| span.set_tag(k, v) }
65
+ if block
66
+ Datadog::Tracing.trace(span_name, **span_options) do |tracer_span, trace|
67
+ block.call(build_span(tracer_span, tags))
68
+ end
69
+ else
70
+ tracer_span = Datadog::Tracing.trace(span_name, **span_options)
47
71
 
48
- # Set contextual tags
49
- span.set_tag(Ext::Test::TAG_FRAMEWORK, tags[:framework]) if tags[:framework]
50
- span.set_tag(Ext::Test::TAG_FRAMEWORK_VERSION, tags[:framework_version]) if tags[:framework_version]
51
- span.set_tag(Ext::Test::TAG_NAME, tags[:test_name]) if tags[:test_name]
52
- span.set_tag(Ext::Test::TAG_SUITE, tags[:test_suite]) if tags[:test_suite]
53
- span.set_tag(Ext::Test::TAG_TYPE, tags[:test_type]) if tags[:test_type]
72
+ build_span(tracer_span, tags)
73
+ end
74
+ end
54
75
 
55
- set_environment_runtime_tags!(span)
76
+ def active_test
77
+ @local_context.active_test
78
+ end
56
79
 
57
- span
80
+ def deactivate_test(test)
81
+ @local_context.deactivate_test!(test)
58
82
  end
59
83
 
60
- def self.passed!(span)
61
- span.set_tag(Ext::Test::TAG_STATUS, Ext::Test::Status::PASS)
84
+ def active_span
85
+ tracer_span = Datadog::Tracing.active_span
86
+ Span.new(tracer_span) if tracer_span
62
87
  end
63
88
 
64
- def self.failed!(span, exception = nil)
65
- span.status = 1
66
- span.set_tag(Ext::Test::TAG_STATUS, Ext::Test::Status::FAIL)
67
- span.set_error(exception) unless exception.nil?
89
+ private
90
+
91
+ # Sets trace's origin to ciapp-test
92
+ def set_trace_origin(trace)
93
+ trace.origin = Ext::Test::CONTEXT_ORIGIN if trace
68
94
  end
69
95
 
70
- def self.skipped!(span, exception = nil)
71
- span.set_tag(Ext::Test::TAG_STATUS, Ext::Test::Status::SKIP)
72
- span.set_error(exception) unless exception.nil?
96
+ def build_test(tracer_span, tags)
97
+ test = Test.new(tracer_span)
98
+
99
+ test.set_default_tags
100
+ test.set_environment_runtime_tags
101
+
102
+ test.set_tags(tags)
103
+ test.set_tags(environment_tags)
104
+
105
+ test
73
106
  end
74
107
 
75
- private_class_method def self.set_environment_runtime_tags!(span)
76
- span.set_tag(Ext::Test::TAG_OS_ARCHITECTURE, ::RbConfig::CONFIG["host_cpu"])
77
- span.set_tag(Ext::Test::TAG_OS_PLATFORM, ::RbConfig::CONFIG["host_os"])
78
- span.set_tag(Ext::Test::TAG_RUNTIME_NAME, Core::Environment::Ext::LANG_ENGINE)
79
- span.set_tag(Ext::Test::TAG_RUNTIME_VERSION, Core::Environment::Ext::ENGINE_VERSION)
108
+ def build_span(tracer_span, tags)
109
+ span = Span.new(tracer_span)
110
+
111
+ span.set_default_tags
112
+ span.set_environment_runtime_tags
113
+ span.set_tags(tags)
114
+
115
+ span
80
116
  end
81
117
  end
82
118
  end
@@ -0,0 +1,107 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "ext/test"
4
+
5
+ module Datadog
6
+ module CI
7
+ # Represents a single part of a test run.
8
+ # Could be a session, suite, test, or any custom span.
9
+ #
10
+ # @public_api
11
+ class Span
12
+ attr_reader :tracer_span
13
+
14
+ def initialize(tracer_span)
15
+ @tracer_span = tracer_span
16
+ end
17
+
18
+ # @return [String] the name of the span.
19
+ def name
20
+ tracer_span.name
21
+ end
22
+
23
+ # @return [String] the type of the span (for example "test" or type that was provided to [Datadog::CI.trace]).
24
+ def span_type
25
+ tracer_span.type
26
+ end
27
+
28
+ # Sets the status of the span to "pass".
29
+ # @return [void]
30
+ def passed!
31
+ tracer_span.set_tag(Ext::Test::TAG_STATUS, Ext::Test::Status::PASS)
32
+ end
33
+
34
+ # Sets the status of the span to "fail".
35
+ # @param [Exception] exception the exception that caused the test to fail.
36
+ # @return [void]
37
+ def failed!(exception: nil)
38
+ tracer_span.status = 1
39
+ tracer_span.set_tag(Ext::Test::TAG_STATUS, Ext::Test::Status::FAIL)
40
+ tracer_span.set_error(exception) unless exception.nil?
41
+ end
42
+
43
+ # Sets the status of the span to "skip".
44
+ # @param [Exception] exception the exception that caused the test to fail.
45
+ # @param [String] reason the reason why the test was skipped.
46
+ # @return [void]
47
+ def skipped!(exception: nil, reason: nil)
48
+ tracer_span.set_tag(Ext::Test::TAG_STATUS, Ext::Test::Status::SKIP)
49
+ tracer_span.set_error(exception) unless exception.nil?
50
+ tracer_span.set_tag(Ext::Test::TAG_SKIP_REASON, reason) unless reason.nil?
51
+ end
52
+
53
+ # Gets tag value by key.
54
+ # @param [String] key the key of the tag.
55
+ # @return [String] the value of the tag.
56
+ def get_tag(key)
57
+ tracer_span.get_tag(key)
58
+ end
59
+
60
+ # Sets tag value by key.
61
+ # @param [String] key the key of the tag.
62
+ # @param [String] value the value of the tag.
63
+ # @return [void]
64
+ def set_tag(key, value)
65
+ tracer_span.set_tag(key, value)
66
+ end
67
+
68
+ # Sets metric value by key.
69
+ # @param [String] key the key of the metric.
70
+ # @param [Numeric] value the value of the metric.
71
+ # @return [void]
72
+ def set_metric(key, value)
73
+ tracer_span.set_metric(key, value)
74
+ end
75
+
76
+ # Finishes the span.
77
+ # @return [void]
78
+ def finish
79
+ tracer_span.finish
80
+ end
81
+
82
+ # Sets multiple tags at once.
83
+ # @param [Hash[String, String]] tags the tags to set.
84
+ # @return [void]
85
+ def set_tags(tags)
86
+ tags.each do |key, value|
87
+ tracer_span.set_tag(key, value)
88
+ end
89
+ end
90
+
91
+ def set_environment_runtime_tags
92
+ tracer_span.set_tag(Ext::Test::TAG_OS_ARCHITECTURE, ::RbConfig::CONFIG["host_cpu"])
93
+ tracer_span.set_tag(Ext::Test::TAG_OS_PLATFORM, ::RbConfig::CONFIG["host_os"])
94
+ tracer_span.set_tag(Ext::Test::TAG_RUNTIME_NAME, Core::Environment::Ext::LANG_ENGINE)
95
+ tracer_span.set_tag(Ext::Test::TAG_RUNTIME_VERSION, Core::Environment::Ext::ENGINE_VERSION)
96
+ end
97
+
98
+ def set_default_tags
99
+ tracer_span.set_tag(Ext::Test::TAG_SPAN_KIND, Ext::AppTypes::TYPE_TEST)
100
+ end
101
+
102
+ def to_s
103
+ "#{self.class}(name:#{name},tracer_span:#{@tracer_span})"
104
+ end
105
+ end
106
+ end
107
+ end
@@ -0,0 +1,26 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "span"
4
+
5
+ module Datadog
6
+ module CI
7
+ # Represents a single part of a test run.
8
+ # Could be a session, suite, test, or any custom span.
9
+ #
10
+ # @public_api
11
+ class Test < Span
12
+ # @return [String] the name of the test.
13
+ def name
14
+ get_tag(Ext::Test::TAG_NAME)
15
+ end
16
+
17
+ # Finishes the current test.
18
+ # @return [void]
19
+ def finish
20
+ super
21
+
22
+ CI.deactivate_test(self)
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,15 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Datadog
4
+ module CI
5
+ module Utils
6
+ module Url
7
+ def self.filter_sensitive_info(url)
8
+ return nil if url.nil?
9
+
10
+ url.gsub(%r{((https?|ssh)://)[^/]*@}, '\1')
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
@@ -4,7 +4,7 @@ module Datadog
4
4
  module CI
5
5
  module VERSION
6
6
  MAJOR = "0"
7
- MINOR = "3"
7
+ MINOR = "4"
8
8
  PATCH = "0"
9
9
  PRE = nil
10
10
  BUILD = nil
data/lib/datadog/ci.rb CHANGED
@@ -5,11 +5,200 @@ require_relative "ci/version"
5
5
  require "datadog/core"
6
6
 
7
7
  module Datadog
8
- # Namespace for Datadog CI instrumentation:
9
- # e.g. rspec, cucumber, etc...
8
+ # Datadog CI visibility public API.
9
+ #
10
+ # @public_api
10
11
  module CI
11
- class Error < StandardError; end
12
- # Your code goes here...
12
+ class << self
13
+ # Return a {Datadog::CI::Test ci_test} that will trace a test called `test_name`.
14
+ # Raises an error if a test is already active.
15
+ #
16
+ # You could trace your test using a <tt>do-block</tt> like:
17
+ #
18
+ # ```
19
+ # Datadog::CI.trace_test(
20
+ # "test_add_two_numbers",
21
+ # service_name: "my-web-site-tests",
22
+ # operation_name: "test",
23
+ # tags: { Datadog::CI::Ext::Test::TAG_FRAMEWORK => "my-test-framework" }
24
+ # ) do |ci_test|
25
+ # result = run_test
26
+ #
27
+ # if result.ok?
28
+ # ci_test.passed!
29
+ # else
30
+ # ci_test.failed!(exception: result.exception)
31
+ # end
32
+ # end
33
+ # ```
34
+ #
35
+ # The {#trace_test} method can also be used without a block in this way:
36
+ # ```
37
+ # ci_test = Datadog::CI.trace_test(
38
+ # "test_add_two_numbers',
39
+ # service: "my-web-site-tests",
40
+ # operation_name: "test",
41
+ # tags: { Datadog::CI::Ext::Test::TAG_FRAMEWORK => "my-test-framework" }
42
+ # )
43
+ # run_test
44
+ # ci_test.finish
45
+ # ```
46
+ #
47
+ # Remember that in this case, calling {Datadog::CI::Test#finish} is mandatory.
48
+ #
49
+ # @param [String] test_name {Datadog::CI::Test} name (example: "test_add_two_numbers").
50
+ # @param [String] operation_name defines label for a test span in trace view ("test" if it's missing)
51
+ # @param [String] service_name the service name for this test
52
+ # @param [Hash<String,String>] tags extra tags which should be added to the test.
53
+ # @return [Object] If a block is provided, returns the result of the block execution.
54
+ # @return [Datadog::CI::Test] If no block is provided, returns the active,
55
+ # unfinished {Datadog::CI::Test}.
56
+ # @yield Optional block where new newly created {Datadog::CI::Test} captures the execution.
57
+ # @yieldparam [Datadog::CI::Test] ci_test the newly created and active [Datadog::CI::Test]
58
+ #
59
+ # @public_api
60
+ def trace_test(test_name, service_name: nil, operation_name: "test", tags: {}, &block)
61
+ recorder.trace_test(test_name, service_name: service_name, operation_name: operation_name, tags: tags, &block)
62
+ end
63
+
64
+ # Same as {#trace_test} but it does not accept a block.
65
+ # Raises an error if a test is already active.
66
+ #
67
+ # Usage:
68
+ #
69
+ # ```
70
+ # ci_test = Datadog::CI.start_test(
71
+ # "test_add_two_numbers',
72
+ # service: "my-web-site-tests",
73
+ # operation_name: "test",
74
+ # tags: { Datadog::CI::Ext::Test::TAG_FRAMEWORK => "my-test-framework" }
75
+ # )
76
+ # run_test
77
+ # ci_test.finish
78
+ # ```
79
+ #
80
+ # @param [String] test_name {Datadog::CI::Test} name (example: "test_add_two_numbers").
81
+ # @param [String] operation_name the resource this span refers, or `test` if it's missing
82
+ # @param [String] service_name the service name for this span.
83
+ # @param [Hash<String,String>] tags extra tags which should be added to the test.
84
+ # @return [Datadog::CI::Test] Returns the active, unfinished {Datadog::CI::Test}.
85
+ #
86
+ # @public_api
87
+ def start_test(test_name, service_name: nil, operation_name: "test", tags: {})
88
+ recorder.trace_test(test_name, service_name: service_name, operation_name: operation_name, tags: tags)
89
+ end
90
+
91
+ # Trace any custom span inside a test. For example, you could trace:
92
+ # - cucumber step
93
+ # - database query
94
+ # - any custom operation you want to see in your trace view
95
+ #
96
+ # You can use thi method with a <tt>do-block</tt> like:
97
+ #
98
+ # ```
99
+ # Datadog::CI.trace(
100
+ # "step",
101
+ # "Given I have 42 cucumbers",
102
+ # tags: {}
103
+ # ) do
104
+ # run_operation
105
+ # end
106
+ # ```
107
+ #
108
+ # The {#trace} method can also be used without a block in this way:
109
+ # ```
110
+ # ci_span = Datadog::CI.trace(
111
+ # "step",
112
+ # "Given I have 42 cucumbers",
113
+ # tags: {}
114
+ # )
115
+ # run_test
116
+ # ci_span.finish
117
+ # ```
118
+ # Remember that in this case, calling {Datadog::CI::Span#finish} is mandatory.
119
+ #
120
+ # @param [String] span_type custom, user-defined span type (for example "step" or "query").
121
+ # @param [String] span_name the resource this span refers, or `test` if it's missing
122
+ # @param [Hash<String,String>] tags extra tags which should be added to the span.
123
+ # @return [Object] If a block is provided, returns the result of the block execution.
124
+ # @return [Datadog::CI::Span] If no block is provided, returns the active,
125
+ # unfinished {Datadog::CI::Span}.
126
+ # @yield Optional block where new newly created {Datadog::CI::Span} captures the execution.
127
+ # @yieldparam [Datadog::CI::Span] ci_span the newly created and active [Datadog::CI::Span]
128
+ #
129
+ # @public_api
130
+ def trace(span_type, span_name, tags: {}, &block)
131
+ recorder.trace(span_type, span_name, tags: tags, &block)
132
+ end
133
+
134
+ # The active, unfinished custom span if it matches given type.
135
+ # If no span is active, or if the active span is not a custom span with given type, returns nil.
136
+ #
137
+ # The active span belongs to an {.active_test}.
138
+ #
139
+ # Usage:
140
+ #
141
+ # ```
142
+ # # start span
143
+ # Datadog::CI.trace(
144
+ # "step",
145
+ # "Given I have 42 cucumbers",
146
+ # tags: {}
147
+ # )
148
+ #
149
+ # # somewhere else, access the active "step" span
150
+ # step_span = Datadog::CI.active_span("step")
151
+ # step_span.finish()
152
+ # ```
153
+ #
154
+ # @param [String] span_type type of the span to retrieve (for example "step" or "query") that was provided to {.trace}
155
+ # @return [Datadog::CI::Span] the active span
156
+ # @return [nil] if no span is active, or if the active span is not a custom span with given type
157
+ def active_span(span_type)
158
+ span = recorder.active_span
159
+ span if span && span.span_type == span_type
160
+ end
161
+
162
+ # The active, unfinished test span.
163
+ #
164
+ # Usage:
165
+ #
166
+ # ```
167
+ # # start a test
168
+ # Datadog::CI.start_test(
169
+ # "test_add_two_numbers',
170
+ # service: "my-web-site-tests",
171
+ # operation_name: "test",
172
+ # tags: { Datadog::CI::Ext::Test::TAG_FRAMEWORK => "my-test-framework" }
173
+ # )
174
+ #
175
+ # # somewhere else, access the active test
176
+ # test_span = Datadog::CI.active_test
177
+ # test_span.passed!
178
+ # test_span.finish
179
+ # ```
180
+ #
181
+ # @return [Datadog::CI::Test] the active test
182
+ # @return [nil] if no test is active
183
+ def active_test
184
+ recorder.active_test
185
+ end
186
+
187
+ # Internal only, to finish a test use Datadog::CI::Test#finish
188
+ def deactivate_test(test)
189
+ recorder.deactivate_test(test)
190
+ end
191
+
192
+ private
193
+
194
+ def components
195
+ Datadog.send(:components)
196
+ end
197
+
198
+ def recorder
199
+ components.ci_recorder
200
+ end
201
+ end
13
202
  end
14
203
  end
15
204
 
@@ -2,6 +2,10 @@ module Datadog
2
2
  module CI
3
3
  module Configuration
4
4
  module Components : Datadog::Core::Configuration::Components
5
+ @ci_recorder: Datadog::CI::Recorder
6
+
7
+ attr_reader ci_recorder: Datadog::CI::Recorder
8
+
5
9
  def initialize: (untyped settings) -> void
6
10
 
7
11
  def activate_ci!: (untyped settings) -> untyped
@@ -0,0 +1,21 @@
1
+ module Datadog
2
+ module CI
3
+ module Context
4
+ class Local
5
+ @key: Symbol
6
+
7
+ def initialize: () -> void
8
+
9
+ def activate_test!: (Datadog::CI::Test test) ?{ () -> untyped } -> void
10
+
11
+ def deactivate_test!: (Datadog::CI::Test test) -> void
12
+
13
+ def active_test: () -> Datadog::CI::Test?
14
+
15
+ private
16
+
17
+ def active_test=: (Datadog::CI::Test? test) -> untyped
18
+ end
19
+ end
20
+ end
21
+ end
@@ -18,8 +18,6 @@ module Datadog
18
18
  def normalize_git!: () -> void
19
19
 
20
20
  def expand_workspace!: () -> void
21
-
22
- def filter_sensitive_info: (String? url) -> String?
23
21
  end
24
22
  end
25
23
  end
@@ -5,6 +5,7 @@ module Datadog
5
5
  module Providers
6
6
  class GithubActions < Extractor
7
7
  @ref: String
8
+ @github_server_url: String?
8
9
 
9
10
  def provider_name: () -> "github"
10
11
 
@@ -29,6 +30,10 @@ module Datadog
29
30
  def git_branch_or_tag: () -> String?
30
31
 
31
32
  def ci_env_vars: () -> String?
33
+
34
+ private
35
+
36
+ def github_server_url: () -> String?
32
37
  end
33
38
  end
34
39
  end
@@ -1,18 +1,30 @@
1
1
  module Datadog
2
2
  module CI
3
- module Recorder
4
- self.@environment_tags: Hash[String, String]
3
+ class Recorder
4
+ @environment_tags: Hash[String, String]
5
+ @local_context: Datadog::CI::Context::Local
5
6
 
6
- def self.trace: (untyped span_name, ?::Hash[untyped, untyped] options) ?{ (untyped, untyped) -> untyped } -> untyped
7
- def self.set_tags!: (untyped trace, untyped span, ?::Hash[untyped, untyped] tags) -> untyped
7
+ attr_reader environment_tags: Hash[String, String]
8
8
 
9
- def self.passed!: (untyped span) -> untyped
9
+ def trace_test: (String span_name, ?service_name: String?, ?operation_name: String, ?tags: Hash[untyped, untyped]) ?{ (Datadog::CI::Test span) -> untyped } -> untyped
10
10
 
11
- def self.failed!: (untyped span, ?untyped? exception) -> untyped
11
+ def trace: (String span_type, String span_name, ?tags: Hash[untyped, untyped]) ?{ (Datadog::CI::Span span) -> untyped } -> untyped
12
12
 
13
- def self.skipped!: (untyped span, ?untyped? exception) -> untyped
13
+ def active_test: () -> Datadog::CI::Test?
14
14
 
15
- def self.set_environment_runtime_tags!: (untyped span) -> untyped
15
+ def active_span: () -> Datadog::CI::Span?
16
+
17
+ def deactivate_test: (Datadog::CI::Test test) -> void
18
+
19
+ def create_datadog_span: (String span_name, ?span_options: Hash[untyped, untyped], ?tags: Hash[untyped, untyped]) ?{ (Datadog::CI::Span span) -> untyped } -> untyped
20
+
21
+ def set_trace_origin: (Datadog::Tracing::TraceOperation trace) -> untyped
22
+
23
+ private
24
+
25
+ def build_test: (Datadog::Tracing::SpanOperation tracer_span, Hash[untyped, untyped] tags) -> Datadog::CI::Test
26
+
27
+ def build_span: (Datadog::Tracing::SpanOperation tracer_span, Hash[untyped, untyped] tags) -> Datadog::CI::Span
16
28
  end
17
29
  end
18
30
  end
@@ -0,0 +1,35 @@
1
+ module Datadog
2
+ module CI
3
+ class Span
4
+ @tracer_span: Datadog::Tracing::SpanOperation
5
+
6
+ attr_reader tracer_span: Datadog::Tracing::SpanOperation
7
+
8
+ def initialize: (Datadog::Tracing::SpanOperation tracer_span) -> void
9
+
10
+ def name: () -> String
11
+
12
+ def passed!: () -> void
13
+
14
+ def failed!: (?exception: untyped?) -> void
15
+
16
+ def skipped!: (?exception: untyped?, ?reason: String?) -> void
17
+
18
+ def get_tag: (String key) -> untyped?
19
+
20
+ def set_tag: (String key, untyped? value) -> void
21
+
22
+ def set_metric: (String key, untyped value) -> void
23
+
24
+ def set_tags: (Hash[untyped, untyped] tags) -> void
25
+
26
+ def finish: () -> void
27
+
28
+ def span_type: () -> String
29
+
30
+ def set_environment_runtime_tags: () -> void
31
+
32
+ def set_default_tags: () -> void
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,7 @@
1
+ module Datadog
2
+ module CI
3
+ class Test < Span
4
+ def finish: () -> void
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,9 @@
1
+ module Datadog
2
+ module CI
3
+ module Utils
4
+ module Url
5
+ def self.filter_sensitive_info: (String? url) -> String?
6
+ end
7
+ end
8
+ end
9
+ end