Skip to content

Commit 11bbeef

Browse files
authored
Merge pull request ecamp#5280 from usu/chore/print-logging
chore(print): improved request logging for nuxt-print
2 parents b94ba35 + ca58443 commit 11bbeef

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
@@ -13,22 +13,19 @@ import { URL } from 'url'
1313
import { memoryUsage } from 'process'
1414
import * as Sentry from '@sentry/node'
1515

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

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

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

3431
export default defineEventHandler(async (event) => {
@@ -42,16 +39,25 @@ export default defineEventHandler(async (event) => {
4239
} = useRuntimeConfig(event)
4340

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

4651
try {
47-
measurePerformance('Connecting to puppeteer...')
52+
measurePerformance(performanceMeasurements)
53+
4854
// Connect to browserless.io (puppeteer websocket)
4955
browser = await puppeteer.connect({
5056
browserWSEndpoint: browserWsEndpoint,
5157
})
5258
const context = await browser.createIncognitoBrowserContext()
59+
measurePerformance(performanceMeasurements, 'puppeteer_connect')
5360

54-
measurePerformance('Open new page & set cookies...')
5561
const page = await context.newPage()
5662
const printUrlObj = new URL(printUrl)
5763
const requestCookies = parseCookies(event)
@@ -82,6 +88,7 @@ export default defineEventHandler(async (event) => {
8288
extraHeaders['Authorization'] = `Basic ${basicAuthToken}`
8389
await page.setExtraHTTPHeaders(extraHeaders)
8490
}
91+
measurePerformance(performanceMeasurements, 'open_page')
8592

8693
/**
8794
* Debugging puppeteer
@@ -101,20 +108,20 @@ export default defineEventHandler(async (event) => {
101108
}) */
102109

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

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

116124
// print pdf
117-
measurePerformance('Generate PDf...')
118125
const pdf = await page.pdf({
119126
printBackground: true,
120127
format: 'A4',
@@ -130,10 +137,9 @@ export default defineEventHandler(async (event) => {
130137
},
131138
timeout: renderPdfTimeoutMs || 30000,
132139
})
140+
measurePerformance(performanceMeasurements, 'generate_pdf')
133141

134-
measurePerformance()
135142
browser.disconnect()
136-
137143
defaultContentType(event, 'application/pdf')
138144
return pdf
139145
} catch (error) {
@@ -142,7 +148,7 @@ export default defineEventHandler(async (event) => {
142148
}
143149

144150
let errorMessage = null
145-
let status = 500
151+
status = 500
146152
if (error.error) {
147153
// error is a WebSocket ErrorEvent Object which contains an error property
148154
errorMessage = error.error.message
@@ -155,10 +161,14 @@ export default defineEventHandler(async (event) => {
155161
}
156162

157163
captureError(error)
158-
164+
logOutput.error = errorMessage
159165
setResponseStatus(event, status)
160166
defaultContentType(event, 'application/problem+json')
161167
return { status, title: errorMessage }
168+
} finally {
169+
logOutput.measurements = performanceMeasurements.measurements
170+
logOutput.status = status
171+
console.log(logOutput)
162172
}
163173
})
164174

0 commit comments

Comments
 (0)