aboutsummaryrefslogtreecommitdiff
path: root/lib/leap_cli/logger.rb
diff options
context:
space:
mode:
authorelijah <elijah@riseup.net>2013-02-27 23:53:10 -0800
committerelijah <elijah@riseup.net>2013-02-27 23:53:10 -0800
commit56a42b9858058473a07f254c49d0bb00dadce2d9 (patch)
tree834f6371fddc17ccf7c4806a08f298d07f9b2ddf /lib/leap_cli/logger.rb
parent006744350595f89818e23ee77d096adf9b47207b (diff)
downloadleap_cli-56a42b9858058473a07f254c49d0bb00dadce2d9.tar.gz
leap_cli-56a42b9858058473a07f254c49d0bb00dadce2d9.tar.bz2
improve logging: set exit code on puppet error, better puppet error handling, better handling of multi-line puppet log entries.
Diffstat (limited to 'lib/leap_cli/logger.rb')
-rw-r--r--lib/leap_cli/logger.rb47
1 files changed, 30 insertions, 17 deletions
diff --git a/lib/leap_cli/logger.rb b/lib/leap_cli/logger.rb
index eca7aa6..373af35 100644
--- a/lib/leap_cli/logger.rb
+++ b/lib/leap_cli/logger.rb
@@ -44,9 +44,9 @@ module LeapCli
end
def log(level, message, line_prefix=nil, options={})
- # in some cases, when the message doesn't end with a return, we buffer it and
- # wait until we encounter the return before we log the message out.
if message !~ /\n$/ && level <= 2 && line_prefix.is_a?(String)
+ # in some cases, when the message doesn't end with a return, we buffer it and
+ # wait until we encounter the return before we log the message out.
@message_buffer ||= ""
@message_buffer += message
return
@@ -56,26 +56,30 @@ module LeapCli
end
options[:level] ||= level
- message.lines.each do |line|
- [:stdout, :log].each do |mode|
- LeapCli::log_raw(mode) {
- formatted_line, formatted_prefix, line_options = apply_formatting(mode, line, line_prefix, options)
- if line_options[:level] <= self.level && formatted_line && formatted_line.chars.any?
- if formatted_prefix
- "[#{formatted_prefix}] #{formatted_line}"
- else
- formatted_line
- end
- else
- nil
- end
- }
+ [:stdout, :log].each do |mode|
+ LeapCli::log_raw(mode) do
+ message_lines(mode, message, line_prefix, options)
end
end
end
private
+ def message_lines(mode, message, line_prefix, options)
+ formatted_message, formatted_prefix, message_options = apply_formatting(mode, message, line_prefix, options)
+ if message_options[:level] <= self.level && formatted_message && formatted_message.chars.any?
+ if formatted_prefix
+ formatted_message.lines.collect { |line|
+ "[#{formatted_prefix}] #{line.sub(/\s+$/, '')}"
+ }
+ else
+ formatted_message.lines.collect {|line| line.sub(/\s+$/, '')}
+ end
+ else
+ nil
+ end
+ end
+
##
## FORMATTING
##
@@ -114,10 +118,15 @@ module LeapCli
{ :match => /^warning: .*is deprecated.*$/, :level => 2, :color => :yellow, :priority => -10},
{ :match => /^warning: Scope.*$/, :level => 2, :color => :yellow, :priority => -10},
{ :match => /^notice:/, :level => 1, :color => :cyan, :priority => -20},
- { :match => /^err:/, :level => 0, :color => :red, :priority => -20},
{ :match => /^warning:/, :level => 0, :color => :yellow, :priority => -20},
{ :match => /^Duplicate declaration:/, :level => 0, :color => :red, :priority => -20},
{ :match => /Finished catalog run/, :level => 0, :color => :green, :priority => -10},
+
+ # PUPPET FATAL ERRORS
+ { :match => /^err:/, :level => 0, :color => :red, :priority => -1, :exit => 1},
+ { :match => /^Failed to parse template/, :level => 0, :color => :red, :priority => -1, :exit => 1},
+ { :match => /^Parameter matches failed:/, :level => 0, :color => :red, :priority => -1, :exit => 1},
+ { :match => /^Syntax error/, :level => 0, :color => :red, :priority => -1, :exit => 1}
]
def self.sorted_formatters
@@ -164,6 +173,10 @@ module LeapCli
message.replace(message + formatter[:append]) unless formatter[:append].nil?
message.replace(Time.now.strftime('%Y-%m-%d %T') + ' ' + message) if formatter[:timestamp]
+ if formatter[:exit]
+ LeapCli::Util.exit_status(formatter[:exit])
+ end
+
# stop formatting, unless formatter was just for string replacement
break unless formatter[:replace]
end