@@ -13,22 +13,19 @@ import { URL } from 'url'
1313import { memoryUsage } from 'process'
1414import * 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
3431export 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