bookworm-boot/patches/admin-cb-routes.js

55 lines
1.9 KiB
JavaScript
Raw Normal View History

'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' });
}
};
};