class Makitzo::Logging::Collector
A logger which collects all log messages and displays a summary by host
Attributes
use_color[RW]
Public Class Methods
new()
click to toggle source
# File lib/makitzo/logging/collector.rb, line 11 def initialize @use_color = true @host = nil @messages = [] @hosts = Hash.new { |h,k| h[k] = {:error => false, :messages => []} } @lock = Mutex.new @silenced = false end
Public Instance Methods
append(*chunks)
click to toggle source
# File lib/makitzo/logging/collector.rb, line 141 def append(*chunks) unless @silenced @lock.synchronize do active_log << chunks.join('').strip end end end
collector?()
click to toggle source
# File lib/makitzo/logging/collector.rb, line 117 def collector? true end
debug(message)
click to toggle source
# File lib/makitzo/logging/collector.rb, line 113 def debug(message) append blue('[DEBUG]', true), ' ', sanitize(message) end
error(message)
click to toggle source
# File lib/makitzo/logging/collector.rb, line 92 def error(message) append red("[ERROR]", true), ' ', red(sanitize(message)) overall_error! if current_host end
info(message)
click to toggle source
# File lib/makitzo/logging/collector.rb, line 109 def info(message) append '[INFO]', ' ', sanitize(message) end
log_command(status, options = {})
click to toggle source
logs a command options - override command line to be logged. useful for masking passwords.
# File lib/makitzo/logging/collector.rb, line 47 def log_command(status, options = {}) command = options[:command] || status.command log_command_line(command, status.success?) log_command_status(status) overall_error! if current_host && !status.success? end
log_command_line(command, success = true)
click to toggle source
# File lib/makitzo/logging/collector.rb, line 56 def log_command_line(command, success = true) if command.is_a?(Net::SSH::Connection::Session::ExecStatus) success = command.success? command = command.command end if success append green("$", true), " ", green(sanitize(command)) else append red("$", true), " ", red(sanitize(command)) end end
log_command_status(result, success = true)
click to toggle source
# File lib/makitzo/logging/collector.rb, line 68 def log_command_status(result, success = true) if result.is_a?(Net::SSH::Connection::Session::ExecStatus) success = result.success? result = (success ? result.stdout : result.stderr).last_line.strip end unless result.empty? if success append green("-", true), " ", green(sanitize(result)) else append red("!", true), " ", red(sanitize(result)) end end end
notice(message)
click to toggle source
# File lib/makitzo/logging/collector.rb, line 101 def notice(message) append cyan("[NOTICE]", true), ' ', sanitize(message) end
overall_error!()
click to toggle source
# File lib/makitzo/logging/collector.rb, line 87 def overall_error! raise "Cannot log host error when no host is set" unless current_host @hosts[current_host.to_s][:error] = true end
overall_success!()
click to toggle source
# File lib/makitzo/logging/collector.rb, line 82 def overall_success! raise "Cannot log host success when no host is set" unless current_host @hosts[current_host.to_s][:error] = false end
result()
click to toggle source
# File lib/makitzo/logging/collector.rb, line 121 def result out = "" @hosts.keys.sort.each do |host_name| host_status = @hosts[host_name] next if host_status[:messages].empty? out << magenta('* ' + host_name, true) << " " << (host_status[:error] ? red('[ERROR]', true) : green('[OK]', true)) << "\n" host_status[:messages].each { |m| out << m.indent(2) << "\n" } out << "\n" end unless @messages.empty? out << magenta("* Global Messages", true) << "\n" @messages.each { |m| out << m.indent(2) << "\n" } out << "\n" end out end
silence() { || ... }
click to toggle source
This method is not threadsafe. So call it before spawning threads.
# File lib/makitzo/logging/collector.rb, line 21 def silence(&block) begin was_silenced = @silenced @silenced = true yield if block_given? ensure @silenced = was_silenced end end
success(message)
click to toggle source
# File lib/makitzo/logging/collector.rb, line 97 def success(message) append green("[OK]", true), ' ', sanitize(message) end
use_color?()
click to toggle source
# File lib/makitzo/logging/collector.rb, line 9 def use_color?; !!@use_color; end
warn(message)
click to toggle source
# File lib/makitzo/logging/collector.rb, line 105 def warn(message) append yellow("[WARNING]", true), ' ', sanitize(message) end
with_host(host) { || ... }
click to toggle source
# File lib/makitzo/logging/collector.rb, line 31 def with_host(host, &block) return unless block_given? begin set_current_host(host) info("host is #{host.address}") yield ensure set_current_host(nil) end nil end
Private Instance Methods
active_log()
click to toggle source
# File lib/makitzo/logging/collector.rb, line 155 def active_log current_host ? @hosts[current_host.to_s][:messages] : @messages end
current_host()
click to toggle source
# File lib/makitzo/logging/collector.rb, line 159 def current_host Thread.current[THREAD_HOST_KEY] end
sanitize(message)
click to toggle source
# File lib/makitzo/logging/collector.rb, line 151 def sanitize(message) message.to_s end
set_current_host(host)
click to toggle source
# File lib/makitzo/logging/collector.rb, line 163 def set_current_host(host) raise "Cannot set host; host already set" if host && current_host Thread.current[THREAD_HOST_KEY] = host end