Files
snort/packages/app/src/Components/Relay/uptime.tsx
2024-09-11 21:41:37 +01:00

44 lines
1.1 KiB
TypeScript

import { sanitizeRelayUrl, unixNow } from "@snort/shared";
import { EventKind, RequestBuilder } from "@snort/system";
import { useRequestBuilder } from "@snort/system-react";
import { useMemo } from "react";
import { findTag } from "@/Utils";
import { Day, MonitorRelays } from "@/Utils/Const";
import UptimeLabel from "./uptime-label";
export default function RelayUptime({ url }: { url: string }) {
const sub = useMemo(() => {
const u = sanitizeRelayUrl(url);
if (!u) return;
const rb = new RequestBuilder(`uptime`);
rb.withFilter()
.kinds([30_166 as EventKind])
.tag("d", [u])
.since(unixNow() - Day)
.relay(MonitorRelays);
return rb;
}, [url]);
const data = useRequestBuilder(sub);
const myData = data.filter(a => findTag(a, "d") === url);
const ping = myData.reduce(
(acc, v) => {
const read = findTag(v, "rtt-read");
if (read) {
acc.n += 1;
acc.total += Number(read);
}
return acc;
},
{
n: 0,
total: 0,
},
);
const avgPing = ping.total / ping.n;
return <UptimeLabel avgPing={avgPing} />;
}