class ApiBomb::Commander
Attributes
army[R]
duration[R]
fronts[R]
logger[R]
requests[R]
signaler[R]
Public Class Methods
new(army:, fronts: 1, duration: 10, logger: Logger.new(STDOUT), requests: nil)
click to toggle source
# File lib/api_bomb/commander.rb, line 6 def initialize(army:, fronts: 1, duration: 10, logger: Logger.new(STDOUT), requests: nil) @duration = duration @army = army @fighters = [] @statuses = [] @hold_times = [] @fronts = fronts @logger = logger @requests = requests end
Public Instance Methods
start_attack!()
click to toggle source
# File lib/api_bomb/commander.rb, line 17 def start_attack! begin #I know that Timeout is really bad #but literarly there is no other generic way doing this #Fortunately we only do requests to an API so it shouldn't affect us logger.info "Starts firing requests" Timeout::timeout(duration) { attack } rescue Timeout::Error logger.info "Ceasefire!" end report_attack_result end
Private Instance Methods
attack_result()
click to toggle source
# File lib/api_bomb/commander.rb, line 49 def attack_result { duration: duration, fronts: @fronts, requests: @signaler.fighters_lost, rps: @signaler.fighters_lost / duration, rpm: @signaler.fighters_lost / (duration/60.0), average_rt: @signaler.mean_hold_time, sd_rq_time: @signaler.sd_time, percentile_50: @signaler.percentile(50), percentile_90: @signaler.percentile(90), percentile_95: @signaler.percentile(95), percentile_99: @signaler.percentile(99), server_status_stats: @signaler.server_status_stats } end
report_attack_result()
click to toggle source
# File lib/api_bomb/commander.rb, line 34 def report_attack_result logger.info "Elapsed time: #{attack_result[:duration]}" logger.info "Concurrency: #{attack_result[:fronts]} threads" logger.info "Number of requests: #{attack_result[:requests]}" logger.info "Requests per second: #{attack_result[:rps]}" logger.info "Requests per minute: #{attack_result[:rpm]}" logger.info "Average response time: #{attack_result[:average_rt]}" logger.info "Standard deviation: #{attack_result[:sd_rq_time]}" logger.info "Percentile 50th: #{attack_result[:percentile_50]}" logger.info "Percentile 90th: #{attack_result[:percentile_90]}" logger.info "Percentile 95th: #{attack_result[:percentile_95]}" logger.info "Percentile 99th: #{attack_result[:percentile_99]}" logger.info "Server status stats: #{attack_result[:server_status_stats]}" end