Class: NewRelic::Agent::InfiniteTracing::RecordStatusHandler

Inherits:
Object
  • Object
show all
Defined in:
lib/infinite_tracing/record_status_handler.rb

Instance Method Summary collapse

Constructor Details

#initialize(client, enumerator) ⇒ RecordStatusHandler

Returns a new instance of RecordStatusHandler.



9
10
11
12
13
14
15
# 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

Instance Method Details

#messages_seenObject



17
18
19
# File 'lib/infinite_tracing/record_status_handler.rb', line 17

def messages_seen
  @messages_seen ? @messages_seen.messages_seen : 0
end

#start_handlerObject



21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
# 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

#stopObject



41
42
43
44
45
46
47
48
# 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