class Kontena::Cli::Apps::MonitorCommand

Attributes

services[R]

Public Instance Methods

clear_terminal() click to toggle source
# File lib/kontena/cli/apps/monitor_command.rb, line 89
def clear_terminal
  print "\e[H\e[2J"
end
color_for_service(service) click to toggle source
# File lib/kontena/cli/apps/monitor_command.rb, line 70
def color_for_service(service)
  color_maps[service] = colors.shift unless color_maps[service]
  color_maps[service].to_sym
end
color_maps() click to toggle source
# File lib/kontena/cli/apps/monitor_command.rb, line 75
def color_maps
  @color_maps ||= {}
end
colors() click to toggle source
# File lib/kontena/cli/apps/monitor_command.rb, line 79
def colors
  if(@colors.nil? || @colors.size == 0)
    @colors = %i(
      red green yellow blue magenta cyan bright_red bright_green
      bright_yellow bright_blue bright_magenta bright_cyan
    )
  end
  @colors
end
execute() click to toggle source
# File lib/kontena/cli/apps/monitor_command.rb, line 16
def execute
  require_config_file(filename)

  @services = services_from_yaml(filename, service_list, service_prefix, true)
  if services.size > 0
    show_monitor(services)
  elsif !service_list.empty?
    puts "No such service: #{service_list.join(', ')}".colorize(:red)
  end
end
show_monitor(services) click to toggle source
# File lib/kontena/cli/apps/monitor_command.rb, line 27
def show_monitor(services)
  require_api_url
  token = require_token
  loop do
    nodes = {}
    services.each do |name, data|
      service = prefixed_name(name)
      result = client(token).get("services/#{current_grid}/#{service}/containers") rescue nil
      if result
        services[name]['instances'] = result['containers'].size
        result['containers'].each do |container|
          container['service'] = name
          nodes[container['node']['name']] ||= []
          nodes[container['node']['name']] << container
        end
      end
    end
    clear_terminal
    puts "services:"
    services.each do |name, data|
      color = color_for_service(name)
      puts "  #{"■".colorize(color)} #{name} (#{data['instances']} instances)"
    end
    puts "nodes:"
    node_names = nodes.keys.sort
    node_names.each do |name|
      containers = nodes[name]
      puts "  #{name} (#{containers.size} instances)"
      print "  "
      containers.each do |container|
        icon = "■"
        if container['status'] != 'running'
          icon = "□"
        end
        color = color_for_service(container['service'])
        print icon.colorize(color)
      end
      puts ''
    end
    sleep 1
  end
end