module Datadog::Runtime::Container

For container environments

Constants

CONTAINER_PATTERN
CONTAINER_REGEX
Descriptor
POD_REGEX
UUID_PATTERN

Public Instance Methods

container_id() click to toggle source
# File lib/ddtrace/runtime/container.rb, line 26
def container_id
  descriptor.container_id
end
descriptor() click to toggle source
# File lib/ddtrace/runtime/container.rb, line 34
def descriptor
  @descriptor ||= begin
    Descriptor.new.tap do |descriptor|
      begin
        Cgroup.descriptors.each do |cgroup_descriptor|
          # Parse container data from cgroup descriptor
          path = cgroup_descriptor.path
          next if path.nil?

          # Split path into parts
          parts = path.split('/')
          parts.shift # Remove leading empty part
          next if parts.length < 2

          # Read info from path
          platform = parts[0]
          container_id = parts[-1][CONTAINER_REGEX]
          task_uid = parts[-2][POD_REGEX]

          # If container ID wasn't found, ignore.
          # Path might describe a non-container environment.
          next if container_id.nil?

          descriptor.platform = platform
          descriptor.container_id = container_id
          descriptor.task_uid = task_uid

          break
        end
      rescue StandardError => e
        Datadog.logger.error(
          "Error while parsing container info. Cause: #{e.message} Location: #{e.backtrace.first}"
        )
      end
    end
  end
end
platform() click to toggle source
# File lib/ddtrace/runtime/container.rb, line 22
def platform
  descriptor.platform
end
task_uid() click to toggle source
# File lib/ddtrace/runtime/container.rb, line 30
def task_uid
  descriptor.task_uid
end