Sha256: 85e10ffec6f090132d0579a0849c698b35e286daaec1d44577e3a9ec5af20fbf

Contents?: true

Size: 1.4 KB

Versions: 37

Compression:

Stored size: 1.4 KB

Contents

module Pubnub
  # Thread-safe async telemetry
  class Telemetry
    include Concurrent::Async

    def initialize
      @recorded_history = Concurrent::Map.new { default_telemetry }
      Pubnub.logger.debug('Pubnub::Telementry') { 'Initialized Telemetry' }
    end

    def record_request(telemetry_type, time_start, time_end)
      @recorded_history.compute(telemetry_type) do |telemetry|
        telemetry ||= default_telemetry
        telemetry[:sum] += (time_end - time_start)
        telemetry[:counter] += 1
        telemetry
      end
    rescue StandardError => error
      Pubnub.logger.error('Pubnub::Telemetry') { "Failed to record request #{error}\n#{error.backtrace.join("\n")}" }
    end

    def fetch_average(telemetry_type)
      Pubnub.logger.debug('Pubnub::Telemetry') { "Fetching telemetry for #{telemetry_type}" }
      return false if @recorded_history[telemetry_type][:counter].zero?
      average = 0
      @recorded_history.compute(telemetry_type) do |telemetry|
        average = telemetry[:sum].to_f / telemetry[:counter].to_f
        default_telemetry
      end
      Pubnub.logger.debug('Pubnub::Telemetry') { "Current average: #{average}" }
      average
    rescue StandardError => error
      Pubnub.logger.error('Pubnub::Telemetry') { "Failed to fetch average #{error}\n#{error.backtrace.join("\n")}" }
    end

    private

    def default_telemetry
      { sum: 0, counter: 0 }
    end
  end
end

Version data entries

37 entries across 37 versions & 1 rubygems

Version Path
pubnub-5.5.0 lib/pubnub/telemetry.rb
pubnub-5.4.0 lib/pubnub/telemetry.rb
pubnub-5.3.5 lib/pubnub/telemetry.rb
pubnub-5.3.4 lib/pubnub/telemetry.rb
pubnub-5.3.3 lib/pubnub/telemetry.rb
pubnub-5.3.2 lib/pubnub/telemetry.rb
pubnub-5.3.1 lib/pubnub/telemetry.rb
pubnub-5.3.0 lib/pubnub/telemetry.rb
pubnub-5.2.2 lib/pubnub/telemetry.rb
pubnub-5.2.1 lib/pubnub/telemetry.rb
pubnub-5.2.0 lib/pubnub/telemetry.rb
pubnub-5.1.2 lib/pubnub/telemetry.rb
pubnub-5.1.1 lib/pubnub/telemetry.rb
pubnub-5.1.0 lib/pubnub/telemetry.rb
pubnub-5.0.0 lib/pubnub/telemetry.rb
pubnub-4.8.0 lib/pubnub/telemetry.rb
pubnub-4.7.1 lib/pubnub/telemetry.rb
pubnub-4.7.0 lib/pubnub/telemetry.rb
pubnub-4.6.2 lib/pubnub/telemetry.rb
pubnub-4.6.1 lib/pubnub/telemetry.rb