14
14
15
15
import Baggage
16
16
import Foundation
17
+ import Instrumentation
18
+ import TracingInstrumentation
17
19
import Logging
18
20
import NIO
19
21
import NIOConcurrencyHelpers
@@ -22,6 +24,8 @@ import NIOHTTPCompression
22
24
import NIOSSL
23
25
import NIOTLS
24
26
import NIOTransportServices
27
+ import NIOInstrumentation
28
+ import OpenTelemetryInstrumentationSupport
25
29
26
30
extension Logger {
27
31
private func requestInfo( _ request: HTTPClient . Request ) -> Logger . Metadata . Value {
@@ -380,35 +384,25 @@ public class HTTPClient {
380
384
/// - eventLoop: NIO Event Loop preference.
381
385
/// - context: Metadata propagated for instrumentation.
382
386
/// - deadline: Point in time by which the request must complete.
383
- /// - logger: The logger to use for this request.
384
387
public func execute< Delegate: HTTPClientResponseDelegate > ( request: Request ,
385
388
delegate: Delegate ,
386
389
eventLoop eventLoopPreference: EventLoopPreference ,
387
390
context: BaggageContext ,
388
391
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
396
397
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
412
406
let taskEL : EventLoop
413
407
switch eventLoopPreference. preference {
414
408
case . indifferent:
@@ -422,16 +416,16 @@ public class HTTPClient {
422
416
case . testOnly_exact( _, delegateOn: let delegateEL) :
423
417
taskEL = delegateEL
424
418
}
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)"])
428
422
429
423
let failedTask : Task < Delegate . Response > ? = self . stateLock. withLock {
430
424
switch state {
431
425
case . upAndRunning:
432
426
return nil
433
427
case . shuttingDown, . shutDown:
434
- logger. debug ( " client is shutting down, failing request " )
428
+ // logger.debug("client is shutting down, failing request")
435
429
return Task< Delegate . Response> . failedTask( eventLoop: taskEL,
436
430
error: HTTPClientError . alreadyShutdown,
437
431
logger: logger)
@@ -515,6 +509,7 @@ public class HTTPClient {
515
509
}
516
510
} . always { _ in
517
511
setupComplete. succeed ( ( ) )
512
+ span. end ( )
518
513
} . whenFailure { error in
519
514
taskHandler. callOutToDelegateFireAndForget { task in
520
515
delegate. didReceiveError ( task: task, error)
0 commit comments