@@ -12,22 +12,19 @@ import { performance } from 'perf_hooks'
1212import { URL } from 'url'
1313import { 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
3330export 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