class CelluloidBenchmark::Runner

Run a scenario in several Visitors and return a BenchmarkRun

Public Class Methods

run(args) click to toggle source
# File lib/celluloid_benchmark/runner.rb, line 11
def self.run(args)
  session  =  args[:session]  || "session.rb"
  visitors =  args[:visitors] || visitors_count(args[:visitors])
  duration = (args[:duration] || 20).to_f
  target   =  args[:target]

  require File.expand_path(session)

  VisitorGroup.run!

  visitors = visitors_count(visitors)
  benchmark_run = Celluloid::Actor[:benchmark_run]
  benchmark_run.visitors = visitors

  benchmark_run.mark_start
  futures = run_sessions(benchmark_run, duration, visitors, Target.new_from_key(target))
  futures.map(&:value)

  benchmark_run.mark_end

  benchmark_run
end
run_sessions(benchmark_run, duration, visitors, target) click to toggle source
# File lib/celluloid_benchmark/runner.rb, line 34
def self.run_sessions(benchmark_run, duration, visitors, target)
  pool = Celluloid::Actor[:visitor_pool]
  futures = []
  visitors.times do
    futures << pool.future.run_session(benchmark_run, duration, target)
  end
  futures
end
visitors_count(count) click to toggle source
# File lib/celluloid_benchmark/runner.rb, line 43
def self.visitors_count(count)
  if count
    count = count.to_i
  else
    count = Visitor.pool.size - 2
  end

  if count > 1
    count
  else
    1
  end
end