← Назад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;