From 85b0c4b97c186be58dfaacf769a1ece92dedb87f Mon Sep 17 00:00:00 2001 From: Romuald Quantin Date: Mon, 15 Sep 2025 09:23:56 +0000 Subject: [PATCH 1/5] Add healthcheck routes --- web-server/app/ping/route.ts | 10 ++++++++++ web-server/app/status/route.ts | 22 ++++++++++++++++++++++ 2 files changed, 32 insertions(+) create mode 100644 web-server/app/ping/route.ts create mode 100644 web-server/app/status/route.ts diff --git a/web-server/app/ping/route.ts b/web-server/app/ping/route.ts new file mode 100644 index 000000000..802e79a42 --- /dev/null +++ b/web-server/app/ping/route.ts @@ -0,0 +1,10 @@ +import { NextResponse } from 'next/server'; +import type { NextRequest } from 'next/server'; + +// For plain text response +export function GET(request: NextRequest) { + return new Response('OK', { + status: 200, + headers: { 'Content-Type': 'text/plain' }, + }); +} diff --git a/web-server/app/status/route.ts b/web-server/app/status/route.ts new file mode 100644 index 000000000..c690769e4 --- /dev/null +++ b/web-server/app/status/route.ts @@ -0,0 +1,22 @@ +import { NextResponse } from 'next/server'; +import type { NextRequest } from 'next/server'; +import { readFileSync } from 'fs'; +import { join } from 'path'; + +// Read and cache the version at module load +let version = 'unknown'; +try { + const pkgPath = join(process.cwd(), 'package.json'); + const pkgJson = JSON.parse(readFileSync(pkgPath, 'utf8')); + version = pkgJson.version || 'unknown'; +} catch (err) { + console.log(err); + // If reading fails, version stays 'unknown' +} + +export async function GET(request: NextRequest) { + return NextResponse.json({ + status: 'OK', + version, + }); +} \ No newline at end of file From 97723fbf8e0f6866aa95b179e9a6387fbaeadb62 Mon Sep 17 00:00:00 2001 From: Romuald Quantin Date: Mon, 15 Sep 2025 09:40:53 +0000 Subject: [PATCH 2/5] Update next responses --- web-server/app/ping/route.ts | 8 +++----- web-server/app/status/route.ts | 9 +++------ 2 files changed, 6 insertions(+), 11 deletions(-) diff --git a/web-server/app/ping/route.ts b/web-server/app/ping/route.ts index 802e79a42..be1382051 100644 --- a/web-server/app/ping/route.ts +++ b/web-server/app/ping/route.ts @@ -1,9 +1,7 @@ -import { NextResponse } from 'next/server'; -import type { NextRequest } from 'next/server'; +import { NextResponse } from "next/server"; -// For plain text response -export function GET(request: NextRequest) { - return new Response('OK', { +export function GET() { + return new NextResponse('OK', { status: 200, headers: { 'Content-Type': 'text/plain' }, }); diff --git a/web-server/app/status/route.ts b/web-server/app/status/route.ts index c690769e4..f57b288b3 100644 --- a/web-server/app/status/route.ts +++ b/web-server/app/status/route.ts @@ -1,22 +1,19 @@ import { NextResponse } from 'next/server'; -import type { NextRequest } from 'next/server'; import { readFileSync } from 'fs'; import { join } from 'path'; -// Read and cache the version at module load let version = 'unknown'; try { const pkgPath = join(process.cwd(), 'package.json'); const pkgJson = JSON.parse(readFileSync(pkgPath, 'utf8')); version = pkgJson.version || 'unknown'; } catch (err) { - console.log(err); - // If reading fails, version stays 'unknown' + console.log(err); } -export async function GET(request: NextRequest) { +export async function GET() { return NextResponse.json({ status: 'OK', version, }); -} \ No newline at end of file +} From 404e657865b3a52c4ff2329fbe3444ad232945a6 Mon Sep 17 00:00:00 2001 From: Romuald Quantin Date: Mon, 15 Sep 2025 11:53:38 +0000 Subject: [PATCH 3/5] Add route headers --- web-server/app/ping/route.ts | 6 +++++- web-server/app/status/route.ts | 9 ++++++++- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/web-server/app/ping/route.ts b/web-server/app/ping/route.ts index be1382051..f4829ede1 100644 --- a/web-server/app/ping/route.ts +++ b/web-server/app/ping/route.ts @@ -3,6 +3,10 @@ import { NextResponse } from "next/server"; export function GET() { return new NextResponse('OK', { status: 200, - headers: { 'Content-Type': 'text/plain' }, + headers: { + 'Content-Type': 'text/plain', + 'Cache-Control': 'no-store', + 'X-Robots-Tag': 'noindex' + }, }); } diff --git a/web-server/app/status/route.ts b/web-server/app/status/route.ts index f57b288b3..9322b2f19 100644 --- a/web-server/app/status/route.ts +++ b/web-server/app/status/route.ts @@ -8,12 +8,19 @@ try { const pkgJson = JSON.parse(readFileSync(pkgPath, 'utf8')); version = pkgJson.version || 'unknown'; } catch (err) { - console.log(err); + console.warn('status route: failed to read package.json for version', err instanceof Error ? err.message : err); } export async function GET() { return NextResponse.json({ status: 'OK', version, + }, + { + headers: { + 'Content-Type': 'text/plain', + 'Cache-Control': 'no-store', + 'X-Robots-Tag': 'noindex', + }, }); } From 129d75db151a9ad1b1516df661a3ab25383b1eaa Mon Sep 17 00:00:00 2001 From: Romuald Quantin Date: Mon, 15 Sep 2025 14:07:47 +0100 Subject: [PATCH 4/5] Fix node:fs and text plain --- web-server/app/status/route.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/web-server/app/status/route.ts b/web-server/app/status/route.ts index 9322b2f19..05c766ac9 100644 --- a/web-server/app/status/route.ts +++ b/web-server/app/status/route.ts @@ -1,5 +1,5 @@ import { NextResponse } from 'next/server'; -import { readFileSync } from 'fs'; +import { readFileSync } from 'node:fs'; import { join } from 'path'; let version = 'unknown'; @@ -18,7 +18,6 @@ export async function GET() { }, { headers: { - 'Content-Type': 'text/plain', 'Cache-Control': 'no-store', 'X-Robots-Tag': 'noindex', }, From f89867bc3362ddd8c59014212327e01f3d75b7e9 Mon Sep 17 00:00:00 2001 From: Romuald Quantin Date: Mon, 15 Sep 2025 14:09:30 +0100 Subject: [PATCH 5/5] Fix node path --- web-server/app/status/route.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/web-server/app/status/route.ts b/web-server/app/status/route.ts index 05c766ac9..325648974 100644 --- a/web-server/app/status/route.ts +++ b/web-server/app/status/route.ts @@ -1,6 +1,6 @@ import { NextResponse } from 'next/server'; import { readFileSync } from 'node:fs'; -import { join } from 'path'; +import { join } from 'node:path'; let version = 'unknown'; try {