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