Files
donutbrowser/donut-sync/src/app.controller.ts
T
2026-08-10 15:47:31 +04:00

44 lines
1.3 KiB
TypeScript

import { Controller, Get, HttpException, HttpStatus } from "@nestjs/common";
import { AppService } from "./app.service.js";
import { SyncService } from "./sync/sync.service.js";
@Controller()
export class AppController {
constructor(
private readonly appService: AppService,
private readonly syncService: SyncService,
) {}
@Get()
getHello(): string {
return this.appService.getHello();
}
@Get("health")
getHealth(): { status: string } {
return { status: "ok" };
}
// `storageEndpoint` is the host clients are handed in presigned URLs. The
// server cannot tell whether a client can reach it, so report it and let
// whoever is debugging a failing sync compare it against their network.
// Self-hosted only — see getDiagnosticStorageEndpoint.
@Get("readyz")
async getReadiness(): Promise<{
status: string;
s3: boolean;
storageEndpoint?: string;
}> {
const s3Ready = await this.syncService.checkS3Connectivity();
const storageEndpoint = this.syncService.getDiagnosticStorageEndpoint();
const diagnostic = storageEndpoint ? { storageEndpoint } : {};
if (!s3Ready) {
throw new HttpException(
{ status: "not ready", s3: false, ...diagnostic },
HttpStatus.SERVICE_UNAVAILABLE,
);
}
return { status: "ready", s3: true, ...diagnostic };
}
}