Module: Sqreen::Ecosystem

Defined in:
lib/sqreen/ecosystem.rb,
lib/sqreen/ecosystem/loggable.rb,
lib/sqreen/ecosystem/module_api.rb,
lib/sqreen/ecosystem/http/net_http.rb,
lib/sqreen/ecosystem/messaging/sqs.rb,
lib/sqreen/ecosystem/dispatch_table.rb,
lib/sqreen/ecosystem/tracing_broker.rb,
lib/sqreen/ecosystem/databases/mongo.rb,
lib/sqreen/ecosystem/databases/mysql.rb,
lib/sqreen/ecosystem/databases/redis.rb,
lib/sqreen/ecosystem/messaging/bunny.rb,
lib/sqreen/ecosystem/messaging/kafka.rb,
lib/sqreen/ecosystem/module_registry.rb,
lib/sqreen/ecosystem/tracing/sampler.rb,
lib/sqreen/ecosystem/tracing_id_setup.rb,
lib/sqreen/ecosystem/http/rack_request.rb,
lib/sqreen/ecosystem/messaging/kinesis.rb,
lib/sqreen/ecosystem/databases/postgres.rb,
lib/sqreen/ecosystem/module_api/tracing.rb,
lib/sqreen/ecosystem/exception_reporting.rb,
lib/sqreen/ecosystem/transaction_storage.rb,
lib/sqreen/ecosystem/tracing/modules/client.rb,
lib/sqreen/ecosystem/tracing/modules/server.rb,
lib/sqreen/ecosystem/tracing/modules/consumer.rb,
lib/sqreen/ecosystem/tracing/modules/producer.rb,
lib/sqreen/ecosystem/module_api/event_listener.rb,
lib/sqreen/ecosystem/module_api/instrumentation.rb,
lib/sqreen/ecosystem/module_api/signal_producer.rb,
lib/sqreen/ecosystem/module_api/message_producer.rb,
lib/sqreen/ecosystem/util/call_writers_from_init.rb,
lib/sqreen/ecosystem/tracing/modules/determine_ip.rb,
lib/sqreen/ecosystem/module_api/tracing/client_data.rb,
lib/sqreen/ecosystem/module_api/tracing/server_data.rb,
lib/sqreen/ecosystem/module_api/transaction_storage.rb,
lib/sqreen/ecosystem/tracing/sampling_configuration.rb,
lib/sqreen/ecosystem/tracing/signals/tracing_client.rb,
lib/sqreen/ecosystem/tracing/signals/tracing_server.rb,
lib/sqreen/ecosystem/module_api/tracing/consumer_data.rb,
lib/sqreen/ecosystem/module_api/tracing/producer_data.rb,
lib/sqreen/ecosystem/module_api/tracing_id_generation.rb,
lib/sqreen/ecosystem/tracing/signals/tracing_consumer.rb,
lib/sqreen/ecosystem/tracing/signals/tracing_producer.rb,
lib/sqreen/ecosystem/module_api/tracing/messaging_data.rb,
lib/sqreen/ecosystem/databases/database_connection_data.rb

Overview

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

Defined Under Namespace

Modules: Databases, DispatchTable, ExceptionReporting, Http, Loggable, Messaging, ModuleApi, Tracing, Util Classes: ModuleRegistry, TracingBroker, TracingIdSetup, TransactionStorage

Class Method Summary collapse

Class Method Details

.configure_sampling(tracing_id_prefix, sampling_config) ⇒ Object

Parameters:

  • tracing_id_prefix (String)
  • sampling_config (Array<Hash{String=>Object}>)


64
65
66
67
68
# 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_transactionObject



58
59
60
# File 'lib/sqreen/ecosystem.rb', line 58

def end_transaction
  TransactionStorage.destroy_thread_local
end

.init(opts = {}) ⇒ Object



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

.resetObject



43
44
45
46
47
# File 'lib/sqreen/ecosystem.rb', line 43

def reset
  instance_variables.each do |ia|
    instance_variable_set(ia, nil)
  end
end

.start_transactionObject

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



54
55
56
# File 'lib/sqreen/ecosystem.rb', line 54

def start_transaction
  TransactionStorage.create_thread_local
end