--- import Layout from '../layouts/Layout.astro'; import Header from '../components/Header.astro'; import MonitorCard from '../components/MonitorCard.astro'; import Footer from '../components/Footer.astro'; import { getStatusApiData } from '../lib/api.js'; import { parseConfig } from '../../../src/config/index.js'; import { interpolateSecrets } from '../../../src/utils/interpolate.js'; import { env } from 'cloudflare:workers'; let data: Awaited> | null = null; let error: Error | null = null; let banner: { url: string; link?: string } | undefined = undefined; try { // TypeScript doesn't know about MONITORS_CONFIG in cloudflare:workers env const envAny = env as any; const monitorsConfig = envAny.MONITORS_CONFIG; if (typeof monitorsConfig !== 'string' || !monitorsConfig) { throw new Error('MONITORS_CONFIG environment variable is not set or is not a string'); } const configYaml = interpolateSecrets(monitorsConfig, envAny); const config = parseConfig(configYaml); data = await getStatusApiData(env.DB, config); const bannerUrl = envAny.STATUS_BANNER_URL; const bannerLink = envAny.STATUS_BANNER_LINK; banner = bannerUrl ? { url: bannerUrl, link: bannerLink } : undefined; } catch (err) { console.error('Failed to fetch status data:', err); error = err as Error; } // Sort: down monitors first, then unknown, then up const sortOrder = { down: 0, maintenance: 1, unknown: 2, up: 3 } as const; const sortedMonitors = data ? [...data.monitors].sort( (a, b) => (sortOrder[a.status] ?? 1) - (sortOrder[b.status] ?? 1) ) : []; ---
{error ? (
⚠️

Service Temporarily Unavailable

We're having trouble loading status data. Please try again in a moment.

) : !data ? (

Loading status data...

) : data!.monitors.length === 0 ? (
📊

No Monitors Configured

Add monitors to start tracking your services.

) : ( <>
{sortedMonitors.map(monitor => )}
)}