@nxtedition/lib 23.6.12 → 23.6.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/http.js +16 -19
- package/package.json +1 -1
- package/serializers.js +4 -4
package/http.js
CHANGED
|
@@ -169,19 +169,16 @@ export async function requestMiddleware(ctx, next) {
|
|
|
169
169
|
req.on('error', noop)
|
|
170
170
|
res.on('error', noop)
|
|
171
171
|
|
|
172
|
+
const isHealthcheck = req.url === '/healthcheck' || req.url === '/_up'
|
|
173
|
+
const reqLogger = isHealthcheck ? null : logger.child({ req })
|
|
174
|
+
|
|
172
175
|
pendingSet.add(ctx)
|
|
173
176
|
try {
|
|
174
177
|
if (req.method === 'GET' || req.method === 'HEAD' || req.method === 'OPTIONS') {
|
|
175
178
|
req.resume() // Dump the body if there is one.
|
|
176
179
|
}
|
|
177
180
|
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
if (isHealthcheck) {
|
|
181
|
-
// Do nothing...
|
|
182
|
-
} else {
|
|
183
|
-
logger.debug({ req }, 'request started')
|
|
184
|
-
}
|
|
181
|
+
reqLogger?.debug('request started')
|
|
185
182
|
|
|
186
183
|
if (ctx.id) {
|
|
187
184
|
res.setHeader('request-id', ctx.id)
|
|
@@ -200,15 +197,15 @@ export async function requestMiddleware(ctx, next) {
|
|
|
200
197
|
if (isHealthcheck) {
|
|
201
198
|
// Do nothing...
|
|
202
199
|
} else if (res.errored) {
|
|
203
|
-
|
|
200
|
+
reqLogger?.error({ err: res.errored, req, res, elapsedTime }, 'request error')
|
|
204
201
|
} else if (!res.writableEnded) {
|
|
205
|
-
|
|
202
|
+
reqLogger?.debug({ req, res, elapsedTime }, 'request aborted')
|
|
206
203
|
} else if (res.statusCode >= 500) {
|
|
207
|
-
|
|
204
|
+
reqLogger?.error({ req, res, elapsedTime }, 'request error')
|
|
208
205
|
} else if (res.statusCode >= 400) {
|
|
209
|
-
|
|
206
|
+
reqLogger?.warn({ req, res, elapsedTime }, 'request failed')
|
|
210
207
|
} else {
|
|
211
|
-
|
|
208
|
+
reqLogger?.debug({ req, res, elapsedTime }, 'request completed')
|
|
212
209
|
}
|
|
213
210
|
} catch (err) {
|
|
214
211
|
ctx[kAbortController]?.abort(err)
|
|
@@ -248,7 +245,7 @@ export async function requestMiddleware(ctx, next) {
|
|
|
248
245
|
}
|
|
249
246
|
}
|
|
250
247
|
} else if (err.headers != null) {
|
|
251
|
-
|
|
248
|
+
reqLogger?.warn({ err }, 'invalid headers')
|
|
252
249
|
}
|
|
253
250
|
|
|
254
251
|
if (fp.isPlainObject(err.body)) {
|
|
@@ -263,17 +260,17 @@ export async function requestMiddleware(ctx, next) {
|
|
|
263
260
|
}
|
|
264
261
|
|
|
265
262
|
if (statusCode < 500) {
|
|
266
|
-
|
|
263
|
+
reqLogger?.warn({ res, err, elapsedTime }, 'request failed')
|
|
267
264
|
} else {
|
|
268
|
-
|
|
265
|
+
reqLogger?.error({ res, err, elapsedTime }, 'request error')
|
|
269
266
|
}
|
|
270
267
|
} else {
|
|
271
268
|
if (req.aborted || (!res.errored && res.closed) || err.name === 'AbortError') {
|
|
272
|
-
|
|
269
|
+
reqLogger?.debug({ res, err, elapsedTime }, 'request aborted')
|
|
273
270
|
} else if (statusCode < 500) {
|
|
274
|
-
|
|
271
|
+
reqLogger?.warn({ res, err, elapsedTime }, 'request failed')
|
|
275
272
|
} else {
|
|
276
|
-
|
|
273
|
+
reqLogger?.error({ res, err, elapsedTime }, 'request error')
|
|
277
274
|
}
|
|
278
275
|
res.destroy(err)
|
|
279
276
|
}
|
|
@@ -282,7 +279,7 @@ export async function requestMiddleware(ctx, next) {
|
|
|
282
279
|
|
|
283
280
|
if (!res.writableEnded && !res.destroyed) {
|
|
284
281
|
res.destroy()
|
|
285
|
-
|
|
282
|
+
reqLogger?.warn('request destroyed')
|
|
286
283
|
}
|
|
287
284
|
}
|
|
288
285
|
}
|
package/package.json
CHANGED
package/serializers.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { SIGNALS } from './platform.js'
|
|
2
2
|
import { parseHeaders } from '@nxtedition/nxt-undici'
|
|
3
|
+
import requestTarget from 'request-target'
|
|
3
4
|
|
|
4
5
|
function getHeader(obj, key) {
|
|
5
6
|
return !obj || !key
|
|
@@ -96,6 +97,7 @@ export default {
|
|
|
96
97
|
id: res.id ?? res.req?.id ?? getHeader(res, 'request-id') ?? getHeader(res.req, 'request-id'),
|
|
97
98
|
url: res.req?.url,
|
|
98
99
|
method: res.req?.method,
|
|
100
|
+
headers: getHeaders(res),
|
|
99
101
|
statusCode: res.statusCode || res.status,
|
|
100
102
|
userAgent: res.userAgent ?? res.req?.userAgent ?? getHeader(res.req, 'user-agent'),
|
|
101
103
|
timing: getTiming(res),
|
|
@@ -105,7 +107,6 @@ export default {
|
|
|
105
107
|
(res.timing?.complete > 0 && res.bytesWritten
|
|
106
108
|
? (res.bytesWritten * 1e3) / res.timing.complete
|
|
107
109
|
: undefined),
|
|
108
|
-
headers: getHeaders(res),
|
|
109
110
|
headersSent: res.headersSent,
|
|
110
111
|
aborted: res.aborted,
|
|
111
112
|
closed: res.closed,
|
|
@@ -116,11 +117,10 @@ export default {
|
|
|
116
117
|
id: req.id || getHeader(req, 'request-id'),
|
|
117
118
|
url: req.url,
|
|
118
119
|
method: req.method,
|
|
119
|
-
|
|
120
|
+
headers: getHeaders(req),
|
|
121
|
+
target: req.target ?? requestTarget(req),
|
|
120
122
|
userAgent: req.userAgent ?? getHeader(req, 'user-agent'),
|
|
121
123
|
timing: getTiming(req),
|
|
122
|
-
headers: getHeaders(req),
|
|
123
|
-
query: req.query,
|
|
124
124
|
bytesRead: req.bytesRead,
|
|
125
125
|
bytesReadPerSecond:
|
|
126
126
|
req.bytesReadPerSecond ??
|