# typed: ignore # Copyright (c) 2015 Sqreen. All Rights Reserved. # Please refer to our terms for more information: https://www.sqreen.com/terms.html require 'sqreen/ecosystem/module_api' require 'sqreen/ecosystem/module_api/instrumentation' require 'sqreen/ecosystem/module_api/message_producer' require 'sqreen/ecosystem/module_api/tracing_id_generation' require 'sqreen/ecosystem/module_api/tracing/client_data' module Sqreen module Ecosystem module Http class NetHttp class HttpConnectionData include ModuleApi::Tracing::ClientData end include ModuleApi::Instrumentation include ModuleApi::MessageProducer include ModuleApi::TracingIdGeneration def setup advice = wrap_for_interest(HttpConnectionData, &method(:before_advice)) instrument 'Net::HTTP#request', before: advice end private # instr. def request(req, body = nil, &block) # :yield: +response+ # req is of type +Net::HTTPGenericRequest+ def before_advice(call, _ball) tracing_id = create_tracing_id # build & submit signal host = call.instance.address port = call.instance.port # add tracing header req = call.args[0] req[ModuleApi::TRACE_ID_HEADER] = tracing_id host += ':' + port.to_s if port != 80 && port != 443 HttpConnectionData.new( transport: 'http', host: host, tracing_identifier: tracing_id ) end end end end end