Skip to content

Commit ca58443

Browse files
committed
improved request logging for nuxt-print
1 parent 63a45a7 commit ca58443

File tree

1 file changed

+30
-20
lines changed

1 file changed

+30
-20
lines changed

print/server/api/pdf.js

Lines changed: 30 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -12,22 +12,19 @@ import { performance } from 'perf_hooks'
1212
import { URL } from 'url'
1313
import { memoryUsage } from 'process'
1414

15-
let lastTime = null
16-
function measurePerformance(msg) {
15+
function measurePerformance(performanceMeasurements, key) {
1716
const now = performance.now()
1817
const memory = memoryUsage()
1918

20-
if (lastTime !== null) {
21-
console.log(
22-
`(took ${Math.round(now - lastTime)} millisecons / using ${
23-
memory.heapUsed / 1000000
24-
}MB)`
25-
)
26-
}
27-
lastTime = now
19+
const lastTime = performanceMeasurements.lastTime
2820

29-
console.log('\n')
30-
console.log(msg || '')
21+
if (lastTime !== null && key !== null) {
22+
performanceMeasurements.measurements[key] = {
23+
duration: Math.round(now - lastTime),
24+
memory: memory.heapUsed / 1000000,
25+
}
26+
}
27+
performanceMeasurements.lastTime = now
3128
}
3229

3330
export default defineEventHandler(async (event) => {
@@ -41,16 +38,25 @@ export default defineEventHandler(async (event) => {
4138
} = useRuntimeConfig(event)
4239

4340
let browser = null
41+
let status = 200
42+
const performanceMeasurements = {
43+
lastTime: null,
44+
measurements: {},
45+
}
46+
const logOutput = {
47+
timestamp: new Date(),
48+
}
4449

4550
try {
46-
measurePerformance('Connecting to puppeteer...')
51+
measurePerformance(performanceMeasurements)
52+
4753
// Connect to browserless.io (puppeteer websocket)
4854
browser = await puppeteer.connect({
4955
browserWSEndpoint: browserWsEndpoint,
5056
})
5157
const context = await browser.createIncognitoBrowserContext()
58+
measurePerformance(performanceMeasurements, 'puppeteer_connect')
5259

53-
measurePerformance('Open new page & set cookies...')
5460
const page = await context.newPage()
5561
const printUrlObj = new URL(printUrl)
5662
const requestCookies = parseCookies(event)
@@ -81,6 +87,7 @@ export default defineEventHandler(async (event) => {
8187
extraHeaders['Authorization'] = `Basic ${basicAuthToken}`
8288
await page.setExtraHTTPHeaders(extraHeaders)
8389
}
90+
measurePerformance(performanceMeasurements, 'open_page')
8491

8592
/**
8693
* Debugging puppeteer
@@ -100,20 +107,20 @@ export default defineEventHandler(async (event) => {
100107
}) */
101108

102109
// set HTML content of current page
103-
measurePerformance('Puppeteer load HTML content...')
104110
page.setUserAgent(
105111
'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:96.0) Gecko/20100101 Firefox/96.0'
106112
)
107113

108114
// HTTP request back to Print Nuxt App
109115
const queryParams = getQuery(event)
116+
logOutput.config = queryParams.config
110117
await page.goto(`${printUrl}/?config=${queryParams.config}`, {
111118
timeout: renderHtmlTimeoutMs || 30000,
112119
waitUntil: 'networkidle0',
113120
})
121+
measurePerformance(performanceMeasurements, 'load_content')
114122

115123
// print pdf
116-
measurePerformance('Generate PDf...')
117124
const pdf = await page.pdf({
118125
printBackground: true,
119126
format: 'A4',
@@ -129,10 +136,9 @@ export default defineEventHandler(async (event) => {
129136
},
130137
timeout: renderPdfTimeoutMs || 30000,
131138
})
139+
measurePerformance(performanceMeasurements, 'generate_pdf')
132140

133-
measurePerformance()
134141
browser.disconnect()
135-
136142
defaultContentType(event, 'application/pdf')
137143
return pdf
138144
} catch (error) {
@@ -141,7 +147,7 @@ export default defineEventHandler(async (event) => {
141147
}
142148

143149
let errorMessage = null
144-
let status = 500
150+
status = 500
145151
if (error.error) {
146152
// error is a WebSocket ErrorEvent Object which contains an error property
147153
errorMessage = error.error.message
@@ -154,10 +160,14 @@ export default defineEventHandler(async (event) => {
154160
}
155161

156162
captureError(error)
157-
163+
logOutput.error = errorMessage
158164
setResponseStatus(event, status)
159165
defaultContentType(event, 'application/problem+json')
160166
return { status, title: errorMessage }
167+
} finally {
168+
logOutput.measurements = performanceMeasurements.measurements
169+
logOutput.status = status
170+
console.log(logOutput)
161171
}
162172
})
163173

0 commit comments

Comments
 (0)