Sha256: 891e528aac5eb108999f3033ebe943d0f345af3f254d28e5eeb4088a9d87c943

Contents?: true

Size: 1.51 KB

Versions: 26

Compression:

Stored size: 1.51 KB

Contents

# This file is distributed under New Relic's license terms.
# See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
# frozen_string_literal: true

module NewRelic::Agent
  module InfiniteTracing
    class RecordStatusHandler
      def initialize(client, enumerator)
        @client = client
        @enumerator = enumerator
        @messages_seen = nil
        @lock = Mutex.new
        @lock.synchronize { @worker = start_handler }
      end

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

      def stop
        return if @worker.nil?

        @lock.synchronize do
          NewRelic::Agent.logger.debug('gRPC Stopping Response Handler')
          @worker.stop
          @worker = nil
        end
      end

      private

      def handle_response
        @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
      end

      def start_handler
        Worker.new(self.class.name) do
          handle_response
          NewRelic::Agent.logger.debug('gRPC Infinite Tracer Observer closed the stream')
          @client.handle_close
        rescue => error
          @client.handle_error(error)
        end
      rescue => error
        NewRelic::Agent.logger.error('gRPC Worker Error', error)
      end
    end
  end
end

Version data entries

26 entries across 26 versions & 1 rubygems

Version Path
newrelic-infinite_tracing-9.17.0 lib/infinite_tracing/record_status_handler.rb
newrelic-infinite_tracing-9.16.1 lib/infinite_tracing/record_status_handler.rb
newrelic-infinite_tracing-9.16.0 lib/infinite_tracing/record_status_handler.rb
newrelic-infinite_tracing-9.15.0 lib/infinite_tracing/record_status_handler.rb
newrelic-infinite_tracing-9.14.0 lib/infinite_tracing/record_status_handler.rb
newrelic-infinite_tracing-9.13.0 lib/infinite_tracing/record_status_handler.rb
newrelic-infinite_tracing-9.12.0 lib/infinite_tracing/record_status_handler.rb
newrelic-infinite_tracing-9.11.0 lib/infinite_tracing/record_status_handler.rb
newrelic-infinite_tracing-9.10.2 lib/infinite_tracing/record_status_handler.rb
newrelic-infinite_tracing-9.10.1 lib/infinite_tracing/record_status_handler.rb
newrelic-infinite_tracing-9.10.0 lib/infinite_tracing/record_status_handler.rb
newrelic-infinite_tracing-9.9.0 lib/infinite_tracing/record_status_handler.rb
newrelic-infinite_tracing-9.8.0 lib/infinite_tracing/record_status_handler.rb
newrelic-infinite_tracing-9.7.1 lib/infinite_tracing/record_status_handler.rb
newrelic-infinite_tracing-9.7.0 lib/infinite_tracing/record_status_handler.rb
newrelic-infinite_tracing-9.6.0 lib/infinite_tracing/record_status_handler.rb
newrelic-infinite_tracing-9.5.0 lib/infinite_tracing/record_status_handler.rb
newrelic-infinite_tracing-9.4.2 lib/infinite_tracing/record_status_handler.rb
newrelic-infinite_tracing-9.4.1 lib/infinite_tracing/record_status_handler.rb
newrelic-infinite_tracing-9.4.0 lib/infinite_tracing/record_status_handler.rb