1414
1515import Baggage
1616import Foundation
17+ import Instrumentation
18+ import TracingInstrumentation
1719import Logging
1820import NIO
1921import NIOConcurrencyHelpers
@@ -22,6 +24,8 @@ import NIOHTTPCompression
2224import NIOSSL
2325import NIOTLS
2426import NIOTransportServices
27+ import NIOInstrumentation
28+ import OpenTelemetryInstrumentationSupport
2529
2630extension Logger {
2731 private func requestInfo( _ request: HTTPClient . Request ) -> Logger . Metadata . Value {
@@ -380,35 +384,25 @@ public class HTTPClient {
380384 /// - eventLoop: NIO Event Loop preference.
381385 /// - context: Metadata propagated for instrumentation.
382386 /// - deadline: Point in time by which the request must complete.
383- /// - logger: The logger to use for this request.
384387 public func execute< Delegate: HTTPClientResponseDelegate > ( request: Request ,
385388 delegate: Delegate ,
386389 eventLoop eventLoopPreference: EventLoopPreference ,
387390 context: BaggageContext ,
388391 deadline: NIODeadline ? = nil ) -> Task < Delegate . Response > {
389- return self . execute ( request: request,
390- delegate: delegate,
391- eventLoop: eventLoopPreference,
392- context: context,
393- deadline: deadline,
394- logger: HTTPClient . loggingDisabled)
395- }
392+ var span = InstrumentationSystem . tracingInstrument. startSpan ( named: request. method. rawValue, context: context, ofKind: . client, at: nil )
393+ span. attributes. http. method = request. method. rawValue
394+ span. attributes. http. scheme = request. scheme
395+ span. attributes. http. target = request. uri
396+ span. attributes. http. host = request. host
396397
397- /// Execute arbitrary HTTP request and handle response processing using provided delegate.
398- ///
399- /// - parameters:
400- /// - request: HTTP request to execute.
401- /// - delegate: Delegate to process response parts.
402- /// - eventLoop: NIO Event Loop preference.
403- /// - context: Metadata propagated for instrumentation.
404- /// - deadline: Point in time by which the request must complete.
405- public func execute< Delegate: HTTPClientResponseDelegate > ( request: Request ,
406- delegate: Delegate ,
407- eventLoop eventLoopPreference: EventLoopPreference ,
408- context: BaggageContext ,
409- deadline: NIODeadline ? = nil ,
410- logger originalLogger: Logger ? ) -> Task < Delegate . Response > {
411- let logger = ( originalLogger ?? HTTPClient . loggingDisabled) . attachingRequestInformation ( request, requestID: globalRequestID. add ( 1 ) )
398+ // TODO: http.statusCode response status once request completed
399+ // TODO: net.peer.ip / Not required, but recommended
400+
401+ var request = request
402+ InstrumentationSystem . instrument. inject ( context, into: & request. headers, using: HTTPHeadersInjector ( ) )
403+
404+ // let logger = (originalLogger ?? HTTPClient.loggingDisabled).attachingRequestInformation(request, requestID: globalRequestID.add(1))
405+ let logger = HTTPClient . loggingDisabled
412406 let taskEL : EventLoop
413407 switch eventLoopPreference. preference {
414408 case . indifferent:
@@ -422,16 +416,16 @@ public class HTTPClient {
422416 case . testOnly_exact( _, delegateOn: let delegateEL) :
423417 taskEL = delegateEL
424418 }
425- logger. trace ( " selected EventLoop for task given the preference " ,
426- metadata: [ " ahc-eventloop " : " \( taskEL) " ,
427- " ahc-el-preference " : " \( eventLoopPreference) " ] )
419+ // logger.trace("selected EventLoop for task given the preference",
420+ // metadata: ["ahc-eventloop": "\(taskEL)",
421+ // "ahc-el-preference": "\(eventLoopPreference)"])
428422
429423 let failedTask : Task < Delegate . Response > ? = self . stateLock. withLock {
430424 switch state {
431425 case . upAndRunning:
432426 return nil
433427 case . shuttingDown, . shutDown:
434- logger. debug ( " client is shutting down, failing request " )
428+ // logger.debug("client is shutting down, failing request")
435429 return Task< Delegate . Response> . failedTask( eventLoop: taskEL,
436430 error: HTTPClientError . alreadyShutdown,
437431 logger: logger)
@@ -515,6 +509,7 @@ public class HTTPClient {
515509 }
516510 } . always { _ in
517511 setupComplete. succeed ( ( ) )
512+ span. end ( )
518513 } . whenFailure { error in
519514 taskHandler. callOutToDelegateFireAndForget { task in
520515 delegate. didReceiveError ( task: task, error)
0 commit comments