Files
cloudflare-domain-manager/apps/api/src/routes/origin-health-checks.ts
T
Denozordec 3f6f402872
quality / commitlint (push) Skipped
CD / update-wiki (push) Failing after 8s
quality / changes (push) Successful in 5s
quality / docker-check (push) Skipped
quality / web (push) Successful in 50s
quality / api (push) Successful in 41s
CD / quality (push) Successful in 1m40s
CD / publish (push) Successful in 1m33s
feat(health-checks): enhance health check functionality and add new routes
- Introduced origin health check routes and integrated them into the application.
- Updated health check configuration to include success recovery thresholds.
- Expanded error handling with new error codes for health check failures.
- Added new service routes for managing health checks, including creation and listing.
- Improved health check service logic to track consecutive successes and failures.

This commit enhances the health check capabilities, providing better monitoring and management of service health.
2026-08-19 12:26:12 +07:00

78 lines
2.4 KiB
TypeScript

import type { FastifyInstance } from "fastify";
import {
createOriginHealthCheckSchema,
} from "@cfdm/shared";
import * as originHealth from "../services/origin-health-check-service.js";
import { recordAudit } from "../lib/audit.js";
export async function originHealthCheckRoutes(app: FastifyInstance) {
app.get("/health-checks", async (request) => {
return originHealth.listOriginHealthChecks(request.server.db);
});
app.post("/health-checks", async (request) => {
const body = createOriginHealthCheckSchema.parse(request.body);
const check = await originHealth.createOriginHealthCheck(
request.server.db,
request.server.cf,
body,
);
recordAudit(request.server, request, {
action: "healthcheck.create",
targetType: "app_resource",
targetId: String(check.id),
summary: `Создан health check «${check.name}» (${check.provider})`,
});
return check;
});
app.get("/health-checks/:id", async (request) => {
const { id } = request.params as { id: string };
return originHealth.getOriginHealthCheck(request.server.db, Number(id));
});
app.patch("/health-checks/:id", async (request) => {
const { id } = request.params as { id: string };
const body = createOriginHealthCheckSchema.partial().parse(request.body);
const check = await originHealth.updateOriginHealthCheck(
request.server.db,
request.server.cf,
Number(id),
body,
);
recordAudit(request.server, request, {
action: "healthcheck.update",
targetType: "app_resource",
targetId: id,
summary: `Обновлён health check «${check.name}»`,
});
return check;
});
app.delete("/health-checks/:id", async (request) => {
const { id } = request.params as { id: string };
await originHealth.deleteOriginHealthCheck(
request.server.db,
request.server.cf,
Number(id),
);
recordAudit(request.server, request, {
action: "healthcheck.delete",
severity: "warning",
targetType: "app_resource",
targetId: id,
summary: `Удалён health check ${id}`,
});
return { deleted: true };
});
app.post("/health-checks/:id/sync", async (request) => {
const { id } = request.params as { id: string };
return originHealth.syncOriginHealthCheck(
request.server.db,
request.server.cf,
Number(id),
);
});
}