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