Sha256: 708b472772859d9e58e2dbea6ff759520a6d3fbff8d307ca8cd4928bfc975594

Contents?: true

Size: 1.5 KB

Versions: 2

Compression:

Stored size: 1.5 KB

Contents

# encoding: utf-8
# 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
  NewRelic::Agent.logger.debug("Installing Infinite Tracer in Agent")

  Agent.class_eval do
    def new_infinite_tracer
      # We must start streaming in a thread or we block/deadlock the
      # entire start up process for the Agent.
      InfiniteTracing::Client.new.tap do |client|
        @infinite_tracer_thread = InfiniteTracing::Worker.new(:infinite_tracer) do
          NewRelic::Agent.logger.debug("Opening Infinite Tracer Stream with gRPC server")
          client.start_streaming
        end
      end
    end

    # Handles the case where the server tells us to restart -
    # this clears the data, clears connection attempts, and
    # waits a while to reconnect.
    def handle_force_restart(error)
      ::NewRelic::Agent.logger.debug(error.message)
      drop_buffered_data
      @service.force_restart if @service
      @connect_state = :pending
      close_infinite_tracer
      sleep(30)
    end

    # Whenever we reconnect, close and restart
    def close_infinite_tracer
      NewRelic::Agent.logger.debug("Closing infinite tracer threads")
      return unless @infinite_tracer_thread
      @infinite_tracer_thread.join
      @infinite_tracer_thread.stop
      @infinite_tracer_thread = nil
    end

    def infinite_tracer
      @infinite_tracer ||= new_infinite_tracer
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
newrelic-infinite_tracing-8.10.1 lib/infinite_tracing/agent_integrations/agent.rb
newrelic-infinite_tracing-8.10.0 lib/infinite_tracing/agent_integrations/agent.rb