class DeisInteractive::Rails::Logs

Attributes

count[R]
follow[R]
outputs[R]
pids[R]

Public Class Methods

new(app, process, follow: false, count: nil) click to toggle source
Calls superclass method DeisInteractive::Rails::Base::new
# File lib/deis-interactive/rails/logs.rb, line 14
def initialize(app, process, follow: false, count: nil)
  super(app, process)
  @follow = follow
  @pids = Concurrent::Array.new
  @outputs = Concurrent::Array.new
  @count = count || 20

  at_exit do
    pids.each do |pid|
      Process.kill("KILL", pid) if pid_alive?(pid)
    end
  end
end

Public Instance Methods

any_pid_alive?() click to toggle source
# File lib/deis-interactive/rails/logs.rb, line 47
def any_pid_alive?
  20.times {
    break if pids.count > 0
    sleep 0.1
  }

  return false if pids.count == 0
  pids.any? { |pid| pid_alive?(pid) }
end
follow_option() click to toggle source
# File lib/deis-interactive/rails/logs.rb, line 57
def follow_option
  if follow
    "-f"
  end
end
log_pod(pod_id) click to toggle source
# File lib/deis-interactive/rails/logs.rb, line 80
def log_pod(pod_id)
  Thread.new do
    cmd = "kubectl logs #{follow_option} --tail #{count} #{pod_id} --namespace #{app}"
    Open3.popen2e(cmd) do |_, out_err, wait_thr|
      pids << wait_thr.pid
      out_err.each { |line| outputs << line }
    end
  end
end
log_pods() click to toggle source
# File lib/deis-interactive/rails/logs.rb, line 63
def log_pods
  pod_ids.each do |pod_id|
    log_pod(pod_id)
  end

  loop do
    while (outputs.count > 0)
      puts outputs.shift
    end
    if any_pid_alive?
      sleep 0.01
    else
      break
    end
  end
end
perform() click to toggle source
# File lib/deis-interactive/rails/logs.rb, line 28
def perform
  if process.nil?
    puts "Logging on all pods"
  else
    puts "Logging on pod of process #{process}"
  end

  log_pods
end
pid_alive?(pid) click to toggle source
# File lib/deis-interactive/rails/logs.rb, line 38
def pid_alive?(pid)
  begin
    Process.getpgid( pid )
    true
  rescue Errno::ESRCH
    false
  end
end