import {UptimeRecord} from "../nws-api/types"; import React, {useState} from "react"; import '../App.css'; import "./UptimeCard.css" import Modal from "react-modal"; function getUptimeClass(uptime: number) { if(uptime === 100) { return "stat-perfect"; } if(uptime >= 95) { return "stat-middle"; } return "stat-bad"; } function getResponseTimeClass(respTime: number) { // https://www.littledata.io/average/server-response-time if(respTime < 205) { return "stat-perfect"; } if(respTime < 495) { return "stat-middle"; } return "stat-bad"; } export default function UptimeComparisonCard(props: {uptime: UptimeRecord, isService: boolean}) { const [isModalOpen, setModalOpen] = useState(false); return(

setModalOpen(true)}>{props.uptime.name}


Uptime (Last Month)

{props.uptime.uptimeMonth}%


Uptime ({new Date().getFullYear()} YTD)

{props.uptime.uptimeYtd}%


Avg Response Time (24hr)

{props.uptime.averageResponseTime}ms


Current Status

{props.uptime.isUp ? 'Up' : (props.uptime.undergoingMaintenance ? 'Maintenance' : 'Down')}

{props.uptime.name}

{props.uptime.url &&

({props.uptime.url})

}

Monitoring since {props.uptime.monitorStart}

{new Date().getFullYear()} Uptime (YTD): {props.uptime.uptimeYtd}%

Last Month Uptime: {props.uptime.uptimeMonth}%

All-Time Uptime: {props.uptime.uptimeAllTime}%

Average Response Time: {props.uptime.averageResponseTime}ms

{ props.isService &&
Note that the uptime and performance of services hosted on NWS may be affected by factors not controlled by NWS such as bad bad optimization or buggy software.
}
); }