class Kontena::Cli::Stacks::MonitorCommand

Public Instance Methods

clear_terminal() click to toggle source
# File lib/kontena/cli/stacks/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/stacks/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/stacks/monitor_command.rb, line 75
def color_maps
  @color_maps ||= {}
end
colors() click to toggle source
# File lib/kontena/cli/stacks/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/stacks/monitor_command.rb, line 17
def execute
  response = client.get("grids/#{current_grid}/services?stack=#{name}")
  services = response['services']
  if selected_services.size > 0
    services.delete_if{ |s| !selected_services.include?(s['name'])}
  end
  show_monitor(services)
end
show_monitor(services) click to toggle source

@param [Array<Hash>]

# File lib/kontena/cli/stacks/monitor_command.rb, line 27
def show_monitor(services)
  loop do
    nodes = {}
    services.each do |service|
      result = client.get("services/#{service['id']}/containers") rescue nil
      service['instances'] = 0
      if result
        service['instances'] = result['containers'].size
        result['containers'].each do |container|
          container['service'] = service['name']
          nodes[container['node']['name']] ||= []
          nodes[container['node']['name']] << container
        end
      end
    end
    clear_terminal
    puts "grid: #{current_grid}"
    puts "stack: #{name}"
    puts "services:"
    services.each do |service|
      color = color_for_service(service['name'])
      puts "  #{pastel.send(color, "■")} #{service['name']} (#{service['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 pastel.send(color, icon)
      end
      puts ''
    end
    sleep 1
  end
end