---
import type { ApiMonitorStatus } from '@worker/types';
import UptimeBars from './UptimeBars.astro';
interface Props {
monitor: ApiMonitorStatus;
}
const { monitor } = Astro.props;
const uptimeFormatted = monitor.uptimePercent.toFixed(2);
function formatLastChecked(timestamp: number | undefined): string {
if (timestamp == null) return 'Never';
const now = Math.floor(Date.now() / 1000);
const diffSeconds = now - timestamp;
if (diffSeconds < 60) return '';
if (diffSeconds < 3600) {
const minutes = Math.floor(diffSeconds / 60);
return `${minutes}m ago`;
}
if (diffSeconds < 86400) {
const hours = Math.floor(diffSeconds / 3600);
return `${hours}h ago`;
}
const days = Math.floor(diffSeconds / 86400);
return `${days}d ago`;
}
const lastCheckedText = formatLastChecked(monitor.lastChecked);
const chartData = JSON.stringify({
timestamps: monitor.recentChecks.map(c => c.timestamp),
responseTimes: monitor.recentChecks.map(c => c.responseTimeMs),
statuses: monitor.recentChecks.map(c => c.status),
});
---
{monitor.name}
{uptimeFormatted}%
{lastCheckedText}