Module: Julewire::Karafka::EventSeverity

Defined in:
lib/julewire/karafka/event_severity.rb

Constant Summary collapse

FATAL_ERROR_TYPES =
%w[
  runner.call.error
  swarm.supervisor.error
  worker.process.error
].freeze
DEBUG_CONSUMER_EVENTS =
%w[
  connection.listener.fetch_loop
  statistics.emitted
  swarm.manager.control
].freeze
ERROR_CONSUMER_EVENTS =
%w[
  swarm.manager.stopping
  swarm.manager.terminating
].freeze
DEBUG_PRODUCER_EVENTS =
%w[
  oauthbearer.token_refresh
  statistics.emitted
].freeze

Class Method Summary collapse

Class Method Details

.collection_count(value) ⇒ Object



90
91
92
93
94
95
# File 'lib/julewire/karafka/event_severity.rb', line 90

def collection_count(value)
  count = Core::Integration::Values::Read.hash_value(value, :count, default: Core::UNSET)
  return count unless count.equal?(Core::UNSET)

  value.size if value.respond_to?(:size)
end

.consumer(name, event:, payload:) ⇒ Object



29
30
31
# File 'lib/julewire/karafka/event_severity.rb', line 29

def consumer(name, event:, payload:)
  payload_severity(payload) || default_consumer_severity(name.to_s, event, payload)
end

.default_consumer_severity(name, event, payload) ⇒ Object



44
45
46
47
48
49
50
51
52
# File 'lib/julewire/karafka/event_severity.rb', line 44

def default_consumer_severity(name, event, payload)
  return error_severity(event, payload) if name == "error.occurred"
  return fetch_loop_received_severity(event, payload) if name == "connection.listener.fetch_loop.received"
  return notice_signal_severity(event, payload) if name == "process.notice_signal"
  return :error if ERROR_CONSUMER_EVENTS.include?(name)
  return :debug if DEBUG_CONSUMER_EVENTS.include?(name)

  :info
end

.default_producer_severity(name) ⇒ Object



54
55
56
57
58
59
# File 'lib/julewire/karafka/event_severity.rb', line 54

def default_producer_severity(name)
  return :error if name == "error.occurred"
  return :debug if DEBUG_PRODUCER_EVENTS.include?(name)

  :info
end

.error_severity(event, payload) ⇒ Object



61
62
63
64
# File 'lib/julewire/karafka/event_severity.rb', line 61

def error_severity(event, payload)
  type = event_value(event, payload, :type).to_s
  FATAL_ERROR_TYPES.include?(type) ? :fatal : :error
end

.event_value(event, payload, key) ⇒ Object



78
79
80
# File 'lib/julewire/karafka/event_severity.rb', line 78

def event_value(event, payload, key)
  payload_value(payload, key) || raw_event_value(event, key)
end

.fetch_loop_received_severity(event, payload) ⇒ Object



66
67
68
69
70
71
# File 'lib/julewire/karafka/event_severity.rb', line 66

def fetch_loop_received_severity(event, payload)
  messages = event_value(event, payload, :messages_buffer)
  count = collection_count(messages)

  count&.zero? ? :debug : :info
end

.notice_signal_severity(event, payload) ⇒ Object



73
74
75
76
# File 'lib/julewire/karafka/event_severity.rb', line 73

def notice_signal_severity(event, payload)
  signal = event_value(event, payload, :signal).to_s.upcase
  signal.end_with?("TTIN") ? :warn : :info
end

.payload_severity(payload) ⇒ Object



37
38
39
40
41
42
# File 'lib/julewire/karafka/event_severity.rb', line 37

def payload_severity(payload)
  value = payload_value(payload, :severity) || payload_value(payload, :level)
  Core::Records::Severity.normalize(value)
rescue StandardError
  nil
end

.payload_value(payload, key) ⇒ Object



82
83
84
# File 'lib/julewire/karafka/event_severity.rb', line 82

def payload_value(payload, key)
  Core::Integration::Values::Read.value(payload, key)
end

.producer(name, payload) ⇒ Object



33
34
35
# File 'lib/julewire/karafka/event_severity.rb', line 33

def producer(name, payload)
  payload_severity(payload) || default_producer_severity(name.to_s)
end

.raw_event_value(event, key) ⇒ Object



86
87
88
# File 'lib/julewire/karafka/event_severity.rb', line 86

def raw_event_value(event, key)
  Core::Integration::Values::Read.value(EventPayload.event_payload(event), key)
end