module Sqreen::Ecosystem

The API for the ecosystem client (together with the dispatch table)

Public Class Methods

configure_sampling(tracing_id_prefix, sampling_config) click to toggle source

@param [String] tracing_id_prefix @param [Array<Hash{String=>Object}>] sampling_config

# File lib/sqreen/ecosystem.rb, line 64
def configure_sampling(tracing_id_prefix, sampling_config)
  @tracing_id_setup.tracing_id_prefix = tracing_id_prefix
  built_samp_cfg = Tracing::SamplingConfiguration.new(sampling_config)
  @tracing_broker.sampling_configuration = built_samp_cfg
end
end_transaction() click to toggle source
# File lib/sqreen/ecosystem.rb, line 58
def end_transaction
  TransactionStorage.destroy_thread_local
end
init(opts = {}) click to toggle source
# File lib/sqreen/ecosystem.rb, line 20
def init(opts = {})
  @registry = ModuleRegistry.new
  register_modules(opts[:modules])
  @registry.init_all

  # setup tracing generation
  tracing_id_mods = @registry.module_subset(ModuleApi::TracingIdGeneration)
  @tracing_id_setup = TracingIdSetup.new(tracing_id_mods)
  @tracing_id_setup.setup_modules

  # configure tracing broker with the consumers (tracing modules)
  tracing_modules = @registry.module_subset(ModuleApi::Tracing)
  @tracing_broker = TracingBroker.new(tracing_modules)

  # inject tracing broker in message producers
  @registry.each_module(ModuleApi::MessageProducer) do |mod|
    mod.tracing_broker = @tracing_broker
  end
rescue ::Exception # rubocop:disable Lint/RescueException
  # TODO: modules must be disabled at this point
  raise
end
reset() click to toggle source
# File lib/sqreen/ecosystem.rb, line 43
def reset
  instance_variables.each do |ia|
    instance_variable_set(ia, nil)
  end
end
start_transaction() click to toggle source

To be called by the Ecosystem client when a new transaction (generally: request) is started In the future, it's intended that request end/start detection be handled by the Ecosystem itself, so control will flow in the other direction, from the ecosystem to its client

# File lib/sqreen/ecosystem.rb, line 54
def start_transaction
  TransactionStorage.create_thread_local
end

Private Class Methods

register(mod) click to toggle source
# File lib/sqreen/ecosystem.rb, line 123
def register(mod)
  @registry.register mod
end
register_all_modules() click to toggle source
# File lib/sqreen/ecosystem.rb, line 78
def register_all_modules
  # replace with something more magical?
  require_relative 'ecosystem/http/rack_request'
  register Http::RackRequest.new

  require_relative 'ecosystem/http/net_http'
  register Http::NetHttp.new

  require_relative 'ecosystem/databases/postgres'
  register Databases::Postgres.new

  require_relative 'ecosystem/databases/mysql'
  register Databases::Mysql.new

  require_relative 'ecosystem/databases/mongo'
  register Databases::Mongo.new

  require_relative 'ecosystem/databases/redis'
  register Databases::Redis.new

  require_relative 'ecosystem/messaging/sqs'
  register Messaging::Sqs.new

  require_relative 'ecosystem/messaging/kinesis'
  register Messaging::Kinesis.new

  require_relative 'ecosystem/messaging/bunny'
  register Messaging::Bunny.new

  require_relative 'ecosystem/messaging/kafka'
  register Messaging::Kafka.new

  require_relative 'ecosystem/tracing/modules/client'
  register Tracing::Modules::Client.new

  require_relative 'ecosystem/tracing/modules/server'
  register Tracing::Modules::Server.new

  require_relative 'ecosystem/tracing/modules/producer'
  register Tracing::Modules::Producer.new

  require_relative 'ecosystem/tracing/modules/consumer'
  register Tracing::Modules::Consumer.new
end
register_modules(modules) click to toggle source
# File lib/sqreen/ecosystem.rb, line 72
def register_modules(modules)
  return register_all_modules unless modules

  modules.each { |mod| register mod }
end