Sha256: cb78d3f960660c16f756c3369399b0185fce5545c8a7ae5b7d8e7429dded9bc1

Contents?: true

Size: 1.06 KB

Versions: 14

Compression:

Stored size: 1.06 KB

Contents

require 'ddtrace/ext/runtime'

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

      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.open("/proc/#{process}/cgroup").each 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

14 entries across 14 versions & 2 rubygems

Version Path
ddtrace-0.45.0 lib/ddtrace/runtime/cgroup.rb
ddtrace-0.44.0 lib/ddtrace/runtime/cgroup.rb
ddtrace-0.43.0 lib/ddtrace/runtime/cgroup.rb
ddtrace-0.42.0 lib/ddtrace/runtime/cgroup.rb
ddtrace-0.41.0 lib/ddtrace/runtime/cgroup.rb
ls-trace-0.2.0 lib/ddtrace/runtime/cgroup.rb
ddtrace-0.40.0 lib/ddtrace/runtime/cgroup.rb
ddtrace-0.39.0 lib/ddtrace/runtime/cgroup.rb
ddtrace-0.38.0 lib/ddtrace/runtime/cgroup.rb
ddtrace-0.37.0 lib/ddtrace/runtime/cgroup.rb
ddtrace-0.36.0 lib/ddtrace/runtime/cgroup.rb
ddtrace-0.35.2 lib/ddtrace/runtime/cgroup.rb
ddtrace-0.35.1 lib/ddtrace/runtime/cgroup.rb
ddtrace-0.35.0 lib/ddtrace/runtime/cgroup.rb