Sha256: 177278a20f20217b3768c50afb731d22c76eaa9b1b4b097a3cf255ae3c0378ee

Contents?: true

Size: 950 Bytes

Versions: 4

Compression:

Stored size: 950 Bytes

Contents

require 'benchmark'

module Whysoslow
  class Measurement

    MEASUREMENTS = [:user, :system, :total, :real]
    attr_reader :units, :multiplier
    attr_reader *MEASUREMENTS

    def initialize(units='ms')
      @user, @system, @total, @real = 0
      @units, @multiplier = if units == 's'
        ['s', 1]
      else # MB
        ['ms', 1000]
      end
    end

    def benchmark(&block)
      Benchmark.measure(&block).tap do |values|
        measurments = values.to_s.strip.gsub(/[^\s|0-9|\.]/, '').split(/\s+/)
        self.user, self.system, self.total, self.real = measurments
      end
    end

    protected

    def user=(value_in_secs);   @user   = value_in_secs.to_f * @multiplier; end
    def system=(value_in_secs); @system = value_in_secs.to_f * @multiplier; end
    def total=(value_in_secs);  @total  = value_in_secs.to_f * @multiplier; end
    def real=(value_in_secs);   @real   = value_in_secs.to_f * @multiplier; end

  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
whysoslow-1.0.1 lib/whysoslow/measurement.rb
whysoslow-1.0.0 lib/whysoslow/measurement.rb
whysoslow-0.0.2 lib/whysoslow/measurement.rb
whysoslow-0.0.1 lib/whysoslow/measurement.rb