Class: BrainzLab::Rails::Subscriber

Inherits:
Object
  • Object
show all
Defined in:
lib/brainzlab/rails/subscriber.rb

Overview

Central subscriber that hooks into ALL Rails ActiveSupport::Notifications Uses monotonic_subscribe for accurate timing measurements

Constant Summary collapse

RAILS_EVENT_PATTERNS =
[
  # Action Controller
  'start_processing.action_controller',
  'process_action.action_controller',
  'redirect_to.action_controller',
  'halted_callback.action_controller',
  'send_file.action_controller',
  'send_data.action_controller',
  'send_stream.action_controller',
  'unpermitted_parameters.action_controller',
  'rate_limit.action_controller',

  # Action Controller Caching
  'write_fragment.action_controller',
  'read_fragment.action_controller',
  'expire_fragment.action_controller',
  'exist_fragment?.action_controller',

  # Action View
  'render_template.action_view',
  'render_partial.action_view',
  'render_collection.action_view',
  'render_layout.action_view',

  # Action Dispatch
  'process_middleware.action_dispatch',
  'redirect.action_dispatch',
  'request.action_dispatch',

  # Active Record
  'sql.active_record',
  'instantiation.active_record',
  'start_transaction.active_record',
  'transaction.active_record',
  'strict_loading_violation.active_record',

  # Active Job
  'enqueue.active_job',
  'enqueue_at.active_job',
  'enqueue_all.active_job',
  'enqueue_retry.active_job',
  'perform_start.active_job',
  'perform.active_job',
  'retry_stopped.active_job',
  'discard.active_job',

  # Action Cable
  'perform_action.action_cable',
  'transmit.action_cable',
  'transmit_subscription_confirmation.action_cable',
  'transmit_subscription_rejection.action_cable',
  'broadcast.action_cable',

  # Action Mailer
  'deliver.action_mailer',
  'process.action_mailer',

  # Action Mailbox
  'process.action_mailbox',

  # Active Storage
  'service_upload.active_storage',
  'service_streaming_download.active_storage',
  'service_download.active_storage',
  'service_download_chunk.active_storage',
  'service_delete.active_storage',
  'service_delete_prefixed.active_storage',
  'service_exist.active_storage',
  'service_url.active_storage',
  'service_update_metadata.active_storage',
  'preview.active_storage',
  'transform.active_storage',
  'analyze.active_storage',

  # Active Support Cache
  'cache_read.active_support',
  'cache_read_multi.active_support',
  'cache_generate.active_support',
  'cache_fetch_hit.active_support',
  'cache_write.active_support',
  'cache_write_multi.active_support',
  'cache_increment.active_support',
  'cache_decrement.active_support',
  'cache_delete.active_support',
  'cache_delete_multi.active_support',
  'cache_delete_matched.active_support',
  'cache_cleanup.active_support',
  'cache_prune.active_support',
  'cache_exist?.active_support',
  'message_serializer_fallback.active_support',

  # Rails
  'deprecation.rails',

  # Railties
  'load_config_initializer.railties'
].freeze

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(configuration) ⇒ Subscriber

Returns a new instance of Subscriber.



108
109
110
111
112
# File 'lib/brainzlab/rails/subscriber.rb', line 108

def initialize(configuration)
  @configuration = configuration
  @event_router = EventRouter.new(configuration)
  @subscriptions = []
end

Instance Attribute Details

#configurationObject (readonly)

Returns the value of attribute configuration.



106
107
108
# File 'lib/brainzlab/rails/subscriber.rb', line 106

def configuration
  @configuration
end

#event_routerObject (readonly)

Returns the value of attribute event_router.



106
107
108
# File 'lib/brainzlab/rails/subscriber.rb', line 106

def event_router
  @event_router
end

#subscriptionsObject (readonly)

Returns the value of attribute subscriptions.



106
107
108
# File 'lib/brainzlab/rails/subscriber.rb', line 106

def subscriptions
  @subscriptions
end

Instance Method Details

#subscribe_all!Object



114
115
116
117
118
119
120
# File 'lib/brainzlab/rails/subscriber.rb', line 114

def subscribe_all!
  RAILS_EVENT_PATTERNS.each do |event_name|
    subscribe_to(event_name)
  end

  BrainzLab.debug_log("[BrainzLab::Rails] Subscribed to #{@subscriptions.size} events")
end

#unsubscribe_all!Object



122
123
124
125
126
127
# File 'lib/brainzlab/rails/subscriber.rb', line 122

def unsubscribe_all!
  @subscriptions.each do |subscription|
    ActiveSupport::Notifications.unsubscribe(subscription)
  end
  @subscriptions.clear
end