'use strict'; /** * Circuit Breaker 管理端点补丁 * 追加到 routes/admin.js 末尾 (在 module.exports 函数内) * * 用法: 部署时将此内容追加到 admin.js 的 registerAdminRoutes 函数体内 */ // ─── 熔断器状态查看 (admin) ─── // routes['GET:/v1/admin/circuit-breaker'] = async (req, res) => { // requireAdmin(req); // const cbStatus = deps.circuitBreaker.getStatus(); // const cbLog = deps.circuitBreaker.getTransitionLog(20); // json(res, 200, { ok: true, breakers: cbStatus, recentTransitions: cbLog }); // }; // ─── 熔断器重置 (admin) ─── // routes['POST:/v1/admin/circuit-breaker/reset'] = async (req, res) => { // requireAdmin(req); // const body = await parseJsonBody(req); // if (body.provider) { // deps.circuitBreaker.reset(body.provider); // json(res, 200, { ok: true, reset: body.provider }); // } else { // deps.circuitBreaker.resetAll(); // json(res, 200, { ok: true, reset: 'all' }); // } // }; module.exports = function patchAdminRoutes(routes, deps) { const { json, parseJsonBody, requireAdmin } = deps; routes['GET:/v1/admin/circuit-breaker'] = async (req, res) => { requireAdmin(req); const cbStatus = deps.circuitBreaker.getStatus(); const cbLog = deps.circuitBreaker.getTransitionLog ? deps.circuitBreaker.getTransitionLog(20) : []; json(res, 200, { ok: true, breakers: cbStatus, recentTransitions: cbLog }); }; routes['POST:/v1/admin/circuit-breaker/reset'] = async (req, res) => { requireAdmin(req); const body = await parseJsonBody(req); if (body.provider) { deps.circuitBreaker.reset(body.provider); json(res, 200, { ok: true, reset: body.provider }); } else if (deps.circuitBreaker.resetAll) { deps.circuitBreaker.resetAll(); json(res, 200, { ok: true, reset: 'all' }); } else { json(res, 400, { error: '请指定 provider' }); } }; };