class MultiMeasure

Constants

STORE_KEY
VERSION

Attributes

measurements[R]

Public Class Methods

config() click to toggle source
# File lib/multi_measure.rb, line 32
def config
  @config ||= default_config
end
configure() { |config| ... } click to toggle source
# File lib/multi_measure.rb, line 13
def configure
  yield config
  @config = config
end
current_measurements() click to toggle source
# File lib/multi_measure.rb, line 54
def current_measurements
  instance.current_measurements
end
default_config() click to toggle source
# File lib/multi_measure.rb, line 18
def default_config
  MultiMeasure::Config.build_from(
    output_prefix: "MULTI_MEASURE_TOTAL",
    write_to: STDOUT,
    middleware: {
      env_var: "MULTI_MEASURE_ENABLED"
    }
  )
end
done() click to toggle source
# File lib/multi_measure.rb, line 44
def done
  instance.print_all_measurements
  reset
end
measure(*names, &block) click to toggle source
# File lib/multi_measure.rb, line 58
def measure(*names, &block)
  instance.measure(*names, &block)
end
new() click to toggle source
# File lib/multi_measure.rb, line 71
def initialize
  @measurements = ThreadSafeHash.new
end
reset() click to toggle source
# File lib/multi_measure.rb, line 40
def reset
  Thread.current[STORE_KEY] = nil
end
set_default_config() click to toggle source
# File lib/multi_measure.rb, line 28
def set_default_config
  @config = default_config
end
start() click to toggle source
# File lib/multi_measure.rb, line 36
def start
  Thread.current[STORE_KEY] = new
end
track_measurements() { || ... } click to toggle source
# File lib/multi_measure.rb, line 49
def track_measurements
  start
  yield.tap { done }
end

Private Class Methods

instance() click to toggle source
# File lib/multi_measure.rb, line 66
def instance
  Thread.current.fetch(STORE_KEY) { NullMeasurer.new }
end

Public Instance Methods

current_measurements() click to toggle source
# File lib/multi_measure.rb, line 94
def current_measurements
  measurements.to_normal_hash
end
measure(*names) { |state| ... } click to toggle source
# File lib/multi_measure.rb, line 75
def measure(*names)
  return_value = nil

  state = MeasurementState.new

  time = Benchmark.realtime do
    return_value = yield state
  end

  if state.track_measurement?
    names.each do |name|
      measurements[name] ||= []
      measurements[name] << time
    end
  end

  return_value
end
print_all_measurements() click to toggle source

Private Instance Methods

config() click to toggle source
# File lib/multi_measure.rb, line 140
def config
  self.class.config
end
to_ms(seconds) click to toggle source
# File lib/multi_measure.rb, line 144
def to_ms(seconds)
  (seconds * 1_000).round(1)
end
write_to_io(message) click to toggle source
# File lib/multi_measure.rb, line 130
def write_to_io(message)
  message = "#{config.output_prefix} #{message}"

  if config.write_to.respond_to?(:debug)
    config.write_to.debug(message)
  else
    config.write_to.puts(message)
  end
end