const statusIcon = document.getElementById("status-icon"); const statusText = document.getElementById("status-text"); const serviceUp = { color: ["bg-green-500", "dark:bg-green-400"], text: "All Services Operational", }; const serviceDegraded = { color: ["bg-yellow-400", "dark:bg-yellow-200"], text: "Degraded Services", }; const serviceDown = { color: ["bg-red-600", "dark:bg-red-500"], text: "All Services Down", }; const serviceUnknown = { color: ["bg-gray-500", "dark:bg-gray-400"], text: "Services Status Unknown", }; async function getServicesHealth() { try { const serviceStatus = await fetch( "https://status.wah.su/api/status-page/heartbeat/services" ); const services = await serviceStatus.json(); const heartbeatDict = services.heartbeatList; let lastHeartbeats = []; for (const [key, value] of Object.entries(heartbeatDict)) { lastHeartbeats.push( heartbeatDict[key][heartbeatDict[key].length - 1].status ); } let status = "up"; const count = lastHeartbeats.reduce((partialSum, a) => partialSum + a, 0); if (count === lastHeartbeats.length) { status = "up"; } else if (count === 0) { status = "down"; } else { status = "degraded"; } if (status === "up") { statusIcon.classList.add(...serviceUp.color); statusIcon.classList.remove( ...serviceDegraded.color, ...serviceDown.color, ...serviceUnknown.color ); statusText.textContent = serviceUp.text; } else if (status === "degraded") { statusIcon.classList.add(...serviceDegraded.color); statusIcon.classList.remove( ...serviceUp.color, ...serviceDown.color, ...serviceUnknown.color ); statusText.textContent = serviceDegraded.text; } else if (status === "down") { statusIcon.classList.add(...serviceDown.color); statusIcon.classList.remove( ...serviceUp.color, ...serviceDegraded.color, ...serviceUnknown.color ); statusText.textContent = serviceDown.text; } } catch (error) { statusIcon.classList.add(...serviceUnknown.color); statusIcon.classList.remove( ...serviceUp.color, ...serviceDegraded.color, ...serviceDown.color ); statusText.textContent = serviceUnknown.text; console.log("Failed to fetch services status: " + error); return; } } getServicesHealth(); setInterval(getServicesHealth, 600000);