Sha256: 10953eb351dce27131bfa35fea301d39f02c61836eacafbdca7d4a07f8751421

Contents?: true

Size: 859 Bytes

Versions: 1

Compression:

Stored size: 859 Bytes

Contents

module CPU
  class UsageSampler
    def initialize
      sample
    end

    attr_reader :usages

    def sum_usages
      @usages and @usages.values.inject(&:+)
    end

    CPU = /^cpu(\d+)#{'\s+(\d+)' * 4}/

    USER_HZ = 100

    def sample
      total, @usages = nil, {}
      timestamp = Time.now
      File.foreach('/proc/stat') do |line|
        case line
        when /^cpu[^\d]/
          next
        when CPU
          times = $~.captures
          processor_id = times[0] = times[0].to_i
          (1...times.size).each { |i| times[i] = times[i].to_f / USER_HZ }
          times << timestamp << timestamp
          @usages[processor_id] = Usage.new(self, *times)
        else
          break
        end
      end
      if @usages.empty?
        raise NoSampleDataError, "could not sample measurement data"
      end
      self
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
cpu-0.0.0 lib/cpu/usage_sampler.rb