@@ -8,7 +8,7 @@ import path from 'path';
88
99import { config , logger } from './config' ;
1010import { jobDurationSeconds , jobTotalLatencySeconds , jobsEnqueuedTotal , jobsTotal } from './metrics' ;
11- import { initPage } from './puppeteer' ;
11+ import { closeBrowser , initPage , isBrowserConnectionError } from './puppeteer' ;
1212import { createCarbonImage } from './services/carbon' ;
1313import { convertJobToSnapshot , deleteSnapshots , formatSnapshot } from './services/snapshot' ;
1414import { Job , JobState , Snapshot , SnapshotModel , sequelize } from './store' ;
@@ -45,6 +45,7 @@ export function createCrawlQueue(queue: string, handler?: PageHandler) {
4545 options : {
4646 concurrency : config . concurrency ,
4747 enableScheduledJob : true ,
48+ maxRetries : 3 ,
4849 } ,
4950 onJob : async ( job : JobState ) => {
5051 const startTime = Date . now ( ) ;
@@ -260,6 +261,21 @@ export const getPageContent = async (
260261 let screenshot : Uint8Array | null = null ;
261262 const meta : { title ?: string ; description ?: string } = { } ;
262263
264+ const closePageSafely = async ( ) => {
265+ try {
266+ await page . close ( ) ;
267+ } catch ( error ) {
268+ if ( isBrowserConnectionError ( error ) ) {
269+ try {
270+ await closeBrowser ( { trimCache : false } ) ;
271+ } catch ( closeError ) {
272+ logger . warn ( 'Failed to close browser after page close error' , { error : closeError } ) ;
273+ }
274+ }
275+ logger . warn ( 'Failed to close page:' , { error } ) ;
276+ }
277+ } ;
278+
263279 try {
264280 const response = await page . goto ( url , { timeout } ) ;
265281
@@ -359,11 +375,20 @@ export const getPageContent = async (
359375 logger . error ( 'Failed to get html:' , err ) ;
360376 throw err ;
361377 }
378+
379+ await closePageSafely ( ) ;
362380 } catch ( error ) {
381+ if ( isBrowserConnectionError ( error ) ) {
382+ try {
383+ await closeBrowser ( { trimCache : false } ) ;
384+ } catch ( closeError ) {
385+ logger . warn ( 'Failed to close browser after page error' , { error : closeError } ) ;
386+ }
387+ } else {
388+ await closePageSafely ( ) ;
389+ }
363390 logger . error ( 'Failed to get page content:' , error ) ;
364391 throw error ;
365- } finally {
366- await page . close ( ) ;
367392 }
368393
369394 return {
0 commit comments