Class: Chef::EventDispatch::Dispatcher
- Defined in:
- lib/chef/event_dispatch/dispatcher.rb
Overview
EventDispatch::Dispatcher
The Dispatcher handles receiving event data from the sources (Chef::Client, Resources and Providers, etc.) and publishing the data to the registered subscribers.
Instance Attribute Summary collapse
-
#subscribers ⇒ Object
readonly
Returns the value of attribute subscribers.
Instance Method Summary collapse
- #call_subscribers(method_name, *args) ⇒ Object private
-
#deprecation(message, location = ) ⇒ Object
Special case deprecation, since it needs to know its caller.
- #enqueue(method_name, *args) ⇒ Object
-
#event_list ⇒ Object
Since the cookbook synchronizer will call this object from threads, we have to deal with concurrent access to this object.
-
#formatter? ⇒ Boolean
private
Check to see if we are dispatching to a formatter.
-
#initialize(*subscribers) ⇒ Dispatcher
constructor
A new instance of Dispatcher.
-
#register(subscriber) ⇒ Object
Add a new subscriber to the list of registered subscribers.
- #unregister(subscriber) ⇒ Object
Methods inherited from Base
#action_collection_registration, #attribute_changed, #attribute_file_load_failed, #attribute_file_loaded, #attribute_load_complete, #attribute_load_start, #compliance_input_enabled, #compliance_input_loaded, #compliance_load_complete, #compliance_load_start, #compliance_profile_enabled, #compliance_profile_loaded, #compliance_waiver_enabled, #compliance_waiver_loaded, #converge_complete, #converge_failed, #converge_start, #cookbook_clean_complete, #cookbook_clean_start, #cookbook_compilation_complete, #cookbook_compilation_start, #cookbook_gem_failed, #cookbook_gem_finished, #cookbook_gem_installing, #cookbook_gem_start, #cookbook_gem_using, #cookbook_resolution_complete, #cookbook_resolution_failed, #cookbook_resolution_start, #cookbook_sync_complete, #cookbook_sync_failed, #cookbook_sync_start, #definition_file_load_failed, #definition_file_loaded, #definition_load_complete, #definition_load_start, #handler_executed, #handlers_completed, #handlers_start, #inputs_load_complete, #inputs_load_start, #key_migration_status, #library_file_load_failed, #library_file_loaded, #library_load_complete, #library_load_start, #lwrp_file_load_failed, #lwrp_file_loaded, #lwrp_load_complete, #lwrp_load_start, #msg, #node_load_completed, #node_load_failed, #node_load_start, #node_load_success, #ohai_completed, #ohai_plugin_file_load_failed, #ohai_plugin_file_loaded, #ohai_plugin_load_complete, #ohai_plugin_load_start, #policyfile_loaded, #profiles_load_complete, #profiles_load_start, #provider_requirement_failed, #recipe_file_load_failed, #recipe_file_loaded, #recipe_load_complete, #recipe_load_start, #recipe_not_found, #registration_completed, #registration_failed, #registration_start, #removed_cookbook_file, #resource_action_start, #resource_after_state_loaded, #resource_bypassed, #resource_completed, #resource_current_state_load_bypassed, #resource_current_state_loaded, #resource_failed, #resource_failed_retriable, #resource_skipped, #resource_up_to_date, #resource_update_applied, #resource_update_progress, #resource_updated, #run_completed, #run_failed, #run_list_expand_failed, #run_list_expanded, #run_start, #run_started, #skipping_registration, #stream_closed, #stream_opened, #stream_output, #synchronized_cookbook, #updated_cookbook_file, #waivers_load_complete, #waivers_load_start, #whyrun_assumption
Constructor Details
#initialize(*subscribers) ⇒ Dispatcher
Returns a new instance of Dispatcher.
14 15 16 |
# File 'lib/chef/event_dispatch/dispatcher.rb', line 14 def initialize(*subscribers) @subscribers = subscribers end |
Instance Attribute Details
#subscribers ⇒ Object (readonly)
Returns the value of attribute subscribers.
12 13 14 |
# File 'lib/chef/event_dispatch/dispatcher.rb', line 12 def subscribers @subscribers end |
Instance Method Details
#call_subscribers(method_name, *args) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 |
# File 'lib/chef/event_dispatch/dispatcher.rb', line 66 def call_subscribers(method_name, *args) @in_call = true subscribers.each do |s| # Skip new/unsupported event names next unless s.respond_to?(method_name) mth = s.method(method_name) # Trim arguments to match what the subscriber expects to allow # adding new arguments without breaking compat. if mth.arity < args.size && mth.arity >= 0 mth.call(*args.take(mth.arity)) else mth.call(*args) end end ensure @in_call = false end |
#deprecation(message, location = ) ⇒ Object
Special case deprecation, since it needs to know its caller
50 51 52 |
# File 'lib/chef/event_dispatch/dispatcher.rb', line 50 def deprecation(, location = caller(2..2)[0]) enqueue(:deprecation, , location) end |
#enqueue(method_name, *args) ⇒ Object
36 37 38 39 |
# File 'lib/chef/event_dispatch/dispatcher.rb', line 36 def enqueue(method_name, *args) event_list << [ method_name, *args ] process_events_until_done unless @in_call end |
#event_list ⇒ Object
Since the cookbook synchronizer will call this object from threads, we have to deal with concurrent access to this object. Since we don’t want threads to handle events from other threads, we just use thread local storage.
23 24 25 |
# File 'lib/chef/event_dispatch/dispatcher.rb', line 23 def event_list Thread.current[:chef_client_event_list] ||= [] end |
#formatter? ⇒ Boolean
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Check to see if we are dispatching to a formatter
56 57 58 |
# File 'lib/chef/event_dispatch/dispatcher.rb', line 56 def formatter? subscribers.any? { |s| s.respond_to?(:is_formatter?) && s.is_formatter? } end |
#register(subscriber) ⇒ Object
Add a new subscriber to the list of registered subscribers
28 29 30 |
# File 'lib/chef/event_dispatch/dispatcher.rb', line 28 def register(subscriber) subscribers << subscriber end |
#unregister(subscriber) ⇒ Object
32 33 34 |
# File 'lib/chef/event_dispatch/dispatcher.rb', line 32 def unregister(subscriber) subscribers.reject! { |x| x == subscriber } end |