class SidekiqSpy::App

Attributes

restarting[R]
running[R]

Public Class Methods

new() click to toggle source
# File lib/sidekiq-spy/app.rb, line 10
def initialize
  @running    = false
  @restarting = false
  @threads    = {}
end

Public Instance Methods

config() click to toggle source
# File lib/sidekiq-spy/app.rb, line 16
def config
  @config ||= Config.new
end
configure() { |config| ... } click to toggle source
# File lib/sidekiq-spy/app.rb, line 20
def configure
  yield config
  
  configure_sidekiq
end
do_command(key) click to toggle source
# File lib/sidekiq-spy/app.rb, line 56
def do_command(key)
  case key
  when 'q' # Q is very natural for Quit; Queues comes second to this
    stop
  when 'w'
    @screen.panel_main = :workers
  when 'u' # Q is already taken
    @screen.panel_main = :queues
  when 'r'
    @screen.panel_main = :retries
  when 's'
    @screen.panel_main = :schedules
  end
  
  wakey_wakey # wake threads for immediate response
end
restart() click to toggle source
# File lib/sidekiq-spy/app.rb, line 52
def restart
  @restarting = true
end
start() click to toggle source
# File lib/sidekiq-spy/app.rb, line 26
def start
  begin
    @running = true
    
    setup
    
    @threads[:command] ||= Thread.new do
      command_loop # listen for commands
    end
    
    @threads[:refresh] ||= Thread.new do
      refresh_loop # refresh frequently
    end
    
    @threads.each { |tname, t| t.join }
  ensure
    cleanup
  end
end
stop() click to toggle source
# File lib/sidekiq-spy/app.rb, line 46
def stop
  @running = false
  
  wakey_wakey # for Ctrl+C route; #do_command route already wakes threads
end

Private Instance Methods

cleanup() click to toggle source
# File lib/sidekiq-spy/app.rb, line 89
def cleanup
  @screen.close if @screen
end
command_loop() click to toggle source
# File lib/sidekiq-spy/app.rb, line 97
def command_loop
  while @running do
    next unless @screen # #refresh_loop might be reattaching screen
    
    key = @screen.next_key
    
    next unless key # keep listening if timeout
    
    do_command(key)
  end
end
configure_sidekiq() click to toggle source
# File lib/sidekiq-spy/app.rb, line 75
def configure_sidekiq
  Sidekiq.configure_client do |sidekiq_config|
    sidekiq_config.logger = nil
    sidekiq_config.redis = {
      :url       => config.url,
      :namespace => config.namespace,
    }
  end
end
refresh_loop() click to toggle source
# File lib/sidekiq-spy/app.rb, line 109
def refresh_loop
  while @running do
    next unless @screen # HACK: only certain test scenarios?
    
    if @restarting || @screen.missized? # signal(s) or whilst still resizing
      panel_main = @screen.panel_main
      
      cleanup
      
      setup
      
      @screen.panel_main = panel_main
      
      @restarting = false
    end
    
    @screen.refresh
    
    sleep config.interval # go to sleep; could be rudely awoken on quit
  end
end
setup() click to toggle source
# File lib/sidekiq-spy/app.rb, line 85
def setup
  @screen = Display::Screen.new
end
wakey_wakey() click to toggle source
# File lib/sidekiq-spy/app.rb, line 93
def wakey_wakey
  @threads.each { |tname, t| t.run if t.status == 'sleep' }
end