Sha256: 64b5549b85ea223dd2f1bd28e659201ba3658bb9a1810650bce5bedd4740268f

Contents?: true

Size: 1.72 KB

Versions: 38

Compression:

Stored size: 1.72 KB

Contents

# frozen_string_literal: true

module WaterDrop
  module Instrumentation
    # Namespace for handlers of callbacks emitted by the kafka client lib
    module Callbacks
      # Statistics callback handler
      # @note We decorate the statistics with our own decorator because some of the metrics from
      #   rdkafka are absolute. For example number of sent messages increases not in reference to
      #   previous statistics emit but from the beginning of the process. We decorate it with diff
      #   of all the numeric values against the data from the previous callback emit
      class Statistics
        # @param producer_id [String] id of the current producer
        # @param client_name [String] rdkafka client name
        # @param monitor [WaterDrop::Instrumentation::Monitor] monitor we are using
        def initialize(producer_id, client_name, monitor)
          @producer_id = producer_id
          @client_name = client_name
          @monitor = monitor
          @statistics_decorator = ::Karafka::Core::Monitoring::StatisticsDecorator.new
        end

        # Emits decorated statistics to the monitor
        # @param statistics [Hash] rdkafka statistics
        def call(statistics)
          # Emit only statistics related to our client
          # rdkafka does not have per-instance statistics hook, thus we need to make sure that we
          # emit only stats that are related to current producer. Otherwise we would emit all of
          # all the time.
          return unless @client_name == statistics['name']

          @monitor.instrument(
            'statistics.emitted',
            producer_id: @producer_id,
            statistics: @statistics_decorator.call(statistics)
          )
        end
      end
    end
  end
end

Version data entries

38 entries across 38 versions & 1 rubygems

Version Path
waterdrop-2.7.0.rc2 lib/waterdrop/instrumentation/callbacks/statistics.rb
waterdrop-2.7.0.rc1 lib/waterdrop/instrumentation/callbacks/statistics.rb
waterdrop-2.7.0.beta2 lib/waterdrop/instrumentation/callbacks/statistics.rb
waterdrop-2.7.0.beta1 lib/waterdrop/instrumentation/callbacks/statistics.rb
waterdrop-2.7.0.alpha3 lib/waterdrop/instrumentation/callbacks/statistics.rb
waterdrop-2.7.0.alpha2 lib/waterdrop/instrumentation/callbacks/statistics.rb
waterdrop-2.7.0.alpha1 lib/waterdrop/instrumentation/callbacks/statistics.rb
waterdrop-2.6.14 lib/waterdrop/instrumentation/callbacks/statistics.rb
waterdrop-2.6.13 lib/waterdrop/instrumentation/callbacks/statistics.rb
waterdrop-2.6.12 lib/waterdrop/instrumentation/callbacks/statistics.rb
waterdrop-2.6.11 lib/waterdrop/instrumentation/callbacks/statistics.rb
waterdrop-2.6.10 lib/waterdrop/instrumentation/callbacks/statistics.rb
waterdrop-2.6.9 lib/waterdrop/instrumentation/callbacks/statistics.rb
waterdrop-2.6.8 lib/waterdrop/instrumentation/callbacks/statistics.rb
waterdrop-2.6.7 lib/waterdrop/instrumentation/callbacks/statistics.rb
waterdrop-2.6.6 lib/waterdrop/instrumentation/callbacks/statistics.rb
waterdrop-2.6.5 lib/waterdrop/instrumentation/callbacks/statistics.rb
waterdrop-2.6.4 lib/waterdrop/instrumentation/callbacks/statistics.rb
waterdrop-2.6.3 lib/waterdrop/instrumentation/callbacks/statistics.rb
waterdrop-2.6.2 lib/waterdrop/instrumentation/callbacks/statistics.rb