Class: Chef::DataCollector::ResourceReport
- Inherits:
-
Object
- Object
- Chef::DataCollector::ResourceReport
- Defined in:
- lib/chef/data_collector/resource_report.rb
Instance Attribute Summary collapse
-
#action ⇒ Object
readonly
Returns the value of attribute action.
-
#conditional ⇒ Object
Returns the value of attribute conditional.
-
#current_resource ⇒ Object
Returns the value of attribute current_resource.
-
#elapsed_time ⇒ Object
readonly
Returns the value of attribute elapsed_time.
-
#exception ⇒ Object
Returns the value of attribute exception.
-
#new_resource ⇒ Object
readonly
Returns the value of attribute new_resource.
-
#status ⇒ Object
readonly
Returns the value of attribute status.
Instance Method Summary collapse
- #current_resource_state_reporter ⇒ Object
- #elapsed_time_in_milliseconds ⇒ Object
- #failed(exception) ⇒ Object
- #finish ⇒ Object
-
#initialize(new_resource, action, current_resource = nil) ⇒ ResourceReport
constructor
A new instance of ResourceReport.
- #new_resource_state_reporter ⇒ Object
- #potentially_changed? ⇒ Boolean
-
#resource_identity ⇒ Object
We should be able to call the identity of a resource safely, but there is an edge case where resources that have a lazy property that is both the name_property and the identity property, it will thow a validation exception causing the chef-client run to fail.
- #skipped(conditional) ⇒ Object
- #to_hash ⇒ Object (also: #to_h, #for_json)
- #up_to_date ⇒ Object
- #updated ⇒ Object
Constructor Details
#initialize(new_resource, action, current_resource = nil) ⇒ ResourceReport
Returns a new instance of ResourceReport.
30 31 32 33 34 35 |
# File 'lib/chef/data_collector/resource_report.rb', line 30 def initialize(new_resource, action, current_resource = nil) @new_resource = new_resource @action = action @current_resource = current_resource @status = "unprocessed" end |
Instance Attribute Details
#action ⇒ Object (readonly)
Returns the value of attribute action.
27 28 29 |
# File 'lib/chef/data_collector/resource_report.rb', line 27 def action @action end |
#conditional ⇒ Object
Returns the value of attribute conditional.
28 29 30 |
# File 'lib/chef/data_collector/resource_report.rb', line 28 def conditional @conditional end |
#current_resource ⇒ Object
Returns the value of attribute current_resource.
28 29 30 |
# File 'lib/chef/data_collector/resource_report.rb', line 28 def current_resource @current_resource end |
#elapsed_time ⇒ Object (readonly)
Returns the value of attribute elapsed_time.
27 28 29 |
# File 'lib/chef/data_collector/resource_report.rb', line 27 def elapsed_time @elapsed_time end |
#exception ⇒ Object
Returns the value of attribute exception.
28 29 30 |
# File 'lib/chef/data_collector/resource_report.rb', line 28 def exception @exception end |
#new_resource ⇒ Object (readonly)
Returns the value of attribute new_resource.
27 28 29 |
# File 'lib/chef/data_collector/resource_report.rb', line 27 def new_resource @new_resource end |
#status ⇒ Object (readonly)
Returns the value of attribute status.
27 28 29 |
# File 'lib/chef/data_collector/resource_report.rb', line 27 def status @status end |
Instance Method Details
#current_resource_state_reporter ⇒ Object
116 117 118 119 120 |
# File 'lib/chef/data_collector/resource_report.rb', line 116 def current_resource_state_reporter current_resource ? current_resource.state_for_resource_reporter : {} rescue {} end |
#elapsed_time_in_milliseconds ⇒ Object
60 61 62 |
# File 'lib/chef/data_collector/resource_report.rb', line 60 def elapsed_time_in_milliseconds elapsed_time.nil? ? nil : (elapsed_time * 1000).to_i end |
#failed(exception) ⇒ Object
46 47 48 49 50 |
# File 'lib/chef/data_collector/resource_report.rb', line 46 def failed(exception) @current_resource = nil @status = "failed" @exception = exception end |
#finish ⇒ Object
56 57 58 |
# File 'lib/chef/data_collector/resource_report.rb', line 56 def finish @elapsed_time = new_resource.elapsed_time end |
#new_resource_state_reporter ⇒ Object
110 111 112 113 114 |
# File 'lib/chef/data_collector/resource_report.rb', line 110 def new_resource_state_reporter new_resource.state_for_resource_reporter rescue {} end |
#potentially_changed? ⇒ Boolean
64 65 66 |
# File 'lib/chef/data_collector/resource_report.rb', line 64 def potentially_changed? %w{updated failed}.include?(status) end |
#resource_identity ⇒ Object
We should be able to call the identity of a resource safely, but there is an edge case where resources that have a lazy property that is both the name_property and the identity property, it will thow a validation exception causing the chef-client run to fail. We are not fixing this case since Chef is actually doing the right thing but we are making the ResourceReporter smarter so that it detects the failure and sends a message to the data collector containing a static resource identity since we were unable to generate a proper one.
104 105 106 107 108 |
# File 'lib/chef/data_collector/resource_report.rb', line 104 def resource_identity new_resource.identity.to_s rescue => e "unknown identity (due to #{e.class})" end |
#skipped(conditional) ⇒ Object
37 38 39 40 |
# File 'lib/chef/data_collector/resource_report.rb', line 37 def skipped(conditional) @status = "skipped" @conditional = conditional end |
#to_hash ⇒ Object Also known as: to_h, for_json
68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 |
# File 'lib/chef/data_collector/resource_report.rb', line 68 def to_hash hash = { "type" => new_resource.resource_name.to_sym, "name" => new_resource.name.to_s, "id" => resource_identity, "after" => new_resource_state_reporter, "before" => current_resource_state_reporter, "duration" => elapsed_time_in_milliseconds.to_s, "delta" => new_resource.respond_to?(:diff) && potentially_changed? ? new_resource.diff : "", "ignore_failure" => new_resource.ignore_failure, "result" => action.to_s, "status" => status, } if new_resource.cookbook_name hash["cookbook_name"] = new_resource.cookbook_name hash["cookbook_version"] = new_resource.cookbook_version.version hash["recipe_name"] = new_resource.recipe_name end hash["conditional"] = conditional.to_text if status == "skipped" hash["error_message"] = exception. unless exception.nil? hash end |
#up_to_date ⇒ Object
52 53 54 |
# File 'lib/chef/data_collector/resource_report.rb', line 52 def up_to_date @status = "up-to-date" end |
#updated ⇒ Object
42 43 44 |
# File 'lib/chef/data_collector/resource_report.rb', line 42 def updated @status = "updated" end |