require 'sqreen/ecosystem/module_api' require 'sqreen/ecosystem/module_api/instrumentation' require 'sqreen/ecosystem/module_api/tracing_push_down' require 'sqreen/ecosystem/module_api/signal_producer' require 'sqreen/ecosystem/module_api/transaction_storage' require 'sqreen/ecosystem/tracing/signals/tracing_client' module Sqreen module Ecosystem module Http class NetHttp include ModuleApi::Instrumentation include ModuleApi::SignalProducer include ModuleApi::TracingPushDown def setup instrument 'Net::HTTP#request', before: method(:before_advice) end private # instr. def request(req, body = nil, &block) # :yield: +response+ # req is of type +Net::HTTPGenericRequest+ def before_advice(call, _ball) return unless should_sample?('client') tracing_id = create_tracing_id # build & submit signal host = call.instance.address port = call.instance.port host += ':' + port.to_s if port != 80 && port != 443 signal = Tracing::Signals::TracingClient.new signal.payload = Tracing::Signals::TracingClient::Payload.new( transport: 'http', host: host, tracing_identifier: tracing_id ) submit_signal signal # add tracing header, if available req = call.args[0] req[ModuleApi::TRACE_ID_HEADER] = tracing_id end end end end end