Class: Kontena::Cli::Stacks::MonitorCommand

Inherits:
Kontena::Command show all
Includes:
Common, GridOptions, Common
Defined in:
lib/kontena/cli/stacks/monitor_command.rb

Instance Attribute Summary

Attributes inherited from Kontena::Command

#arguments, #exit_code, #result

Instance Method Summary collapse

Methods included from Common

#abort_on_validation_errors, #current_dir, #display_notifications, #hint_on_validation_notifications, #loader, #loader_class, #reader, #set_env_variables, #stack, #stack_name, #stacks_client

Methods included from Kontena::Cli::Services::ServicesHelper

#create_service, #delete_service, #deploy_service, #get_service, #health_status, #health_status_icon, #int_to_filesize, #parse_build_args, #parse_container_name, #parse_deploy_opts, #parse_health_check, #parse_image, #parse_links, #parse_log_opts, #parse_memory, #parse_ports, #parse_relative_time, #parse_secrets, #parse_service_id, #render_service_deploy_instances, #restart_service, #scale_service, #show_service, #show_service_containers, #show_service_instances, #start_service, #stop_service, #update_service, #wait_for_deploy_to_finish

Methods included from Common

#access_token=, #add_master, #any_key_to_continue, #any_key_to_continue_with_timeout, #api_url, #api_url=, #caret, #clear_current_grid, #client, #cloud_auth?, #cloud_client, #config, #confirm, #confirm_command, #current_grid, #current_master_index, #debug?, #display_account_login_info, #display_login_info, display_logo, #display_master_login_info, #error, exit_with_error, #kontena_account, #logger, #pastel, #print, #prompt, #puts, #require_api_url, #require_token, #reset_client, #reset_cloud_client, #running_quiet?, #running_silent?, #running_verbose?, #spin_if, #spinner, #sprint, #sputs, #stdin_input, #use_refresh_token, #vfakespinner, #vputs, #vspinner, #warning

Methods included from GridOptions

included

Methods inherited from Kontena::Command

banner, callback_matcher, #help_requested?, inherited, #instance, load_subcommand, requires_current_account_token, requires_current_account_token?, requires_current_grid, requires_current_grid?, requires_current_master, requires_current_master?, requires_current_master_token, requires_current_master_token?, #run, #run_callbacks, #verify_current_account_token, #verify_current_grid, #verify_current_master, #verify_current_master_token

Instance Method Details

#clear_terminalObject



89
90
91
# File 'lib/kontena/cli/stacks/monitor_command.rb', line 89

def clear_terminal
  print "\e[H\e[2J"
end

#color_for_service(service) ⇒ Object



70
71
72
73
# 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_mapsObject



75
76
77
# File 'lib/kontena/cli/stacks/monitor_command.rb', line 75

def color_maps
  @color_maps ||= {}
end

#colorsObject



79
80
81
82
83
84
85
86
87
# 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

#executeObject



17
18
19
20
21
22
23
24
# 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) ⇒ Object

Parameters:

  • (Array<Hash>)


27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
# 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