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