From ba2b2fc50a11b8a11a251d3d1acbc7726cd066a0 Mon Sep 17 00:00:00 2001 From: Xevion Date: Thu, 29 Jan 2026 19:49:57 -0600 Subject: [PATCH] fix: increase Banner API timeouts to handle slow responses --- src/banner/api.rs | 6 +++--- web/src/lib/date.ts | 4 +--- web/src/routes/(app)/admin/jobs/+page.svelte | 8 ++++++-- 3 files changed, 10 insertions(+), 8 deletions(-) diff --git a/src/banner/api.rs b/src/banner/api.rs index 8e84909..fec614d 100644 --- a/src/banner/api.rs +++ b/src/banner/api.rs @@ -40,9 +40,9 @@ impl BannerApi { .cookie_store(false) .user_agent(user_agent()) .tcp_keepalive(Some(std::time::Duration::from_secs(60 * 5))) - .read_timeout(std::time::Duration::from_secs(10)) - .connect_timeout(std::time::Duration::from_secs(10)) - .timeout(std::time::Duration::from_secs(30)) + .read_timeout(std::time::Duration::from_secs(20)) + .connect_timeout(std::time::Duration::from_secs(15)) + .timeout(std::time::Duration::from_secs(40)) .build() .context("Failed to create HTTP client")?, ) diff --git a/web/src/lib/date.ts b/web/src/lib/date.ts index e8b7a64..60a3df9 100644 --- a/web/src/lib/date.ts +++ b/web/src/lib/date.ts @@ -7,9 +7,7 @@ export function formatRelativeDate(date: string | Date): string { } /** Returns a full absolute datetime string for tooltip display, e.g. "Jan 29, 2026, 3:45:12 PM". */ -export function formatAbsoluteDate(date: string | Date | null | undefined): string { - if (date == null) return "—"; +export function formatAbsoluteDate(date: string | Date): string { const d = typeof date === "string" ? new Date(date) : date; - if (Number.isNaN(d.getTime())) return "—"; return format(d, "MMM d, yyyy, h:mm:ss a"); } diff --git a/web/src/routes/(app)/admin/jobs/+page.svelte b/web/src/routes/(app)/admin/jobs/+page.svelte index 75f3540..4e74eb1 100644 --- a/web/src/routes/(app)/admin/jobs/+page.svelte +++ b/web/src/routes/(app)/admin/jobs/+page.svelte @@ -284,9 +284,13 @@ function getTimingDisplay( const tooltipLines = [ `Queued: ${formatAbsoluteDate(job.queuedAt)}`, `Waited: ${formatDuration(Math.max(0, waitedMs))}`, - `Locked: ${formatAbsoluteDate(job.lockedAt)}`, - `${job.status === "staleLock" ? "Stale for" : "Processing"}: ${formatDuration(processingMs)}`, ]; + if (job.lockedAt) { + tooltipLines.push(`Locked: ${formatAbsoluteDate(job.lockedAt)}`); + } + tooltipLines.push( + `${job.status === "staleLock" ? "Stale for" : "Processing"}: ${formatDuration(processingMs)}`, + ); return { text: `${prefix} ${formatDuration(processingMs)}`,