← Back
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;

📜 Git History

06783dafix: options-screener-v2 — 9 bug fixes, 5 strategy improvements, 2 infra enhancements3 months ago
163bb5dfeat: migrate to options-screener-v2 folder to isolate deployment4 months ago
Show last diff
Loading...