import { useState, useEffect } from "react"; import { service, up_time_data } from "../data"; import DateUtils from "../utils/DateUtils"; import langs from "../config/langs"; import API from "../config/API"; const IncidentService = () => { async function lastDaysFailures() { const { beginningOf, endOf, nowSubtract, parseISO, toUnix } = DateUtils; const failureData = []; // const start = beginningOf("day", nowSubtract(86400 * 90)); // const end = endOf("tomorrow"); const data = await API.service_failures_data(); data.forEach((d) => { let date = DateUtils.parseISO(d.timeframe); failureData.push({ month: date.getMonth(), day: date.getDate(), date: date, amount: d.amount, }); }); return failureData; } const [hoverText, setHoverText] = useState(""); const [data, setData] = useState([]); const [loaded, setLoaded] = useState(false); useEffect(async () => { const failureData = await lastDaysFailures(); setData(failureData); setLoaded(true); }, []); const handleMouseOut = () => { setHoverText(""); }; const handleMouseOver = (d) => { const start = DateUtils.parseISO(d.start); const end = DateUtils.parseISO(d.end); const duration = DateUtils.humanTime(d.duration); setHoverText( `${start.toLocaleDateString()} - ${end.toLocaleDateString()} ${duration} ${d.online ? "Online" : "Offline"}` ); }; const service_txt = () => { return DateUtils.smallText(service); }; const total_time_frame = up_time_data.uptime + up_time_data.downtime; return (
{/** TODO: change span to navlink */} Status Ping {service.online ? "ONLINE" : "OFFLINE"}
{up_time_data.series.map((d, i) => { const time = ((d.duration * 100) / total_time_frame).toFixed(2); const width = time < 0.1 ? 0.15 : time; return (
handleMouseOver(d)} onMouseOut={handleMouseOut} key={i} > {d.amount !== 0 && ( )}
); })}

{DateUtils.duration(up_time_data.uptime, up_time_data.downtime)}{" "} {langs("days_ago")} {service_txt()} {langs("today")}

{hoverText}
); }; export default IncidentService;