Skip to content

Commit 5ae42f1

Browse files
committed
[WIP] Start Span upon request execution
1 parent d0fac6c commit 5ae42f1

File tree

2 files changed

+25
-28
lines changed

2 files changed

+25
-28
lines changed

Package.swift

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,9 @@ let package = Package(
3333
name: "AsyncHTTPClient",
3434
dependencies: ["NIO", "NIOHTTP1", "NIOSSL", "NIOConcurrencyHelpers", "NIOHTTPCompression",
3535
"NIOFoundationCompat", "NIOTransportServices", "Logging",
36-
.product(name: "TracingInstrumentation", package: "gsoc-swift-tracing")]
36+
.product(name: "TracingInstrumentation", package: "gsoc-swift-tracing"),
37+
.product(name: "OpenTelemetryInstrumentationSupport", package: "gsoc-swift-tracing"),
38+
.product(name: "NIOInstrumentation", package: "gsoc-swift-tracing")]
3739
),
3840
.testTarget(
3941
name: "AsyncHTTPClientTests",

Sources/AsyncHTTPClient/HTTPClient.swift

Lines changed: 22 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@
1414

1515
import Baggage
1616
import Foundation
17+
import Instrumentation
18+
import TracingInstrumentation
1719
import Logging
1820
import NIO
1921
import NIOConcurrencyHelpers
@@ -22,6 +24,8 @@ import NIOHTTPCompression
2224
import NIOSSL
2325
import NIOTLS
2426
import NIOTransportServices
27+
import NIOInstrumentation
28+
import OpenTelemetryInstrumentationSupport
2529

2630
extension 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

Comments
 (0)