module Sidekiq::Benchmark::Web

Constants

JS_DIR
VIEW_PATH
WEB_DIR

Public Class Methods

registered(app) click to toggle source
# File lib/sidekiq-benchmark/web.rb, line 10
def self.registered(app)
  app.helpers Chartkick::Helper

  app.get '/benchmarks/javascripts/chartkick.js' do
    body = File.read File.join(JS_DIR, 'chartkick.js')
    headers = {
      'Content-Type' => 'application/javascript',
      'Cache-Control' => 'public, max-age=84600'
    }
    [200, headers, [body]]
  end

  app.get "/benchmarks" do
    @charts = {}

    Sidekiq.redis do |conn|
      @types = conn.smembers TYPES_KEY
      @types.each do |type|
        @charts[type] = STAT_KEYS.reduce({}) { |a, e| a[e] = []; a }

        total_key = "#{REDIS_NAMESPACE}:#{type}:total"
        total_keys = conn.hkeys(total_key) - %w(start_time job_time finish_time)

        total_time = conn.hget total_key, :job_time
        total_time = total_time.to_f
        total_keys.each do |key|
          value = conn.hget total_key, key
          @charts[type][:total] << [key, value.to_f.round(2)]
        end

        stats = conn.hgetall "#{REDIS_NAMESPACE}:#{type}:stats"
        stats.each do |key, value|
          @charts[type][:stats] << [key.to_f, value.to_i]
        end

        @charts[type][:stats].sort! { |a, b| a[0] <=> b[0] }
        @charts[type][:stats].map! { |a| [a[0].to_s, a[1]] }
      end
    end

    erb File.read(VIEW_PATH)
  end

  app.post "/benchmarks/remove" do
    Sidekiq.redis do |conn|
      keys = STAT_KEYS.map { |key| "#{REDIS_NAMESPACE}:#{params[:type]}:#{key}" }
      conn.srem TYPES_KEY, params[:type]
      conn.del keys
    end

    redirect "#{root_path}benchmarks"
  end
  app.post "/benchmarks/remove_all" do
    Sidekiq.redis do |conn|
      types = conn.smembers TYPES_KEY
      keys = STAT_KEYS.map do |key|
        types.map { |type| "#{REDIS_NAMESPACE}:#{type}:#{key}" }
      end.flatten
      keys << TYPES_KEY
      conn.del keys
    end

    redirect "#{root_path}benchmarks"
  end
end