Class: Central::Cli::Apps::LogsCommand

Inherits:
Clamp::Command
  • Object
show all
Includes:
Common, Common, StackOptions
Defined in:
lib/central/cli/apps/logs_command.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from Common

#app_json, #create_yml, #current_dir, #extend_env_vars, #extend_options, #extend_secrets, #load_services, #normalize_env_vars, #parse_services, #prefixed_name, #require_config_file, #service_exists?, #token, #valid_addons

Methods included from Services::ServicesHelper

#create_service, #delete_service, #deploy_service, #get_service, #int_to_filesize, #parse_image, #parse_links, #parse_log_opts, #parse_memory, #parse_ports, #parse_relative_time, #parse_secrets, #parse_service_id, #restart_service, #scale_service, #show_service, #start_service, #stop_service, #update_service, #wait_for_deploy_to_finish

Methods included from Common

#access_token=, #add_master, #api_url, #api_url=, #clear_current_stack, #client, #current_master, #current_master=, #current_master_index, #current_stack, #current_stack=, #ensure_custom_ssl_ca, #require_api_url, #require_current_stack, #require_token, #reset_client, #save_settings, #settings, #settings_filename

Methods included from StackOptions

included

Instance Attribute Details

#service_prefixObject (readonly)

Returns the value of attribute service_prefix.



16
17
18
# File 'lib/central/cli/apps/logs_command.rb', line 16

def service_prefix
  @service_prefix
end

#servicesObject (readonly)

Returns the value of attribute services.



16
17
18
# File 'lib/central/cli/apps/logs_command.rb', line 16

def services
  @services
end

Instance Method Details

#color_for_container(container_id) ⇒ Object



59
60
61
62
# File 'lib/central/cli/apps/logs_command.rb', line 59

def color_for_container(container_id)
  color_maps[container_id] = colors.shift unless color_maps[container_id]
  color_maps[container_id].to_sym
end

#color_mapsObject



64
65
66
# File 'lib/central/cli/apps/logs_command.rb', line 64

def color_maps
  @color_maps ||= {}
end

#colorsObject



68
69
70
71
72
73
74
# File 'lib/central/cli/apps/logs_command.rb', line 68

def colors
  if @colors.nil? || @colors.size == 0
    @colors = [:green, :magenta, :yellow, :cyan, :red,
               :light_green, :light_yellow, :ligh_magenta, :light_cyan, :light_red]
  end
  @colors
end

#executeObject



18
19
20
21
22
23
24
25
26
27
28
# File 'lib/central/cli/apps/logs_command.rb', line 18

def execute
  require_config_file(filename)

  @service_prefix = project_name || current_dir
  @services = load_services(filename, service_list, service_prefix)
  if services.size > 0
    show_logs(services)
  elsif !service_list.empty?
    puts "No such service: #{service_list.join(', ')}".colorize(:red)
  end
end

#show_logs(services) ⇒ Object



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
# File 'lib/central/cli/apps/logs_command.rb', line 30

def show_logs(services)
  last_id = nil
  loop do
    query_params = []
    query_params << "from=#{last_id}" unless last_id.nil?
    query_params << "limit=#{lines}"
    query_params << "since=#{since}" if !since.nil? && last_id.nil?
    logs = []
    services.each do |service_name, _opts|
      service = begin
                  get_service(token, prefixed_name(service_name))
                rescue
                  false
                end
      result = client(token).get("services/#{service['id']}/container_logs?#{query_params.join('&')}") if service
      logs += result['logs'] if result && result['logs']
    end
    logs.sort! { |x, y| DateTime.parse(x['created_at']) <=> DateTime.parse(y['created_at']) }
    logs.each do |log|
      color = color_for_container(log['name'])
      prefix = "#{log['created_at']} #{log['name']}:".colorize(color)
      puts "#{prefix} #{log['data']}"
      last_id = log['id']
    end
    break unless tail?
    sleep(2)
  end
end