diff options
author | tyler-ball <tyleraball@gmail.com> | 2014-12-02 16:09:35 -0800 |
---|---|---|
committer | tyler-ball <tyleraball@gmail.com> | 2014-12-05 15:02:31 -0800 |
commit | cc2bc9de61abee834179705f6437a359b5735ee7 (patch) | |
tree | e167ce0448170128967104c6dc6df3dbf051ae03 | |
parent | be6b4a13edf7442ecca13a14bafc6fd594b85a02 (diff) | |
download | chef-cc2bc9de61abee834179705f6437a359b5735ee7.tar.gz |
Adding cookbook and recipe information per analytics request
-rw-r--r-- | lib/chef/audit/audit_reporter.rb | 7 | ||||
-rw-r--r-- | lib/chef/audit/control_group_data.rb | 30 | ||||
-rw-r--r-- | lib/chef/audit/runner.rb | 2 | ||||
-rw-r--r-- | lib/chef/dsl/audit.rb | 12 |
4 files changed, 31 insertions, 20 deletions
diff --git a/lib/chef/audit/audit_reporter.rb b/lib/chef/audit/audit_reporter.rb index 21ffb62829..9e3168cbc1 100644 --- a/lib/chef/audit/audit_reporter.rb +++ b/lib/chef/audit/audit_reporter.rb @@ -36,6 +36,10 @@ class Chef @ordered_control_groups = Hash.new end + def run_context + run_status.run_context + end + def audit_phase_start(run_status) Chef::Log.debug("Audit Reporter starting") @audit_data = AuditData.new(run_status.node.name, run_status.run_id) @@ -71,7 +75,8 @@ class Chef if ordered_control_groups.has_key?(name) raise Chef::Exceptions::AuditControlGroupDuplicate.new(name) end - ordered_control_groups.store(name, ControlGroupData.new(name)) + metadata = run_context.controls[name].metadata + ordered_control_groups.store(name, ControlGroupData.new(name, metadata)) end def control_example_success(control_group_name, example_data) diff --git a/lib/chef/audit/control_group_data.rb b/lib/chef/audit/control_group_data.rb index 969d128c1b..a15127f0c7 100644 --- a/lib/chef/audit/control_group_data.rb +++ b/lib/chef/audit/control_group_data.rb @@ -28,14 +28,15 @@ class Chef end class ControlGroupData - attr_reader :name, :status, :number_succeeded, :number_failed, :controls + attr_reader :name, :status, :number_succeeded, :number_failed, :controls, :metadata - def initialize(name) + def initialize(name, metadata={}) @status = "success" @controls = [] @number_succeeded = 0 @number_failed = 0 @name = name + @metadata = metadata end @@ -68,20 +69,17 @@ class Chef :number_failed => number_failed, :controls => controls.collect { |c| c.to_hash } } - add_display_only_data(h) + h = add_display_only_data(h) + metadata.each do |k, v| + h[k] = v + end + h end private def create_control(control_data) - name = control_data[:name] - resource_type = control_data[:resource_type] - resource_name = control_data[:resource_name] - context = control_data[:context] - line_number = control_data[:line_number] - # TODO make this smarter with splat arguments so if we start passing in more control_data - # I don't have to modify code in multiple places - ControlData.new(name, resource_type, resource_name, context, line_number) + ControlData.new(control_data) end # The id and control sequence number are ephemeral data - they are not needed @@ -103,12 +101,10 @@ class Chef attr_reader :name, :resource_type, :resource_name, :context, :line_number attr_accessor :status, :details - def initialize(name, resource_type, resource_name, context, line_number) - @context = context - @name = name - @resource_type = resource_type - @resource_name = resource_name - @line_number = line_number + def initialize(control_data={}) + control_data.each do |k, v| + self.instance_variable_set("@#{k}", v) + end end def to_hash diff --git a/lib/chef/audit/runner.rb b/lib/chef/audit/runner.rb index 306212989a..51c007d1d0 100644 --- a/lib/chef/audit/runner.rb +++ b/lib/chef/audit/runner.rb @@ -142,7 +142,7 @@ class Chef def register_controls add_example_group_methods run_context.audits.each do |name, group| - ctl_grp = RSpec::Core::ExampleGroup.__controls__(*group[:args], &group[:block]) + ctl_grp = RSpec::Core::ExampleGroup.__controls__(*group.args, &group.block) RSpec.world.register(ctl_grp) end end diff --git a/lib/chef/dsl/audit.rb b/lib/chef/dsl/audit.rb index a11d9039ef..bca9a23c9c 100644 --- a/lib/chef/dsl/audit.rb +++ b/lib/chef/dsl/audit.rb @@ -22,6 +22,8 @@ class Chef module DSL module Audit + ControlData = Struct.new("ControlData", :args, :block, :metadata) + # Can encompass tests in a `control` block or `describe` block # Adds the controls group and block (containing controls to execute) to the runner's list of pending examples def controls(*args, &block) @@ -34,7 +36,15 @@ class Chef raise Chef::Exceptions::AuditControlGroupDuplicate.new(name) end - run_context.audits[name] = { :args => args, :block => block } + cookbook_name = self.cookbook_name + metadata = { + cookbook_name: cookbook_name, + cookbook_version: self.run_context.cookbook_collection[cookbook_name].version, + recipe_name: self.recipe_name, + line_number: block.source_location[1] + } + + run_context.audits[name] = ControlData.new(args, block, metadata) end end |