← Назад
const { Router } = require('express'); const { cache } = require('../services/cache'); const db = require('../services/db'); const router = Router(); const startedAt = new Date().toISOString(); router.get('/health', async (req, res) => { const optionsCount = cache.options ? cache.options.length : 0; const greeksLoaded = !!cache.greeks; const greeksCount = cache.greeks ? Object.keys(cache.greeks).length : 0; const ready = optionsCount > 0 && greeksLoaded; // Check DB connectivity let dbStatus = 'unknown'; try { await db.$queryRaw`SELECT 1`; dbStatus = 'connected'; } catch { dbStatus = 'disconnected'; } // Staleness check — data older than 10 minutes is stale let dataAge = null; let isStale = false; if (cache.lastUpdate) { dataAge = Math.floor((Date.now() - new Date(cache.lastUpdate).getTime()) / 1000); isStale = dataAge > 600; // 10 minutes } const overallOk = ready && dbStatus === 'connected' && !isStale; res.status(overallOk ? 200 : 503).json({ status: overallOk ? 'ok' : 'degraded', lastUpdate: cache.lastUpdate, dataAgeSec: dataAge, isStale, optionsCount, greeksLoaded, greeksCount, database: dbStatus, uptime: Math.floor(process.uptime()), startedAt, }); }); module.exports = router;