@@ -31,18 +31,32 @@ final class HTTP1ClientChannelHandler: ChannelDuplexHandler {
31
31
private var channelContext : ChannelHandlerContext ?
32
32
33
33
/// the currently executing request
34
- private var request : HTTPExecutableRequest ?
34
+ private var request : HTTPExecutableRequest ? {
35
+ didSet {
36
+ if let request = request {
37
+ var requestLogger = request. logger
38
+ requestLogger [ metadataKey: " ahc-connection-id " ] = " \( self . connection. id) "
39
+ self . logger = requestLogger
40
+ } else {
41
+ self . logger = self . backgroundLogger
42
+ }
43
+ }
44
+ }
45
+
35
46
private var idleReadTimeoutStateMachine : IdleReadStateMachine ?
36
47
private var idleReadTimeoutTimer : Scheduled < Void > ?
37
48
49
+ private let backgroundLogger : Logger
50
+ private var logger : Logger
51
+
38
52
let connection : HTTP1Connection
39
- let logger : Logger
40
53
let eventLoop : EventLoop
41
54
42
55
init ( connection: HTTP1Connection , eventLoop: EventLoop , logger: Logger ) {
43
56
self . connection = connection
44
57
self . eventLoop = eventLoop
45
- self . logger = logger
58
+ self . backgroundLogger = logger
59
+ self . logger = self . backgroundLogger
46
60
}
47
61
48
62
func handlerAdded( context: ChannelHandlerContext ) {
@@ -72,7 +86,7 @@ final class HTTP1ClientChannelHandler: ChannelDuplexHandler {
72
86
73
87
func channelWritabilityChanged( context: ChannelHandlerContext ) {
74
88
self . logger. trace ( " Channel writability changed " , metadata: [
75
- " writable " : " \( context. channel. isWritable) " ,
89
+ " ahc-channel- writable" : " \( context. channel. isWritable) " ,
76
90
] )
77
91
78
92
let action = self . state. writabilityChanged ( writable: context. channel. isWritable)
@@ -82,8 +96,8 @@ final class HTTP1ClientChannelHandler: ChannelDuplexHandler {
82
96
func channelRead( context: ChannelHandlerContext , data: NIOAny ) {
83
97
let httpPart = unwrapInboundIn ( data)
84
98
85
- self . logger. trace ( " Message received" , metadata: [
86
- " message " : " \( httpPart) " ,
99
+ self . logger. trace ( " HTTP response part received" , metadata: [
100
+ " ahc-http-part " : " \( httpPart) " ,
87
101
] )
88
102
89
103
if let timeoutAction = self . idleReadTimeoutStateMachine? . channelRead ( httpPart) {
@@ -95,17 +109,19 @@ final class HTTP1ClientChannelHandler: ChannelDuplexHandler {
95
109
}
96
110
97
111
func channelReadComplete( context: ChannelHandlerContext ) {
112
+ self . logger. trace ( " Read complete caught " )
113
+
98
114
let action = self . state. channelReadComplete ( )
99
115
self . run ( action, context: context)
100
116
}
101
117
102
118
func write( context: ChannelHandlerContext , data: NIOAny , promise: EventLoopPromise < Void > ? ) {
103
- self . logger. trace ( " New request to execute " )
104
-
105
119
assert ( self . request == nil , " Only write to the ChannelHandler if you are sure, it is idle! " )
106
120
let req = self . unwrapOutboundIn ( data)
107
121
self . request = req
108
122
123
+ self . logger. trace ( " New request to execute " )
124
+
109
125
if let idleReadTimeout = self . request? . idleReadTimeout {
110
126
self . idleReadTimeoutStateMachine = . init( timeAmount: idleReadTimeout)
111
127
}
@@ -117,7 +133,7 @@ final class HTTP1ClientChannelHandler: ChannelDuplexHandler {
117
133
}
118
134
119
135
func read( context: ChannelHandlerContext ) {
120
- self . logger. trace ( " Read " )
136
+ self . logger. trace ( " Read event caught " )
121
137
122
138
let action = self . state. read ( )
123
139
self . run ( action, context: context)
@@ -135,6 +151,7 @@ final class HTTP1ClientChannelHandler: ChannelDuplexHandler {
135
151
func triggerUserOutboundEvent( context: ChannelHandlerContext , event: Any , promise: EventLoopPromise < Void > ? ) {
136
152
switch event {
137
153
case HTTPConnectionEvent . cancelRequest:
154
+ self . logger. trace ( " User outbound event triggered: Cancel request for connection close " )
138
155
let action = self . state. requestCancelled ( closeConnection: true )
139
156
self . run ( action, context: context)
140
157
default :
@@ -334,6 +351,8 @@ final class HTTP1ClientChannelHandler: ChannelDuplexHandler {
334
351
return
335
352
}
336
353
354
+ self . logger. trace ( " Request was cancelled " )
355
+
337
356
let action = self . state. requestCancelled ( closeConnection: true )
338
357
self . run ( action, context: context)
339
358
}
0 commit comments