Class: Datadog::CI::Span

Inherits:
Object
  • Object
show all
Includes:
DRb::DRbUndumped
Defined in:
lib/datadog/ci/span.rb

Overview

Represents a single part of a test run. Could be a session, suite, test, or any custom span.

Direct Known Subclasses

ConcurrentSpan, Test

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(tracer_span) ⇒ Span

Returns a new instance of Span.



22
23
24
# File 'lib/datadog/ci/span.rb', line 22

def initialize(tracer_span)
  @tracer_span = tracer_span
end

Instance Attribute Details

#tracer_spanObject (readonly)

Returns the value of attribute tracer_span.



20
21
22
# File 'lib/datadog/ci/span.rb', line 20

def tracer_span
  @tracer_span
end

Instance Method Details

#base_commit_shaString?

Returns the base commit SHA for the pull request, if available.

Returns:

  • (String, nil)

    the base commit SHA or nil if not set.



206
207
208
# File 'lib/datadog/ci/span.rb', line 206

def base_commit_sha
  tracer_span.get_tag(Ext::Git::TAG_PULL_REQUEST_BASE_BRANCH_SHA)
end

#clear_tag(key) ⇒ void

This method returns an undefined value.

Removes tag by key.

Parameters:

  • key (String)

    the key of the tag.



124
125
126
# File 'lib/datadog/ci/span.rb', line 124

def clear_tag(key)
  tracer_span.clear_tag(key)
end

#failed!(exception: nil) ⇒ void

This method returns an undefined value.

Sets the status of the span to "fail".

Parameters:

  • exception (Exception) (defaults to: nil)

    the exception that caused the test to fail.



90
91
92
93
94
# File 'lib/datadog/ci/span.rb', line 90

def failed!(exception: nil)
  tracer_span.status = 1
  tracer_span.set_tag(Ext::Test::TAG_STATUS, Ext::Test::Status::FAIL)
  tracer_span.set_error(exception) unless exception.nil?
end

#failed?bool

Checks whether span status is FAIL.

Returns:

  • (bool)

    true if span status is FAIL



65
66
67
# File 'lib/datadog/ci/span.rb', line 65

def failed?
  tracer_span.get_tag(Ext::Test::TAG_STATUS) == Ext::Test::Status::FAIL
end

#finishvoid

This method returns an undefined value.

Finishes the span.



145
146
147
# File 'lib/datadog/ci/span.rb', line 145

def finish
  tracer_span.finish
end

#get_metric(key) ⇒ Numeric

Gets metric value by key.

Parameters:

  • key (String)

    the key of the metric.

Returns:

  • (Numeric)

    value the value of the metric.



131
132
133
# File 'lib/datadog/ci/span.rb', line 131

def get_metric(key)
  tracer_span.get_metric(key)
end

#get_tag(key) ⇒ String

Gets tag value by key.

Parameters:

  • key (String)

    the key of the tag.

Returns:

  • (String)

    the value of the tag.



109
110
111
# File 'lib/datadog/ci/span.rb', line 109

def get_tag(key)
  tracer_span.get_tag(key)
end

#git_branchString

Returns the git branch name extracted from the environment.

Returns:

  • (String)

    the branch.



194
195
196
# File 'lib/datadog/ci/span.rb', line 194

def git_branch
  tracer_span.get_tag(Ext::Git::TAG_BRANCH)
end

#git_commit_messageString

Returns the git commit message extracted from the environment.

Returns:

  • (String)

    the commit message.



170
171
172
# File 'lib/datadog/ci/span.rb', line 170

def git_commit_message
  get_tag(Ext::Git::TAG_COMMIT_MESSAGE)
end

#git_commit_shaString

Returns the latest commit SHA extracted from the environment.

Returns:

  • (String)

    the commit SHA of the last commit.



164
165
166
# File 'lib/datadog/ci/span.rb', line 164

def git_commit_sha
  tracer_span.get_tag(Ext::Git::TAG_COMMIT_SHA)
end

#git_repository_urlString

Returns the git repository URL extracted from the environment.

Returns:

  • (String)

    the repository URL.



158
159
160
# File 'lib/datadog/ci/span.rb', line 158

def git_repository_url
  tracer_span.get_tag(Ext::Git::TAG_REPOSITORY_URL)
end

#git_tagString?

Returns the git tag extracted from the environment.

Returns:

  • (String, nil)

    the tag or nil if not set.



200
201
202
# File 'lib/datadog/ci/span.rb', line 200

def git_tag
  tracer_span.get_tag(Ext::Git::TAG_TAG)
end

#idInteger

Returns the ID of the span.

Returns:

  • (Integer)

    the ID of the span.



27
28
29
# File 'lib/datadog/ci/span.rb', line 27

def id
  tracer_span.id
end

#nameString

Returns the name of the span.

Returns:

  • (String)

    the name of the span.



37
38
39
# File 'lib/datadog/ci/span.rb', line 37

def name
  tracer_span.name
end

#original_git_commit_messageString

Returns the original last git commit message extracted from the environment. Original here means that it is the last commit that was pushed by the user, not the artifical merge commit created by CI provider

Returns:

  • (String)

    the commit message of the last commit.



188
189
190
# File 'lib/datadog/ci/span.rb', line 188

def original_git_commit_message
  get_tag(Ext::Git::TAG_COMMIT_HEAD_MESSAGE) || git_commit_message
end

#original_git_commit_shaString

Returns the original last git commit SHA extracted from the environment. Original here means that it is the last commit that was pushed by the user, not the artifical merge commit created by CI provider

Returns:

  • (String)

    the commit SHA of the last commit.



179
180
181
# File 'lib/datadog/ci/span.rb', line 179

def original_git_commit_sha
  get_tag(Ext::Git::TAG_COMMIT_HEAD_SHA) || git_commit_sha
end

#os_architectureString

Returns the OS architecture extracted from the environment.

Returns:

  • (String)

    OS arch.



212
213
214
# File 'lib/datadog/ci/span.rb', line 212

def os_architecture
  tracer_span.get_tag(Ext::Test::TAG_OS_ARCHITECTURE)
end

#os_platformString

Returns the OS platform extracted from the environment.

Returns:

  • (String)

    OS platform.



218
219
220
# File 'lib/datadog/ci/span.rb', line 218

def os_platform
  tracer_span.get_tag(Ext::Test::TAG_OS_PLATFORM)
end

#os_versionString

Returns the OS version extracted from the environment.

Returns:

  • (String)

    OS version.



224
225
226
# File 'lib/datadog/ci/span.rb', line 224

def os_version
  tracer_span.get_tag(Ext::Test::TAG_OS_VERSION)
end

#passed!void

This method returns an undefined value.

Sets the status of the span to "pass".



83
84
85
# File 'lib/datadog/ci/span.rb', line 83

def passed!
  tracer_span.set_tag(Ext::Test::TAG_STATUS, Ext::Test::Status::PASS)
end

#passed?bool

Checks whether span status is PASS.

Returns:

  • (bool)

    true if span status is PASS



59
60
61
# File 'lib/datadog/ci/span.rb', line 59

def passed?
  tracer_span.get_tag(Ext::Test::TAG_STATUS) == Ext::Test::Status::PASS
end

#runtime_nameString

Returns the runtime name extracted from the environment.

Returns:

  • (String)

    runtime name.



230
231
232
# File 'lib/datadog/ci/span.rb', line 230

def runtime_name
  tracer_span.get_tag(Ext::Test::TAG_RUNTIME_NAME)
end

#runtime_versionString

Returns the runtime version extracted from the environment.

Returns:

  • (String)

    runtime version.



236
237
238
# File 'lib/datadog/ci/span.rb', line 236

def runtime_version
  tracer_span.get_tag(Ext::Test::TAG_RUNTIME_VERSION)
end

#serviceString

Returns the service name of the span.

Returns:

  • (String)

    the service name of the span.



42
43
44
# File 'lib/datadog/ci/span.rb', line 42

def service
  tracer_span.service
end

#set_default_tagsObject



256
257
258
# File 'lib/datadog/ci/span.rb', line 256

def set_default_tags
  tracer_span.set_tag(Ext::Test::TAG_SPAN_KIND, Ext::Test::SPAN_KIND_TEST)
end

#set_environment_runtime_tagsObject



247
248
249
250
251
252
253
254
# File 'lib/datadog/ci/span.rb', line 247

def set_environment_runtime_tags
  tracer_span.set_tag(Ext::Test::TAG_OS_ARCHITECTURE, ::RbConfig::CONFIG["host_cpu"])
  tracer_span.set_tag(Ext::Test::TAG_OS_PLATFORM, ::RbConfig::CONFIG["host_os"])
  tracer_span.set_tag(Ext::Test::TAG_OS_VERSION, Core::Environment::Platform.kernel_release)
  tracer_span.set_tag(Ext::Test::TAG_RUNTIME_NAME, Core::Environment::Ext::LANG_ENGINE)
  tracer_span.set_tag(Ext::Test::TAG_RUNTIME_VERSION, Core::Environment::Ext::ENGINE_VERSION)
  tracer_span.set_tag(Ext::Test::TAG_COMMAND, Utils::TestRun.command)
end

#set_metric(key, value) ⇒ void

This method returns an undefined value.

Sets metric value by key.

Parameters:

  • key (String)

    the key of the metric.

  • value (Numeric)

    the value of the metric.



139
140
141
# File 'lib/datadog/ci/span.rb', line 139

def set_metric(key, value)
  tracer_span.set_metric(key, value)
end

#set_tag(key, value) ⇒ void

This method returns an undefined value.

Sets tag value by key.

Parameters:

  • key (String)

    the key of the tag.

  • value (String)

    the value of the tag.



117
118
119
# File 'lib/datadog/ci/span.rb', line 117

def set_tag(key, value)
  tracer_span.set_tag(key, value)
end

#set_tags(tags) ⇒ void

This method returns an undefined value.

Sets multiple tags at once.

Parameters:

  • tags (Hash[String, String])

    the tags to set.



152
153
154
# File 'lib/datadog/ci/span.rb', line 152

def set_tags(tags)
  tracer_span.set_tags(tags)
end

#skipped!(exception: nil, reason: nil) ⇒ void

This method returns an undefined value.

Sets the status of the span to "skip".

Parameters:

  • exception (Exception) (defaults to: nil)

    the exception that caused the test to fail.

  • reason (String) (defaults to: nil)

    the reason why the test was skipped.



100
101
102
103
104
# File 'lib/datadog/ci/span.rb', line 100

def skipped!(exception: nil, reason: nil)
  tracer_span.set_tag(Ext::Test::TAG_STATUS, Ext::Test::Status::SKIP)
  tracer_span.set_error(exception) unless exception.nil?
  tracer_span.set_tag(Ext::Test::TAG_SKIP_REASON, reason) unless reason.nil?
end

#skipped?bool

Checks whether span status is SKIP.

Returns:

  • (bool)

    true if span status is SKIP



71
72
73
# File 'lib/datadog/ci/span.rb', line 71

def skipped?
  tracer_span.get_tag(Ext::Test::TAG_STATUS) == Ext::Test::Status::SKIP
end

#source_fileString?

Source file path where the test or test suite defined (relative to git repository root).

Returns:

  • (String)

    the source file path of the test

  • (nil)

    if the source file path is not found



243
244
245
# File 'lib/datadog/ci/span.rb', line 243

def source_file
  get_tag(Ext::Test::TAG_SOURCE_FILE)
end

#statusString?

Returns the current status of the span.

Returns:

  • (String, nil)

    the status of the span ("pass", "fail", "skip"), or nil if not set



77
78
79
# File 'lib/datadog/ci/span.rb', line 77

def status
  tracer_span.get_tag(Ext::Test::TAG_STATUS)
end

#to_sObject



260
261
262
# File 'lib/datadog/ci/span.rb', line 260

def to_s
  "#{self.class}(name:#{name},tracer_span:#{@tracer_span})"
end

#trace_idInteger

Returns the trace ID of the trace this span belongs to.

Returns:

  • (Integer)

    the trace ID of the trace this span belongs to



32
33
34
# File 'lib/datadog/ci/span.rb', line 32

def trace_id
  tracer_span.trace_id
end

#typeString

Returns the type of the span (for example "test" or type that was provided to [Datadog::CI.trace]).

Returns:

  • (String)

    the type of the span (for example "test" or type that was provided to [Datadog::CI.trace]).



47
48
49
# File 'lib/datadog/ci/span.rb', line 47

def type
  tracer_span.type
end

#undefined?bool

Checks whether span status is not set yet.

Returns:

  • (bool)

    true if span does not have status



53
54
55
# File 'lib/datadog/ci/span.rb', line 53

def undefined?
  tracer_span.get_tag(Ext::Test::TAG_STATUS).nil?
end