Sha256: 8446a62be6cb36f5632417b96495b7c8d7c98efaac17b65f1baf1003ce0e9294

Contents?: true

Size: 1.91 KB

Versions: 19

Compression:

Stored size: 1.91 KB

Contents

# frozen_string_literal: true

module Karafka
  module Web
    module Tracking
      module Producers
        module Listeners
          # Listener for tracking producers published errors
          class Errors < Base
            include Tracking::Helpers::ErrorInfo

            # Schema used by producers error reporting
            SCHEMA_VERSION = '1.0.0'

            private_constant :SCHEMA_VERSION

            # Tracks any producer related errors
            #
            # @param event [Karafka::Core::Monitoring::Event]
            def on_error_occurred(event)
              track do |sampler|
                sampler.errors << build_error_details(event)
              end
            end

            private

            # @param event [Karafka::Core::Monitoring::Event]
            # @return [Hash] hash with error data for the sampler
            def build_error_details(event)
              type = event[:type]

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

              {
                schema_version: SCHEMA_VERSION,
                producer_id: event[:producer_id],
                type: type,
                error_class: error_class,
                error_message: error_message,
                backtrace: backtrace,
                details: build_details(type, event.payload),
                occurred_at: float_now,
                process: {
                  name: sampler.process_name
                }
              }
            end

            # @param type [String] error type
            # @param payload [Hash] error payload
            # @return [Hash] hash with details
            def build_details(type, payload)
              case type
              when 'librdkafka.dispatch_error'
                payload.slice(:topic, :partition, :offset)
              else
                {}
              end
            end
          end
        end
      end
    end
  end
end

Version data entries

19 entries across 19 versions & 1 rubygems

Version Path
karafka-web-0.8.2 lib/karafka/web/tracking/producers/listeners/errors.rb
karafka-web-0.8.1 lib/karafka/web/tracking/producers/listeners/errors.rb
karafka-web-0.8.0 lib/karafka/web/tracking/producers/listeners/errors.rb
karafka-web-0.8.0.rc1 lib/karafka/web/tracking/producers/listeners/errors.rb
karafka-web-0.7.10 lib/karafka/web/tracking/producers/listeners/errors.rb
karafka-web-0.7.9 lib/karafka/web/tracking/producers/listeners/errors.rb
karafka-web-0.7.8 lib/karafka/web/tracking/producers/listeners/errors.rb
karafka-web-0.7.7 lib/karafka/web/tracking/producers/listeners/errors.rb
karafka-web-0.7.6 lib/karafka/web/tracking/producers/listeners/errors.rb
karafka-web-0.7.5 lib/karafka/web/tracking/producers/listeners/errors.rb
karafka-web-0.7.4 lib/karafka/web/tracking/producers/listeners/errors.rb
karafka-web-0.7.3 lib/karafka/web/tracking/producers/listeners/errors.rb
karafka-web-0.7.2 lib/karafka/web/tracking/producers/listeners/errors.rb
karafka-web-0.7.1 lib/karafka/web/tracking/producers/listeners/errors.rb
karafka-web-0.7.0 lib/karafka/web/tracking/producers/listeners/errors.rb
karafka-web-0.6.3 lib/karafka/web/tracking/producers/listeners/errors.rb
karafka-web-0.6.2 lib/karafka/web/tracking/producers/listeners/errors.rb
karafka-web-0.6.1 lib/karafka/web/tracking/producers/listeners/errors.rb
karafka-web-0.6.0 lib/karafka/web/tracking/producers/listeners/errors.rb