Sha256: 770c48d1ac2b275446cf9a8ed6bb99b78cac20b179149d6309410a0a71d453c4
Contents?: true
Size: 1.93 KB
Versions: 1
Compression:
Stored size: 1.93 KB
Contents
require 'ddtrace/ext/runtime' require 'ddtrace/runtime/cgroup' module Datadog module Runtime # For container environments module Container UUID_PATTERN = '[0-9a-f]{8}[-_]?[0-9a-f]{4}[-_]?[0-9a-f]{4}[-_]?[0-9a-f]{4}[-_]?[0-9a-f]{12}'.freeze CONTAINER_PATTERN = '[0-9a-f]{64}'.freeze POD_REGEX = /(pod)?(#{UUID_PATTERN})(?:.slice)?$/.freeze CONTAINER_REGEX = /(#{UUID_PATTERN}|#{CONTAINER_PATTERN})(?:.scope)?$/.freeze Descriptor = Struct.new( :platform, :container_id, :task_uid ) module_function def platform descriptor.platform end def container_id descriptor.container_id end def task_uid descriptor.task_uid end def descriptor @descriptor ||= 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 end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
ddtrace-0.47.0 | lib/ddtrace/runtime/container.rb |