class Perf::MeterFactory

Very simple Perf::Meter factory and singleton management.

Useful to not have to pass around Perf::Meter objects and still be able to generate stats in various parts of the code. For complex situations where you have multiple Perf::Meter objects you might need to consider either creating a factory that fulfills your needs, or create Perf::Meter objects and pass them around or use this factory will well planned out key values so that you won’t have conflicts and overrides.

Example of usage where it would be inconvenient to pass around the Perf::Meter object from example to function2:

def example

Perf::MeterFactory.instance.get.measure(:function1)
  function1()
end

end

def function1()

..
function2()
..

end

def function2()

..
Perf::MeterFactory.instance.get.measure(:some_hot_code_in_function2)
  ...
end
..

end

Constants

DEFAULT_METER

Public Class Methods

new() click to toggle source
# File lib/perf/meter_factory.rb, line 41
def initialize
  @perf_meters       = {}
  @new_meter_options = {}
  @factory_options   = {:noop=>false}
end

Public Instance Methods

all() click to toggle source

Returns a hash of existing meters.

# File lib/perf/meter_factory.rb, line 109
def all
  @perf_meters.dup
end
clear_all!() click to toggle source

Clears the entire cache of meters.

# File lib/perf/meter_factory.rb, line 121
def clear_all!
  @perf_meters.clear
end
clear_factory_options!() click to toggle source

Clear factory options.

# File lib/perf/meter_factory.rb, line 84
def clear_factory_options!
  @factory_options.clear
end
clear_meter(key=DEFAULT_METER) click to toggle source

Removes an existing meter from the cache

# File lib/perf/meter_factory.rb, line 115
def clear_meter(key=DEFAULT_METER)
  @perf_meters.delete(key) if @perf_meters
end
exists?(key=DEFAULT_METER) click to toggle source

If you use set_new_meters_options, or if you pass options to Perf::MeterFactory.get, you are setting options only for if the meter is created. For this reason you might need to find out if the meter already exist.

# File lib/perf/meter_factory.rb, line 91
def exists?(key=DEFAULT_METER)
  !@perf_meters[key].nil?
end
get(key=DEFAULT_METER,new_meter_options=nil) click to toggle source

Returns a Perf::Meter with a given key, and creates it lazily if it doesn’t exist’. NOTE: The options are set ONLY the first time that get is called on a specific key.

After that the options will be ignored!
# File lib/perf/meter_factory.rb, line 51
def get(key=DEFAULT_METER,new_meter_options=nil)
  if !@factory_options[:noop]
    # Creates a real meter
    @perf_meters[key] ||= Perf::Meter.new(new_meter_options || @new_meter_options)
  else
    # If noop is set, creates a no-nop version of the meter, unless a meter with this key has already been
    # created.
    @perf_meters[key] ||= Perf::NoOpMeter.new
  end
end
meter(key=DEFAULT_METER) click to toggle source

meter is like get, but if the meter doesn’t already exists it returns a NoOpMeter. You can use this every time that you want “somebody else” make the decision of what meter to use.

# File lib/perf/meter_factory.rb, line 65
def meter(key=DEFAULT_METER)
  @perf_meters[key] ||= Perf::NoOpMeter.new
end
no_op_instance() click to toggle source

Used by ProductionMeterFactory to return the instance ensuring that no Perf::Meters will be created if they do not exist.

# File lib/perf/meter_factory.rb, line 128
def no_op_instance
  @factory_options[:noop] = true
  self
end
set_default(meter) click to toggle source

Sets the default meter.

# File lib/perf/meter_factory.rb, line 103
def set_default(meter)
  set_meter(DEFAULT_METER,meter)
end
set_factory_options(options) click to toggle source

Set options for the factory behaviour.

# File lib/perf/meter_factory.rb, line 78
def set_factory_options(options)
  @factory_options.merge!(options)
end
set_meter(key,meter) click to toggle source

Pushes a Perf::Meter into a key

# File lib/perf/meter_factory.rb, line 97
def set_meter(key,meter)
  @perf_meters[key]=meter
end
set_new_meters_options(options) click to toggle source

To set options for new meters created by get, when specific options are not passed, you can do so with this method.

# File lib/perf/meter_factory.rb, line 72
def set_new_meters_options(options)
  @new_meter_options.merge(options)
end