class Honcho::UIRunner

Public Instance Methods

log(name, message) click to toggle source
# File lib/honcho/ui_runner.rb, line 18
def log(name, message)
  (color_index, color_quality) = colors[name]
  @log.attron(Curses.color_pair(color_index) | color_quality) do
    @log.addstr(name.rjust(label_width))
  end
  @log.addstr(': ')
  @log.addstr(message)
  @log.refresh
end
run() click to toggle source
Calls superclass method Honcho::Runner#run
# File lib/honcho/ui_runner.rb, line 8
def run
  setup_curses
  @colors = assign_colors_for_curses
  init_log_window
  draw
  super
ensure
  unsetup_curses
end

Private Instance Methods

bar(count, width) click to toggle source
# File lib/honcho/ui_runner.rb, line 116
def bar(count, width)
  ('|' * count).ljust(width)[0...width]
end
check_for_work() click to toggle source
Calls superclass method Honcho::Runner#check_for_work
# File lib/honcho/ui_runner.rb, line 120
def check_for_work
  draw
  super
end
cols() click to toggle source
# File lib/honcho/ui_runner.rb, line 129
def cols
  Curses.cols
end
count_web_requests() click to toggle source
# File lib/honcho/ui_runner.rb, line 86
def count_web_requests
  return unless @pstatus_for_app
  @pstatus_for_app['workers'].map { |s| s['Processed'].to_i }.inject(&:+)
end
count_web_servers() click to toggle source
# File lib/honcho/ui_runner.rb, line 80
def count_web_servers
  return unless @pstatus_for_app
  return unless (busy_webs = @pstatus_for_app['workers'].select { |s| s['Uptime'] }).any?
  busy_webs.size
end
draw() click to toggle source
# File lib/honcho/ui_runner.rb, line 36
def draw
  draw_queues
  draw_uptime
end
draw_queues() click to toggle source
# File lib/honcho/ui_runner.rb, line 41
def draw_queues
  adapter_names = adapters.map(&:name)
  max_name_width = adapter_names.map(&:size).max
  bar_width = cols - max_name_width - 80
  table = UI::Table.new(
    headings: [
      'app'.ljust(max_name_width + 2),
      'webs   ',
      "req's   ",
      'sidekiq  ',
      'resque   ',
      ' ',
      'work queue'.ljust(bar_width),
      ' '
    ],
    width: cols - 100,
    top: 1,
    left: 2
  )
  pstatus = passenger_status
  data = adapters_by_app.map do |app, adapters|
    @pstatus_for_app = pstatus[app]
    count = adapters.map(&:total_count).inject(&:+)
    sidekiq = adapters.detect { |a| a.type == 'sidekiq' }
    resque = adapters.detect { |a| a.type == 'resque' }
    [
      [app, *colors[app]],
      [count_web_servers],
      [count_web_requests],
      [sidekiq && sidekiq.running? ? 'running' : ''],
      [resque && resque.running? ? 'running' : ''],
      ['['],
      [bar(count, bar_width), 2, 0],
      [']']
    ]
  end
  table.draw(data)
end
draw_uptime() click to toggle source
# File lib/honcho/ui_runner.rb, line 91
def draw_uptime
  x = cols - 38
  uptime = `uptime`
  loadavg = uptime.match(/load averages: (.*)/)[1]
  Curses.setpos(2, x)
  Curses.attron(Curses.color_pair(2)) do
    Curses.addstr('Load average: ')
  end
  Curses.addstr(loadavg)
  time = uptime.match(/up (.*), \d+ users/)[1]
  Curses.setpos(3, x)
  Curses.attron(Curses.color_pair(2)) do
    Curses.addstr('Uptime: ')
  end
  Curses.addstr(time)
end
init_log_window() click to toggle source
# File lib/honcho/ui_runner.rb, line 30
def init_log_window
  top = adapters.size + 3
  @log = Curses::Window.new(lines - top, cols, top, 0)
  @log.scrollok(true)
end
lines() click to toggle source
# File lib/honcho/ui_runner.rb, line 125
def lines
  Curses.lines
end
passenger_status() click to toggle source
# File lib/honcho/ui_runner.rb, line 151
def passenger_status
  return {} unless show_passenger?
  PassengerStatus.new.data.each_with_object({}) do |app, hash|
    hash[app['name']] = app
  end
end
print(text, y = nil, x = nil) click to toggle source
setup_curses() click to toggle source
# File lib/honcho/ui_runner.rb, line 133
def setup_curses
  Curses.init_screen
  Curses.start_color
  Curses.cbreak
  Curses.noecho
  Curses.curs_set(0)
  Curses.stdscr.keypad(true)
end
show_passenger?() click to toggle source
# File lib/honcho/ui_runner.rb, line 146
def show_passenger?
  return @show_passenger unless @show_passenger.nil?
  @show_passenger = system('which passenger-status &>/dev/null')
end
unsetup_curses() click to toggle source
# File lib/honcho/ui_runner.rb, line 142
def unsetup_curses
  Curses.close_screen
end