Class: Chef::EventDispatch::Dispatcher

Inherits:
Base
  • Object
show all
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

Instance Method Summary collapse

Methods inherited from Base

#attribute_changed, #attribute_file_load_failed, #attribute_file_loaded, #attribute_load_complete, #attribute_load_start, #audit_phase_complete, #audit_phase_failed, #audit_phase_start, #control_example_failure, #control_example_success, #control_group_started, #converge_complete, #converge_failed, #converge_start, #cookbook_clean_complete, #cookbook_clean_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, #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, #ohai_completed, #ohai_plugin_file_load_failed, #ohai_plugin_file_loaded, #ohai_plugin_load_complete, #ohai_plugin_load_start, #policyfile_loaded, #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_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, #whyrun_assumption

Constructor Details

#initialize(*subscribers) ⇒ Dispatcher



14
15
16
# File 'lib/chef/event_dispatch/dispatcher.rb', line 14

def initialize(*subscribers)
  @subscribers = subscribers
end

Instance Attribute Details

#subscribersObject (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

All messages are unconditionally forwarded to all subscribers, so just define the forwarding in one go:



33
34
35
36
37
38
39
40
41
42
43
44
45
46
# File 'lib/chef/event_dispatch/dispatcher.rb', line 33

def call_subscribers(method_name, *args)
  @subscribers.each do |s|
    # Skip new/unsupported event names.
    next if !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
end

#deprecation(message, location = caller(2..2)[0]) ⇒ Object

Special case deprecation, since it needs to know its caller



57
58
59
# File 'lib/chef/event_dispatch/dispatcher.rb', line 57

def deprecation(message, location = caller(2..2)[0])
  call_subscribers(:deprecation, message, location)
end

#formatter?Boolean

Check to see if we are dispatching to a formatter



24
25
26
# File 'lib/chef/event_dispatch/dispatcher.rb', line 24

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



19
20
21
# File 'lib/chef/event_dispatch/dispatcher.rb', line 19

def register(subscriber)
  @subscribers << subscriber
end