#!/usr/bin/env ruby require 'bundler' Bundler.setup # This skeleton allows you to run Sidekiq::Web page rendering # through Vernier for tuning. require "sidekiq/web" require "rack/test" require "vernier" Sidekiq::Web.configure do |config| config.middlewares.clear # remove csrf end class SomeJob include Sidekiq::Job end class BenchWeb include Rack::Test::Methods def app Sidekiq::Web.new end def warmup(page = "/scheduled") # Sidekiq.redis {|c| c.flushdb } # 100.times do |idx| # SomeJob.perform_at(idx, 1, 3, "mike", {"foo" => "bar"}) # end 100.times do get page end end def load(page = "/scheduled", count = 10_000) profile do count.times do get page raise last_response.inspect unless last_response.status == 200 end end end def profile(&) if ENV["PROF"] Vernier.profile(out: "profile.json.gz", &) else yield end end end def timer(name="block", count = 10_000) a = Time.now yield count b = Time.now puts "#{name} in #{b - a} sec" end page = "/busy" b = BenchWeb.new b.warmup(page) timer(page) do |count| b.load(page, count) end