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
# File lib/perf/meter_factory.rb, line 41 def initialize @perf_meters = {} @new_meter_options = {} @factory_options = {:noop=>false} end
Public Instance Methods
Returns a hash of existing meters.
# File lib/perf/meter_factory.rb, line 109 def all @perf_meters.dup end
Clears the entire cache of meters.
# File lib/perf/meter_factory.rb, line 121 def clear_all! @perf_meters.clear end
Clear factory options.
# File lib/perf/meter_factory.rb, line 84 def clear_factory_options! @factory_options.clear end
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
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
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 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
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
Sets the default meter.
# File lib/perf/meter_factory.rb, line 103 def set_default(meter) set_meter(DEFAULT_METER,meter) end
Set options for the factory behaviour.
# File lib/perf/meter_factory.rb, line 78 def set_factory_options(options) @factory_options.merge!(options) end
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
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