class NewRelic::Agent::InfiniteTracing::RecordStatusHandler

Public Class Methods

new(client, enumerator) click to toggle source
# File lib/infinite_tracing/record_status_handler.rb, line 9
def initialize client, enumerator
  @client = client
  @enumerator = enumerator
  @messages_seen = nil
  @lock = Mutex.new
  @lock.synchronize { @worker = start_handler }
end

Public Instance Methods

messages_seen() click to toggle source
# File lib/infinite_tracing/record_status_handler.rb, line 17
def messages_seen
  @messages_seen ? @messages_seen.messages_seen : 0
end
start_handler() click to toggle source
# File lib/infinite_tracing/record_status_handler.rb, line 21
def start_handler
  Worker.new self.class.name do
    begin
      @enumerator.each do |response|
        break if response.nil? || response.is_a?(Exception)
        @lock.synchronize do
          @messages_seen = response
          NewRelic::Agent.logger.debug "gRPC Infinite Tracer Observer saw #{messages_seen} messages"
        end
      end
      NewRelic::Agent.logger.debug "gRPC Infinite Tracer Observer closed the stream"
      @client.handle_close
    rescue => error
      @client.handle_error error
    end
  end
rescue => error
  NewRelic::Agent.logger.error "gRPC Worker Error", error
end
stop() click to toggle source
# File lib/infinite_tracing/record_status_handler.rb, line 41
def stop
  return if @worker.nil?
  @lock.synchronize do
    NewRelic::Agent.logger.debug "gRPC Stopping Response Handler"
    @worker.stop
    @worker = nil
  end
end