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

Defined in:
lib/datadog/core/environment/identity.rb

Overview

For runtime identity

Constant Summary collapse

SEMVER2_RE =
/
  ^
  # mandatory segments
  (?<major>\d+)
  \.
  (?<minor>\d+)
  \.
  (?<patch>\d+)

  # pre segments start with a value
  # - containing at least one alpha
  # - that is not part of our build segments expected values
  # and stop with a value that is not part of our build segments expected values
  (?:
    \.
    (?<pre>
      (?!gha)
      [a-zA-Z0-9]*[a-zA-Z][a-zA-Z0-9]*
      (?:
        \.
        (?!gha)
        [a-zA-Z0-9]+
      )*
    )
  )?

  # build segments: ours include CI info (`gha`), then git (`g`), then branch name
  (?:
    \.
    (?<build>
      gha(?<gha_run_id>\d+)
      \.
      g(?<git_sha>[a-f0-9]+)
      \.
      (?<branch>(?:[a-zA-Z0-9.])+)
    )
  )?
  $
/xm.freeze

Class Method Summary collapse

Class Method Details

.idObject

Retrieves number of classes from runtime



19
20
21
22
23
24
25
26
# File 'lib/datadog/core/environment/identity.rb', line 19

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

  # Check if runtime has changed, e.g. forked.
  after_fork! { @id = ::SecureRandom.uuid.freeze }

  @id
end

.langObject



32
33
34
# File 'lib/datadog/core/environment/identity.rb', line 32

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

.lang_engineObject



36
37
38
# File 'lib/datadog/core/environment/identity.rb', line 36

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

.lang_interpreterObject



40
41
42
# File 'lib/datadog/core/environment/identity.rb', line 40

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

.lang_platformObject



44
45
46
# File 'lib/datadog/core/environment/identity.rb', line 44

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

.lang_versionObject



48
49
50
# File 'lib/datadog/core/environment/identity.rb', line 48

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

.pidObject



28
29
30
# File 'lib/datadog/core/environment/identity.rb', line 28

def pid
  ::Process.pid
end

.tracer_versionObject

Returns tracer version, rubygems-style



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

def tracer_version
  Core::Environment::Ext::TRACER_VERSION
end

.tracer_version_semver2Object

Returns tracer version, comforming to https://semver.org/spec/v2.0.0.html



58
59
60
61
62
63
64
65
66
67
68
69
70
# File 'lib/datadog/core/environment/identity.rb', line 58

def tracer_version_semver2
  # from ddtrace/version.rb, we have MAJOR.MINOR.PATCH plus optional .PRE and .BUILD
  # - transform .PRE to -PRE if present
  # - transform .BUILD to +BUILD if present
  # - keep triplet segments before that

  m = SEMVER2_RE.match(tracer_version)

  pre = "-#{m[:pre]}" if m[:pre]
  build = "+gha#{m[:gha_run_id]}.g#{m[:git_sha]}.#{m[:branch].tr('.', '-')}" if m[:build]

  "#{m[:major]}.#{m[:minor]}.#{m[:patch]}#{pre}#{build}"
end