summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarkus Roberts <Markus@reality.com>2010-10-22 07:09:30 -0700
committerNick Lewis <nick@puppetlabs.com>2011-04-12 12:47:31 -0700
commite5609ffefb4132049a969d88f74138058fe78694 (patch)
tree8c04fc6413b350214935eeb54a94a9265100c1e2
parent1954bbfe175ae7f18316e57af43362eb4ed73553 (diff)
downloadpuppet-e5609ffefb4132049a969d88f74138058fe78694.tar.gz
puppet-e5609ffefb4132049a969d88f74138058fe78694.tar.xz
puppet-e5609ffefb4132049a969d88f74138058fe78694.zip
Step towards #5027 -- add Logging#deprication_warning facility
This commit adds a method analogous to Puppet.warn which 1) only logs each message the first time it is received and 2) only logs the first 100 messages it receives. Messages are logged via warn. This could easily be made more flexible by making the hard limit and effective log level user settable, if desired.
-rw-r--r--lib/puppet/util/logging.rb11
-rwxr-xr-xspec/unit/util/logging_spec.rb25
2 files changed, 36 insertions, 0 deletions
diff --git a/lib/puppet/util/logging.rb b/lib/puppet/util/logging.rb
index bc52b17f0..b6845b8fa 100644
--- a/lib/puppet/util/logging.rb
+++ b/lib/puppet/util/logging.rb
@@ -15,6 +15,17 @@ module Puppet::Util::Logging
end
end
+ def deprication_warning(message)
+ $deprication_warnings ||= Hash.new(0)
+ if $deprication_warnings.length < 100 and ($deprication_warnings[message] += 1) == 1
+ warn message
+ end
+ end
+
+ def clear_deprication_warnings
+ $deprication_warnings.clear if $deprication_warnings
+ end
+
private
def is_resource?
diff --git a/spec/unit/util/logging_spec.rb b/spec/unit/util/logging_spec.rb
index edc88f115..1585c3e64 100755
--- a/spec/unit/util/logging_spec.rb
+++ b/spec/unit/util/logging_spec.rb
@@ -92,4 +92,29 @@ describe Puppet::Util::Logging do
end
end
end
+
+ describe "when sending a deprication warning" do
+ before do
+ @logger.clear_deprication_warnings
+ end
+
+ it "should the message with warn" do
+ @logger.expects(:warn).with('foo')
+ @logger.deprication_warning 'foo'
+ end
+
+ it "should only log each unique message once" do
+ @logger.expects(:warn).with('foo').once
+ 5.times { @logger.deprication_warning 'foo' }
+ end
+
+ it "should only log the first 100 messages" do
+ (1..100).each { |i|
+ @logger.expects(:warn).with(i).once
+ @logger.deprication_warning i
+ }
+ @logger.expects(:warn).with(101).never
+ @logger.deprication_warning 101
+ end
+ end
end