class TimeBandits::TimeConsumers::BaseConsumer

Attributes

metrics_prefix[R]
runtime_format[R]
runtime_keys[R]
struct[R]
timer_name[R]

Public Class Methods

fields(*symbols) click to toggle source

first symbol is used as time measurement

# File lib/time_bandits/time_consumers/base_consumer.rb, line 18
      def fields(*symbols)
        @struct = Struct.new(*(symbols.map{|s| "#{@metrics_prefix}_#{s}".to_sym}))
        symbols.each do |name|
          class_eval(<<-"EVA", __FILE__, __LINE__ + 1)
            def #{name}; @counters.#{@metrics_prefix}_#{name}; end
            def #{name}=(v); @counters.#{@metrics_prefix}_#{name} = v; end
          EVA
        end
      end
format(f, *keys) click to toggle source
# File lib/time_bandits/time_consumers/base_consumer.rb, line 28
def format(f, *keys)
  @runtime_format = f
  @runtime_keys = keys.map{|s| "#{@metrics_prefix}_#{s}".to_sym}
end
instance() click to toggle source
# File lib/time_bandits/time_consumers/base_consumer.rb, line 4
def instance
  Thread.current.thread_variable_get(key) ||
    Thread.current.thread_variable_set(key, new)
end
key() click to toggle source
# File lib/time_bandits/time_consumers/base_consumer.rb, line 9
def key
  @key ||= name.to_sym
end
method_missing(m, *args) click to toggle source
Calls superclass method
# File lib/time_bandits/time_consumers/base_consumer.rb, line 35
def method_missing(m, *args)
  (i = instance).respond_to?(m) ? i.send(m,*args) : super
end
new() click to toggle source
# File lib/time_bandits/time_consumers/base_consumer.rb, line 40
def initialize
  @counters = self.class.struct.new
  reset
end
prefix(sym) click to toggle source
# File lib/time_bandits/time_consumers/base_consumer.rb, line 13
def prefix(sym)
  @metrics_prefix = sym
end

Public Instance Methods

consumed() click to toggle source
# File lib/time_bandits/time_consumers/base_consumer.rb, line 53
def consumed
  @counters[0]
end
Also aliased as: current_runtime
current_runtime()
Alias for: consumed
metrics() click to toggle source
# File lib/time_bandits/time_consumers/base_consumer.rb, line 49
def metrics
  @counters.members.each_with_object({}){|m,h| h[m] = @counters.send(m)}
end
reset() click to toggle source
# File lib/time_bandits/time_consumers/base_consumer.rb, line 45
def reset
  @counters.length.times{|i| @counters[i] = 0}
end
runtime() click to toggle source
# File lib/time_bandits/time_consumers/base_consumer.rb, line 59
def runtime
  values = metrics.values_at(*self.class.runtime_keys)
  if values.all?{|v|v==0}
    ""
  else
    self.class.runtime_format % values
  end
end