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.

Reply via email to