Sha256: e686a6767093065d8ef608ff1720461572c717aa3eac33197491aebc89eb947d
Contents?: true
Size: 1.37 KB
Versions: 1
Compression:
Stored size: 1.37 KB
Contents
require 'rubygems' class SlashPort::Component::LinuxProcess < SlashPort::Component def self.add_process(name, &pid_method) define_method(name.to_sym) do pid = pid_method.call().to_i query_process(pid) end attribute :name => name, :handler => name.to_sym, :doc => "Process data for #{name}" end def query_process(pid) procinfo = ProcessInfo.new(pid) limits = procinfo.get_limits tuple = SlashPort::Tuple.new tuple.data["open_files_max"] = limits["open files"].to_f tuple.data["open_files_used"] = procinfo.open_files.to_f if limits["open files"] == "unlimited" tuple.data["open_files_percent"] = 0.0 else tuple.data["open_files_percent"] = procinfo.open_files / limits["open files"].to_f end return tuple end end # class SlashPort::Component class ProcessInfo def initialize(pid) @pid = pid end def procpath(path) return "/proc/#{@pid}/#{path}" end def get_limits linere = /^Max (.*?) +\S+ +(\S+)(?: +\S+\s*)?$/ limits = Hash.new File.open(procpath("limits")).each do |line| line.chomp! next if line =~ /^Limit/ puts line match = linere.match(line) next if match == nil limits[match.captures[0]] = match.captures[1] end return limits end def open_files return Dir.glob(procpath("fd/*")).length end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
slashport-0.15.12 | app/models/components/linuxprocess.rb |