next-actuator
Version:
A fully composable actuator implementation for Next.js projects
22 lines • 1.14 kB
JavaScript
const evaluateComponent = async (req, name, component) => {
const status = await component
.status(req)
.then((res) => (typeof res === 'boolean' ? res : res < 400) ? 'UP' : 'DOWN')
.catch(() => 'DOWN');
return [name, { status, details: component.details }];
};
export const handleHealth = async (req, config) => {
const componentEvaluationPromises = Object
.entries(config.components)
.map(([name, component]) => evaluateComponent(req, name, component));
const results = await Promise.all(componentEvaluationPromises);
const hasNormalDown = results.some(([name, result]) => result.status === 'DOWN' && config.components[name].strategy !== 'DEGRADED');
const hasDegradedDown = results.some(([name, result]) => result.status === 'DOWN' && config.components[name].strategy === 'DEGRADED');
const status = hasNormalDown ? 'DOWN' : hasDegradedDown ? 'DEGRADED' : 'UP';
const res = {
status,
...(results.length > 0 && { components: Object.fromEntries(results) })
};
return Response.json(res, { status: 200 });
};
//# sourceMappingURL=handle-health.js.map