Class: Pubnub::Telemetry

Inherits:
Object show all
Includes:
Concurrent::Async
Defined in:
lib/pubnub/telemetry.rb

Overview

Thread-safe async telemetry

Instance Method Summary collapse

Constructor Details

#initializeTelemetry

Returns a new instance of Telemetry.



6
7
8
9
# File 'lib/pubnub/telemetry.rb', line 6

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

Instance Method Details

#fetch_average(telemetry_type) ⇒ Object



22
23
24
25
26
27
28
29
30
31
32
33
34
# File 'lib/pubnub/telemetry.rb', line 22

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

#record_request(telemetry_type, time_start, time_end) ⇒ Object



11
12
13
14
15
16
17
18
19
20
# File 'lib/pubnub/telemetry.rb', line 11

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