Sha256: ab5575925fad8fa7b3d7b1f07db5ddd69ef3a9f049f444d38ebad7c3d9270a09

Contents?: true

Size: 1.07 KB

Versions: 4

Compression:

Stored size: 1.07 KB

Contents

require 'ddtrace/ext/runtime'

module Datadog
  module Runtime
    # For control groups
    module Cgroup
      LINE_REGEX = /^(\d+):([^:]*):(.+)$/.freeze

      Descriptor = Struct.new(
        :id,
        :groups,
        :path,
        :controllers
      )

      module_function

      def descriptors(process = 'self')
        [].tap do |descriptors|
          begin
            filepath = "/proc/#{process}/cgroup"

            if File.exist?(filepath)
              File.foreach("/proc/#{process}/cgroup") do |line|
                line = line.strip
                descriptors << parse(line) unless line.empty?
              end
            end
          rescue StandardError => e
            Datadog.logger.error("Error while parsing cgroup. Cause: #{e.message} Location: #{e.backtrace.first}")
          end
        end
      end

      def parse(line)
        id, groups, path = line.scan(LINE_REGEX).first

        Descriptor.new(id, groups, path).tap do |descriptor|
          descriptor.controllers = groups.split(',') unless groups.nil?
        end
      end
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
ddtrace-0.50.0 lib/ddtrace/runtime/cgroup.rb
ddtrace-0.49.0 lib/ddtrace/runtime/cgroup.rb
ddtrace-0.48.0 lib/ddtrace/runtime/cgroup.rb
ddtrace-0.47.0 lib/ddtrace/runtime/cgroup.rb