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)


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

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)


50
51
52
53
54
# File 'lib/karafka/web/tracking/consumers/listeners/errors.rb', line 50

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
# File 'lib/karafka/web/tracking/consumers/listeners/errors.rb', line 20

def on_error_occurred(event)
  track do |sampler|
    # Collect extra info if it was a consumer related error.
    # Those come from user code
    details = if event[:caller].is_a?(Karafka::BaseConsumer)
                extract_consumer_info(event[:caller])
              else
                {}
              end

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

    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(:name, :tags)
    }

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