Module: Datadog::Core::Environment::Identity

Defined in:
lib/datadog/core/environment/identity.rb,
sig/datadog/core/environment/identity.rbs

Overview

For runtime identity

Constant Summary collapse

ENV_ROOT_SESSION_ID =
'_DD_ROOT_RB_SESSION_ID'
ENV_PARENT_SESSION_ID =
'_DD_PARENT_RB_SESSION_ID'

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.gem_datadog_versionObject

Returns datadog gem version, rubygems-style



75
76
77
# File 'lib/datadog/core/environment/identity.rb', line 75

def gem_datadog_version
  Core::Environment::Ext::GEM_DATADOG_VERSION
end

.gem_datadog_version_semver2Object

Returns the tracer version in SemVer-2 form (https://semver.org/spec/v2.0.0.html).

Converts the RubyGems-style version returned by gem_datadog_version (dot-separated prerelease/build segments, e.g. "2.34.0.dev") into the SemVer-2 form expected by cross-language Datadog consumers (hyphen-separated prerelease, "+" build metadata, e.g. "2.34.0-dev").

Called by reporters that emit a tracer version on the wire and must match the format used by other-language tracers:

  • process discovery memfd (Core::ProcessDiscovery.get_metadatatracer_version)
  • telemetry payloads (Core::Telemetry::Request#application)
  • remote configuration client identification (Core::Remote::Client#tracer_version)

Use gem_datadog_version (not this method) when a RubyGems-style string is required (e.g. gem-internal contexts, gemspec interop).



94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
# File 'lib/datadog/core/environment/identity.rb', line 94

def gem_datadog_version_semver2
  major, minor, patch, rest = gem_datadog_version.split('.', 4)

  semver = "#{major}.#{minor}.#{patch}"

  return semver unless rest

  pre = ''
  build = ''

  rest.split('.').tap do |segments|
    if segments.length >= 4
      pre = "-#{segments.shift}"
      build = "+#{segments.join(".")}"
    elsif segments.length == 1
      pre = "-#{segments.shift}"
    else
      build = "+#{segments.join(".")}"
    end
  end

  semver + pre + build
end

.idObject



25
26
27
28
29
30
31
32
33
34
35
36
# File 'lib/datadog/core/environment/identity.rb', line 25

def id
  @id ||= ::SecureRandom.uuid.freeze

  after_fork! do
    # Order matters: capture @id before overwriting
    @parent_runtime_id = @id
    @root_runtime_id ||= @id
    @id = ::SecureRandom.uuid.freeze
  end

  @id
end

.langObject



54
55
56
# File 'lib/datadog/core/environment/identity.rb', line 54

def lang
  Core::Environment::Ext::LANG
end

.lang_engineObject



58
59
60
# File 'lib/datadog/core/environment/identity.rb', line 58

def lang_engine
  Core::Environment::Ext::LANG_ENGINE
end

.lang_interpreterObject



62
63
64
# File 'lib/datadog/core/environment/identity.rb', line 62

def lang_interpreter
  Core::Environment::Ext::LANG_INTERPRETER
end

.lang_platformObject



66
67
68
# File 'lib/datadog/core/environment/identity.rb', line 66

def lang_platform
  Core::Environment::Ext::LANG_PLATFORM
end

.lang_versionObject



70
71
72
# File 'lib/datadog/core/environment/identity.rb', line 70

def lang_version
  Core::Environment::Ext::LANG_VERSION
end

.parent_runtime_idObject



42
43
44
# File 'lib/datadog/core/environment/identity.rb', line 42

def parent_runtime_id
  @parent_runtime_id
end

.pidObject



50
51
52
# File 'lib/datadog/core/environment/identity.rb', line 50

def pid
  ::Process.pid
end

.root_runtime_idObject



38
39
40
# File 'lib/datadog/core/environment/identity.rb', line 38

def root_runtime_id
  @root_runtime_id
end

.runtime_propagation_envsObject



46
47
48
# File 'lib/datadog/core/environment/identity.rb', line 46

def runtime_propagation_envs
  {ENV_ROOT_SESSION_ID => root_runtime_id || id, ENV_PARENT_SESSION_ID => id}.freeze
end

Instance Method Details

#self?.gem_datadog_version::String

Returns:

  • (::String)


25
# File 'sig/datadog/core/environment/identity.rbs', line 25

def self?.gem_datadog_version: () -> ::String

#self?.gem_datadog_version_semver2::String

Returns:

  • (::String)


27
# File 'sig/datadog/core/environment/identity.rbs', line 27

def self?.gem_datadog_version_semver2: () -> ::String

#self?.id::String

Returns:

  • (::String)


7
# File 'sig/datadog/core/environment/identity.rbs', line 7

def self?.id: () -> ::String

#self?.lang::String

Returns:

  • (::String)


15
# File 'sig/datadog/core/environment/identity.rbs', line 15

def self?.lang: () -> ::String

#self?.lang_engine::String

Returns:

  • (::String)


17
# File 'sig/datadog/core/environment/identity.rbs', line 17

def self?.lang_engine: () -> ::String

#self?.lang_interpreter::String

Returns:

  • (::String)


19
# File 'sig/datadog/core/environment/identity.rbs', line 19

def self?.lang_interpreter: () -> ::String

#self?.lang_platform::String

Returns:

  • (::String)


21
# File 'sig/datadog/core/environment/identity.rbs', line 21

def self?.lang_platform: () -> ::String

#self?.lang_version::String

Returns:

  • (::String)


23
# File 'sig/datadog/core/environment/identity.rbs', line 23

def self?.lang_version: () -> ::String

#self?.parent_runtime_id::String?

Returns:

  • (::String, nil)


11
# File 'sig/datadog/core/environment/identity.rbs', line 11

def self?.parent_runtime_id: () -> ::String?

#self?.root_runtime_id::String?

Returns:

  • (::String, nil)


9
# File 'sig/datadog/core/environment/identity.rbs', line 9

def self?.root_runtime_id: () -> ::String?

#self?.runtime_propagation_envs::Hash[::String, ::String]

Returns:

  • (::Hash[::String, ::String])


13
# File 'sig/datadog/core/environment/identity.rbs', line 13

def self?.runtime_propagation_envs: () -> ::Hash[::String, ::String]