Sha256: aec96281f2c460024e8591808b9f30e406f6cd31725cf7a289fbb53956dcebaf

Contents?: true

Size: 1.5 KB

Versions: 9

Compression:

Stored size: 1.5 KB

Contents

# (c) Copyright IBM Corp. 2021
# (c) Copyright Instana Inc. 2021

module Instana
  module Backend
    # Wrapper around {Sys::ProcTable} that adds support for reading the /proc
    # file system for extra information around containers
    # @since 1.197.0
    class ProcessInfo < SimpleDelegator
      def name
        cmdline
          .split(' ').first
      end

      def arguments
        _, *arguments = cmdline.split(' ')
        clean_arguments(arguments)
      end

      def parent_pid
        if in_container? && sched_pid != pid
          sched_pid
        else
          pid
        end
      end

      def from_parent_namespace
        !in_container? || in_container? && sched_pid != pid
      end

      def cpuset
        path = "/proc/#{pid}/cpuset"
        return unless File.exist?(path)

        File.read(path).strip
      end

      def in_container?
        !cpuset.nil? && cpuset != '/'
      end

      def sched_pid
        path = '/proc/self/sched'
        return unless File.exist?(path)

        File.read(path).match(/\d+/).to_s.to_i
      end

      def memory_used
        if RbConfig::CONFIG['host_os'].include?('darwin')
          rss / 1024
        else
          rss * 4096
        end
      end

      private

      def clean_arguments(arguments)
        return arguments unless RbConfig::CONFIG['host_os'].include?('darwin')

        arguments.reject do |a|
          if a.include?('=')
            k, = a.split('=', 2)
            ENV[k]
          end
        end
      end
    end
  end
end

Version data entries

9 entries across 9 versions & 1 rubygems

Version Path
instana-1.209.3 lib/instana/backend/process_info.rb
instana-1.209.2 lib/instana/backend/process_info.rb
instana-1.209.1 lib/instana/backend/process_info.rb
instana-1.209.0.pre3 lib/instana/backend/process_info.rb
instana-1.209.0.pre2 lib/instana/backend/process_info.rb
instana-1.209.0.pre1 lib/instana/backend/process_info.rb
instana-1.208.0 lib/instana/backend/process_info.rb
instana-1.207.0 lib/instana/backend/process_info.rb
instana-1.206.0 lib/instana/backend/process_info.rb