aethex-forge/client/lib/discord-bot-status.ts
Builder.io dd76c5bcdf Add API_BASE and fix URL in discord-bot-status.ts
cgen-53c6cdaa8201491c839b0f5b69adb1dd
2025-11-13 02:55:33 +00:00

67 lines
1.7 KiB
TypeScript

const API_BASE = import.meta.env.VITE_API_BASE || "";
export interface BotHealthStatus {
status: "online" | "offline";
guilds: number;
commands: number;
uptime: number;
timestamp: string;
error?: string;
}
export async function checkBotHealth(): Promise<BotHealthStatus> {
try {
const response = await fetch(`${API_BASE}/api/discord/bot-health`, {
method: "GET",
headers: {
"Content-Type": "application/json",
},
});
if (!response.ok) {
return {
status: "offline",
guilds: 0,
commands: 0,
uptime: 0,
timestamp: new Date().toISOString(),
error: `HTTP ${response.status}: Failed to reach bot`,
};
}
const data = await response.json();
return {
status: data.status || "online",
guilds: data.guilds || 0,
commands: data.commands || 0,
uptime: data.uptime || 0,
timestamp: data.timestamp || new Date().toISOString(),
};
} catch (error) {
console.error("[Discord Bot Status] Error checking health:", error);
return {
status: "offline",
guilds: 0,
commands: 0,
uptime: 0,
timestamp: new Date().toISOString(),
error:
error instanceof Error
? error.message
: "Failed to reach bot health endpoint",
};
}
}
export function formatUptime(seconds: number): string {
const days = Math.floor(seconds / 86400);
const hours = Math.floor((seconds % 86400) / 3600);
const minutes = Math.floor((seconds % 3600) / 60);
const parts = [];
if (days > 0) parts.push(`${days}d`);
if (hours > 0) parts.push(`${hours}h`);
if (minutes > 0) parts.push(`${minutes}m`);
return parts.length > 0 ? parts.join(" ") : "< 1m";
}