Class: Honeybadger::Plugins::RailsBreadcrumbs Private

Inherits:
Object
  • Object
show all
Defined in:
lib/honeybadger/plugins/breadcrumbs.rb

This class is part of a private API. You should avoid using this class if possible, as it may be removed or be changed in the future.

Class Method Summary collapse

Class Method Details

.send_breadcrumb_notification(name, duration, notification_config, data = {}) ⇒ 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.

Used internally for sending out Rails Instrumentation breadcrumbs.

Parameters:

  • name (String)

    The ActiveSupport instrumentation key

  • duration (Number)

    The time spent in the instrumentation event

  • notification_config (Hash)

    The instrumentation event configuration

  • data (Hash) (defaults to: {})

    Custom metadata from the instrumentation event

Options Hash (notification_config):

  • :message (String | Proc)

    A message that describes the event. You can dynamically build the message by passing a proc that accepts the event metadata.

  • :category (Symbol)

    A key to group specific types of events

  • :select_keys (Array)

    A set of keys that filters what data we select from the instrumentation data (optional)

  • :exclude_when (Proc)

    A proc that accepts the data payload. A truthy return value will exclude this event from the payload (optional)

  • :transform (Proc)

    A proc that accepts the data payload. The return value will replace the current data hash (optional)



79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
# File 'lib/honeybadger/plugins/breadcrumbs.rb', line 79

def self.send_breadcrumb_notification(name, duration, notification_config, data = {})
  return if notification_config[:exclude_when]&.call(data)

  message =
    case (m = notification_config[:message])
    when Proc
      m.call(data)
    when String
      m
    else
      name
    end

  data = data.slice(*notification_config[:select_keys]) if notification_config[:select_keys]
  data = notification_config[:transform].call(data) if notification_config[:transform]
  data = data.is_a?(Hash) ? data : {}

  data[:duration] = duration if duration

  Honeybadger.add_breadcrumb(
    message,
    category: notification_config[:category] || :custom,
    metadata: data
  )
end

.subscribe_to_notification(name, notification_config) ⇒ 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.



106
107
108
109
110
111
112
# File 'lib/honeybadger/plugins/breadcrumbs.rb', line 106

def self.subscribe_to_notification(name, notification_config)
  ActiveSupport::Notifications.subscribe(name) do |_, started, finished, _, data|
    duration = finished - started if finished && started

    send_breadcrumb_notification(name, duration, notification_config, data)
  end
end