class Karafka::Instrumentation::Monitor

Monitor is used to hookup external monitoring services to monitor how Karafka works It provides a standardized API for checking incoming messages/enqueueing etc Since it is a pub-sub based on dry-monitor, you can use as many subscribers/loggers at the same time, which means that you might have for example file logging and NewRelic at the same time @note This class acts as a singleton because we are only permitted to have single monitor

per running process (just as logger)

Constants

BASE_EVENTS

List of events that we support in the system and to which a monitor client can hook up @note The non-error once support timestamp benchmarking @note Depending on Karafka extensions and additional engines, this might not be the

complete list of all the events. Please use the #available_events on fully loaded
Karafka system to determine all of the events you can use.
Last 4 events are from WaterDrop but for convenience we use the same monitor for the
whole karafka ecosystem

Public Class Methods

new() click to toggle source

@return [Karafka::Instrumentation::Monitor] monitor instance for system instrumentation

Calls superclass method
# File lib/karafka/instrumentation/monitor.rb, line 49
def initialize
  super(:karafka)
  BASE_EVENTS.each(&method(:register_event))
end

Public Instance Methods

available_events() click to toggle source

@return [Array<String>] names of available events to which we can subscribe

# File lib/karafka/instrumentation/monitor.rb, line 65
def available_events
  __bus__.events.keys
end
subscribe(event_name_or_listener) click to toggle source

Allows us to subscribe to events with a code that will be yielded upon events @param event_name_or_listener [String, Object] name of the event we want to subscribe to

or a listener if we decide to go with object listener
Calls superclass method
# File lib/karafka/instrumentation/monitor.rb, line 57
def subscribe(event_name_or_listener)
  return super unless event_name_or_listener.is_a?(String)
  return super if available_events.include?(event_name_or_listener)

  raise Errors::UnregisteredMonitorEventError, event_name_or_listener
end