class Sqreen::EcosystemIntegration

This class is the interface through which the agent interacts with the ecosystem.

Other classes in the EcosystemIntegration module implement the functionality that the ecosystem requires in order to deliver data to the agent and to be informed by the agent of certain key events (see Sqreen::Ecosystem::DispatchTable).

Public Class Methods

new(framework, queue) click to toggle source

@param [Sqreen::Framework] framework

# File lib/sqreen/ecosystem_integration.rb, line 25
def initialize(framework, queue)
  @framework = framework
  @queue = queue
  @request_lifecycle = RequestLifecycleTracking.new
  @online = false
end

Public Instance Methods

disable() click to toggle source
# File lib/sqreen/ecosystem_integration.rb, line 45
def disable
  raise NotImplementedYet
end
handle_tracing_command(trace_id_prefix, scopes_config) click to toggle source
# File lib/sqreen/ecosystem_integration.rb, line 62
def handle_tracing_command(trace_id_prefix, scopes_config)
  return unless @online

  Ecosystem.configure_sampling(trace_id_prefix, scopes_config)
end
init() click to toggle source
# File lib/sqreen/ecosystem_integration.rb, line 32
def init
  raise 'already initialized' if @online

  setup_dispatch_table
  Ecosystem.init
  logger.info 'Ecosystem successfully initialized'
  @online = true
rescue ::Exception => e # rubocop:disable Lint/RescueException
  logger.warn { "Error initializing Ecosystem: #{e.message}" }
  logger.debug { e.backtrace.map { |x| "  #{x}" }.join("\n") }
  Sqreen::RemoteException.record(e)
end
request_end() click to toggle source
# File lib/sqreen/ecosystem_integration.rb, line 56
def request_end
  return unless @online

  Ecosystem.end_transaction
end
request_start(rack_request) click to toggle source
# File lib/sqreen/ecosystem_integration.rb, line 49
def request_start(rack_request)
  return unless @online

  Ecosystem.start_transaction
  @request_lifecycle.notify_request_start(rack_request)
end

Private Instance Methods

create_signal_consumption() click to toggle source
# File lib/sqreen/ecosystem_integration.rb, line 82
def create_signal_consumption
  SignalConsumption.new(@framework, @request_lifecycle, @queue)
end
setup_dispatch_table() click to toggle source
# File lib/sqreen/ecosystem_integration.rb, line 70
def setup_dispatch_table
  Ecosystem::DispatchTable.consume_signal =
    create_signal_consumption.method(:consume_signal)

  Ecosystem::DispatchTable.add_request_start_listener =
    @request_lifecycle.method(:add_start_observer)

  Ecosystem::DispatchTable.fetch_logger = lambda { logger }

  Ecosystem::DispatchTable.instrument = InstrumentationService.method(:instrument)
end