Class: Pubnub::Telemetry
- Includes:
- Concurrent::Async
- Defined in:
- lib/pubnub/telemetry.rb
Overview
Thread-safe async telemetry
Instance Method Summary collapse
- #fetch_average(telemetry_type) ⇒ Object
-
#initialize ⇒ Telemetry
constructor
A new instance of Telemetry.
- #record_request(telemetry_type, time_start, time_end) ⇒ Object
Constructor Details
#initialize ⇒ Telemetry
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 |