Paired-with: Jesse Wolfe <[email protected]>
Signed-off-by: Paul Berry <[email protected]>
---
Local-branch: ticket/next/5743
lib/puppet/report.rb | 117 +++++++++++++++++++++++++++++-----------
spec/lib/puppet/report_spec.rb | 69 +++++++++++++++++++++++
spec/models/report_spec.rb | 5 +--
3 files changed, 156 insertions(+), 35 deletions(-)
diff --git a/lib/puppet/report.rb b/lib/puppet/report.rb
index 31e94ea..fd284ae 100644
--- a/lib/puppet/report.rb
+++ b/lib/puppet/report.rb
@@ -70,7 +70,7 @@ module Puppet #:nodoc:
end
class Log
- attr_reader :file, :level, :line, :message, :source, :tags, :time,
:version
+ attr_reader :file, :level, :line, :message, :source, :tags, :time
def to_hash
{
@@ -80,8 +80,7 @@ module Puppet #:nodoc:
"message" => message,
"source" => source,
"tags" => tags,
- "time" => time,
- "version" => version
+ "time" => time
}
end
end
@@ -89,6 +88,27 @@ module Puppet #:nodoc:
module Resource
class Status
+ attr_reader :source_description, :evaluation_time, :resource, :tags,
+ :file, :events, :time, :line, :changed, :change_count,
+ :out_of_sync
+
+ def to_hash
+ resource =~ /^(.+?)\[(.+)\]$/
+ resource_type, title = $1, $2
+ {
+ "resource_type" => resource_type,
+ "title" => title,
+ "evaluation_time" => evaluation_time,
+ "file" => file,
+ "line" => line,
+ "source_description" => source_description,
+ "tags" => tags,
+ "time" => time,
+ "change_count" => change_count || 0,
+ "out_of_sync" => out_of_sync,
+ "events" => events.map(&:to_hash)
+ }
+ end
end
end
end
@@ -96,27 +116,44 @@ end
module ReportExtensions #:nodoc:
def self.extended(obj)
case
+ when obj.instance_variables.include?('@report_format')
+ obj.extend ReportFormat2::Report
when obj.instance_variables.include?("@resource_statuses")
- obj.extend Puppet26::Report
+ obj.extend ReportFormat1::Report
else
- obj.extend Puppet25::Report
+ obj.extend ReportFormat0::Report
end
end
- module Puppet25
+ module ReportFormat0
module Report
+ def self.extended(obj)
+ obj.logs.each{|log| log.extend ReportFormat0::Util::Log} if
obj.logs.respond_to?(:each)
+ end
+
def report_format
0
end
end
+
+ module Util
+ module Log
+ attr_reader :version
+
+ def to_hash
+ hash = super
+ hash["version"] = version
+ hash
+ end
+ end
+ end
end
- module Puppet26
+ module ReportFormat1
module Report
def self.extended(obj)
- obj.logs.each{|log| log.extend Puppet26::Util::Log} if
obj.logs.respond_to?(:each)
- obj.metrics.each{|_, metric| metric.extend Puppet26::Util::Metric} if
obj.metrics.respond_to?(:each)
- obj.resource_statuses.each{|_, status| status.extend
Puppet26::Resource::Status} if obj.resource_statuses.respond_to?(:each)
+ obj.logs.each{|log| log.extend ReportFormat1::Util::Log} if
obj.logs.respond_to?(:each)
+ obj.resource_statuses.each{|_, status| status.extend
ReportFormat1::Resource::Status} if obj.resource_statuses.respond_to?(:each)
end
# Attributes in 2.6.x but not 0.25.x
@@ -138,36 +175,54 @@ module ReportExtensions #:nodoc:
module Resource
module Status
- attr_reader :source_description, :evaluation_time, :resource, :tags,
- :file, :events, :time, :line, :version, :changed, :change_count,
- :out_of_sync
+ attr_reader :version
def to_hash
- resource =~ /^(.+?)\[(.+)\]$/
- resource_type, title = $1, $2
- {
- "resource_type" => resource_type,
- "title" => title,
- "evaluation_time" => evaluation_time,
- "file" => file,
- "line" => line,
- "source_description" => source_description,
- "tags" => tags,
- "time" => time,
- "change_count" => change_count || 0,
- "out_of_sync" => out_of_sync,
- "events" => events.map(&:to_hash),
- "version" => version
- }
+ hash = super
+ hash["version"] = version
+ hash
end
end
end
module Util
- module Metric
+ module Log
+ attr_reader :version
+
+ def to_hash
+ hash = super
+ hash["version"] = version
+ hash
+ end
end
+ end
+ end
- module Log
+ module ReportFormat2
+ module Report
+ attr_reader :report_format
+
+ def self.extended(obj)
+ obj.resource_statuses.each{|_, status| status.extend
ReportFormat2::Resource::Status} if obj.resource_statuses.respond_to?(:each)
+ end
+
+ attr_reader :resource_statuses, :kind, :puppet_version,
:configuration_version
+
+ def to_hash
+ hash = super
+ hash["resource_statuses"] = {}
+ resource_statuses.each do |key, value|
+ hash["resource_statuses"][key] = value.to_hash
+ end
+ hash["kind"] = kind
+ hash["puppet_version"] = puppet_version
+ hash["configuration_version"] = configuration_version
+ hash
+ end
+ end
+
+ module Resource
+ module Status
end
end
end
diff --git a/spec/lib/puppet/report_spec.rb b/spec/lib/puppet/report_spec.rb
index f7c1ab6..b9309c5 100644
--- a/spec/lib/puppet/report_spec.rb
+++ b/spec/lib/puppet/report_spec.rb
@@ -387,5 +387,74 @@ describe Puppet::Transaction::Report do
}
end
end
+
+ describe "for a format 2 report" do
+ before do
+ report_yaml = <<HEREDOC
+--- !ruby/object:Puppet::Transaction::Report
+ host: localhost
+ time: 2010-07-22 12:19:47.204207 -07:00
+ logs: []
+ metrics:
+ time: !ruby/object:Puppet::Util::Metric
+ name: time
+ label: Time
+ values:
+ - - config_retrieval
+ - Config retrieval
+ - 0.25
+ - - total
+ - Total
+ - 0.5
+ resources: !ruby/object:Puppet::Util::Metric
+ name: resources
+ label: Resources
+ values:
+ - - failed
+ - Failed
+ - 1
+ - - out_of_sync
+ - Out of sync
+ - 2
+ - - changed
+ - Changed
+ - 3
+ - - total
+ - Total
+ - 4
+ events: !ruby/object:Puppet::Util::Metric
+ name: events
+ label: Events
+ values:
+ - - total
+ - Total
+ - 0
+ changes: !ruby/object:Puppet::Util::Metric
+ name: changes
+ label: Changes
+ values:
+ - - total
+ - Total
+ - 0
+ resource_statuses: {}
+ configuration_version: 12345
+ report_format: 2
+ puppet_version: 2.6.5
+ kind: apply
+ status: unchanged
+HEREDOC
+ @report = YAML.load(report_yaml)
+ @report.extend(ReportExtensions)
+ end
+
+ it "should produce a hash of the report" do
+ hash = @report.to_hash
+ hash.should be_a(Hash)
+ hash.keys.should =~ %w{host time logs metrics resource_statuses kind
configuration_version puppet_version report_format}
+ hash["report_format"].should == 2
+ hash["host"].should == "localhost"
+ hash["time"].should == Time.parse("2010-07-22 12:19:47.204207 -07:00")
+ end
+ end
end
end
diff --git a/spec/models/report_spec.rb b/spec/models/report_spec.rb
index a2b21f4..b4b7e17 100644
--- a/spec/models/report_spec.rb
+++ b/spec/models/report_spec.rb
@@ -126,6 +126,7 @@ describe Report do
def generate_report(time, file_ensure, file_content, resource_name =
"/tmp/foo")
report_yaml = <<-HEREDOC
--- !ruby/object:Puppet::Transaction::Report
+ report_format: 2
host: mattmac.puppetlabs.lan
kind: inspect
logs: []
@@ -143,7 +144,6 @@ describe Report do
- default
- &id003 class
time: 2010-07-22 14:42:39.654436 -04:00
- version: 1291407517
events:
- !ruby/object:Puppet::Transaction::Event
default_log_level: !ruby/sym notice
@@ -158,7 +158,6 @@ describe Report do
- *id002
- *id003
time: 2010-12-03 12:18:40.039434 -08:00
- version: 1291407517
HEREDOC
if file_content
report_yaml << <<-HEREDOC
@@ -175,7 +174,6 @@ HEREDOC
- *id002
- *id003
time: 2010-12-03 12:08:59.061376 -08:00
- version: 1291406846
HEREDOC
end
report_yaml << " time: #{time}\n"
@@ -233,7 +231,6 @@ HEREDOC
describe ".inspections" do
it "should include inspect reports" do
- pending # This test is using a version 1 inspect report, which should
never happen.
@report = generate_report(Time.now, "file", "foo")
@report.save!
Report.inspections.should == [...@report]
--
1.7.2
--
You received this message because you are subscribed to the Google Groups
"Puppet Developers" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/puppet-dev?hl=en.