lib/rocket_job/performance.rb in rocketjob-5.1.1 vs lib/rocket_job/performance.rb in rocketjob-5.2.0.beta1
- old
+ new
@@ -1,32 +1,32 @@
-require 'csv'
-require 'yaml'
-require 'optparse'
+require "csv"
+require "yaml"
+require "optparse"
module RocketJob
class Performance
attr_accessor :count, :servers, :workers, :version, :ruby, :environment, :mongo_config
def initialize
@version = RocketJob::VERSION
@ruby = defined?(JRuby) ? "jruby_#{JRUBY_VERSION}" : "ruby_#{RUBY_VERSION}"
@count = 100_000
@servers = 0
@workers = 0
- @environment = ENV['RAILS_ENV'] || ENV['RACK_ENV'] || 'development'
- @mongo_config = 'config/mongoid.yml'
+ @environment = ENV["RAILS_ENV"] || ENV["RACK_ENV"] || "development"
+ @mongo_config = "config/mongoid.yml"
end
# Loads the queue with jobs to be processed once the queue is loaded.
# Retain the first and last job for timings, all others are destroyed on completion.
def run_test_case(count = self.count)
if RocketJob::Server.where(:state.in => %w[running paused]).count.zero?
- raise 'Please start servers before starting the performance test'
+ raise "Please start servers before starting the performance test"
end
count_running_workers
- puts 'Waiting for workers to pause'
+ puts "Waiting for workers to pause"
RocketJob::Server.pause_all
RocketJob::Jobs::SimpleJob.delete_all
# Wait for paused workers to stop
loop do
@@ -34,19 +34,20 @@
RocketJob::Server.paused.each do |server|
running += server.heartbeat.workers unless server.zombie?
end
puts "Waiting for #{running} workers"
break if running.zero?
+
sleep 1
end
- puts 'Enqueuing jobs'
+ puts "Enqueuing jobs"
first = RocketJob::Jobs::SimpleJob.create!(priority: 1, destroy_on_complete: false)
(count - 2).times { RocketJob::Jobs::SimpleJob.create! }
last = RocketJob::Jobs::SimpleJob.create!(priority: 100, destroy_on_complete: false)
- puts 'Resuming workers'
+ puts "Resuming workers"
RocketJob::Server.resume_all
sleep 3 until last.reload.completed?
duration = last.reload.completed_at - first.reload.started_at
@@ -56,37 +57,37 @@
{count: count, duration: duration, jobs_per_second: (count.to_f / duration).to_i}
end
# Export the Results hash to a CSV file
def export_results(results)
- CSV.open("job_results_#{ruby}_#{servers}s_#{workers}w_v#{version}.csv", 'wb') do |csv|
+ CSV.open("job_results_#{ruby}_#{servers}s_#{workers}w_v#{version}.csv", "wb") do |csv|
csv << results.first.keys
results.each { |result| csv << result.values }
end
end
# Parse command line options
def parse(argv)
- parser = OptionParser.new do |o|
- o.on('-c',
- '--count COUNT',
- 'Count of jobs to enqueue') do |arg|
+ parser = OptionParser.new do |o|
+ o.on("-c",
+ "--count COUNT",
+ "Count of jobs to enqueue") do |arg|
self.count = arg.to_i
end
- o.on('-m',
- '--mongo MONGO_CONFIG_FILE_NAME',
- 'Path and filename of config file. Default: config/mongoid.yml') do |arg|
+ o.on("-m",
+ "--mongo MONGO_CONFIG_FILE_NAME",
+ "Path and filename of config file. Default: config/mongoid.yml") do |arg|
self.mongo_config = arg
end
- o.on('-e',
- '--environment ENVIRONMENT',
- 'The environment to run the app on (Default: RAILS_ENV || RACK_ENV || development)') do |arg|
+ o.on("-e",
+ "--environment ENVIRONMENT",
+ "The environment to run the app on (Default: RAILS_ENV || RACK_ENV || development)") do |arg|
self.environment = arg
end
end
- parser.banner = 'rocketjob_perf <options>'
- parser.on_tail '-h', '--help', 'Show help' do
+ parser.banner = "rocketjob_perf <options>"
+ parser.on_tail "-h", "--help", "Show help" do
puts parser
exit 1
end
parser.parse! argv
end
@@ -94,9 +95,10 @@
def count_running_workers
self.servers = 0
self.workers = 0
RocketJob::Server.running.each do |server|
next if server.zombie?
+
self.servers += 1
self.workers += server.heartbeat.workers
end
puts "Running: #{workers} workers, distributed across #{servers} servers"
end