Class: Karafka::Web::Tracking::Consumers::Listeners::Errors

Inherits:
Base
  • Object
show all
Includes:
Helpers::ErrorInfo
Defined in:
lib/karafka/web/tracking/consumers/listeners/errors.rb

Overview

Listener related to tracking errors, DLQs, and retries metrics for the Web UI

Instance Method Summary collapse

Methods included from Helpers::ErrorInfo

#extract_error_info, #extract_error_message

Instance Method Details

#on_consumer_consuming_retry(_event) ⇒ Object

Count retries

Parameters:

  • _event (Karafka::Core::Monitoring::Event)


66
67
68
69
70
# File 'lib/karafka/web/tracking/consumers/listeners/errors.rb', line 66

def on_consumer_consuming_retry(_event)
  track do |sampler|
    sampler.counters[:retries] += 1
  end
end

#on_dead_letter_queue_dispatched(_event) ⇒ Object

Count dead letter queue messages dispatches

Parameters:

  • _event (Karafka::Core::Monitoring::Event)


57
58
59
60
61
# File 'lib/karafka/web/tracking/consumers/listeners/errors.rb', line 57

def on_dead_letter_queue_dispatched(_event)
  track do |sampler|
    sampler.counters[:dead] += 1
  end
end

#on_error_occurred(event) ⇒ Object

Collects errors info and counts errors

Parameters:

  • event (Karafka::Core::Monitoring::Event)


20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
# File 'lib/karafka/web/tracking/consumers/listeners/errors.rb', line 20

def on_error_occurred(event)
  caller_ref = event[:caller]

  # Collect extra info if it was a consumer related error.
  # Those come from user code
  details = case caller_ref
            when Karafka::BaseConsumer
              extract_consumer_info(caller_ref)
            when Karafka::Connection::Client
              extract_client_info(caller_ref)
            when Karafka::Connection::Listener
              extract_listener_info(caller_ref)
            else
              {}
            end

  error_class, error_message, backtrace = extract_error_info(event[:error])

  track do |sampler|
    sampler.errors << {
      schema_version: SCHEMA_VERSION,
      type: event[:type],
      error_class: error_class,
      error_message: error_message,
      backtrace: backtrace,
      details: details,
      occurred_at: float_now,
      process: sampler.to_report[:process].slice(:id, :tags)
    }

    sampler.counters[:errors] += 1
  end
end