diff --git a/index.ts b/index.ts index d5e109f..64116f2 100644 --- a/index.ts +++ b/index.ts @@ -23,6 +23,8 @@ ffmpeg.setFfmpegPath('/usr/local/bin/ffmpeg') const maxRetries = 5 const innertubePool = createInnertubePool(parseInt(Bun.env.INNERTUBE_POOL_SIZE || '4')) +let consecutiveFailures = 0; + app.get('/health', async (req, res) => { try { const urls = ['/video/sRMMwpDTs5k', '/channel/UCEcryET60dO0HgVGjZ6WnXA', '/videos/UCEcryET60dO0HgVGjZ6WnXA'] @@ -38,15 +40,37 @@ app.get('/health', async (req, res) => { const isHealthy = results.every(result => result.status === 'healthy'); if (isHealthy) { - res.status(200).json({ message: 'All endpoints are healthy', results }); + consecutiveFailures = 0; + res.status(200).json({ message: 'All endpoints are healthy', results, consecutiveFailures }); } else { - res.status(500).json({ error: 'Health check failed', results }); - switchIps() + consecutiveFailures++; + console.log(`Health check failed. Consecutive failures: ${consecutiveFailures}`); + + if (consecutiveFailures === 3) { + console.log('3 consecutive failures reached. Switching IP in background...'); + switchIps().catch(err => console.error('Failed to switch IP:', err)); + } + + if (consecutiveFailures >= 6) { + res.status(500).json({ error: 'Health check failed', results, consecutiveFailures }); + } else { + res.status(200).json({ message: 'Health check failing but within allowed threshold', results, consecutiveFailures }); + } } } catch (error:any) { - console.error('Health check failed:', error.message); - switchIps() - res.status(500).json({ error: 'Health check failed', results: [], errorMessage: error.message }); + consecutiveFailures++; + console.error(`Health check error. Consecutive failures: ${consecutiveFailures}. Error:`, error.message); + + if (consecutiveFailures === 3) { + console.log('3 consecutive failures reached (from error). Switching IP in background...'); + switchIps().catch(err => console.error('Failed to switch IP:', err)); + } + + if (consecutiveFailures >= 6) { + res.status(500).json({ error: 'Health check failed', results: [], errorMessage: error.message, consecutiveFailures }); + } else { + res.status(200).json({ message: 'Health check failing but within allowed threshold (error)', errorMessage: error.message, consecutiveFailures }); + } } })