bin/rocketjob_perf in rocketjob-2.0.0.rc3 vs bin/rocketjob_perf in rocketjob-2.0.0

- old
+ new

@@ -1,92 +1,11 @@ #!/usr/bin/env ruby -require 'csv' -require 'yaml' require 'rocketjob' # Log to console -SemanticLogger.add_appender(STDOUT, &SemanticLogger::Appender::Base.colorized_formatter) +SemanticLogger.add_appender(io: STDOUT, formatter: :color) -class RocketJobPerf - attr_accessor :count, :worker_processes, :worker_threads, :version, :ruby, :environment, :mongo_config - - def initialize - @version = RocketJob::VERSION - @ruby = defined?(JRuby) ? "jruby_#{JRUBY_VERSION}" : "ruby_#{RUBY_VERSION}" - @count = 100_000 - @worker_processes = 0 - @worker_threads = 0 - @environment = ENV['RAILS_ENV'] || ENV['RACK_ENV'] || 'development' - @mongo_config = 'config/mongo.yml' - end - - def run_test_case(count = self.count) - self.worker_processes = RocketJob::Worker.count - raise 'Please start workers before starting the performance test' if worker_processes == 0 - - self.worker_processes = 0 - self.worker_threads = 0 - RocketJob::Worker.where(state: :running).each do |worker_process| - unless worker_process.zombie? - self.worker_processes += 1 - self.worker_threads += worker_process.heartbeat.current_threads - end - end - puts "Running: #{worker_threads} workers, distributed across #{worker_processes} processes" - - puts 'Waiting for workers to pause' - RocketJob::Worker.pause_all - RocketJob::Jobs::SimpleJob.delete_all - sleep 15 - - puts 'Enqueuing jobs' - first = RocketJob::Jobs::SimpleJob.create(priority: 1, destroy_on_complete: false) - (count - 2).times { |i| RocketJob::Jobs::SimpleJob.create! } - last = RocketJob::Jobs::SimpleJob.create(priority: 100, destroy_on_complete: false) - - puts 'Resuming workers' - RocketJob::Worker.resume_all - - while (!last.reload.completed?) - sleep 3 - end - - duration = last.reload.completed_at - first.reload.started_at - {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}_#{worker_processes}p_#{threads}t_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| - self.count = arg.to_i - end - o.on('-m', '--mongo MONGO_CONFIG_FILE_NAME', 'Location of mongo.yml config file') 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| - self.environment = arg - end - end - parser.banner = 'rocketjob_perf <options>' - parser.on_tail '-h', '--help', 'Show help' do - puts parser - exit 1 - end - parser.parse! argv - end - -end - -perf = RocketJobPerf.new +perf = RocketJob::Performance.new perf.parse(ARGV) RocketJob::Config.load!(perf.environment, perf.mongo_config) results = perf.run_test_case p results