import Block from "components/services/widget/block";
import Container from "components/services/widget/container";
import { useTranslation } from "next-i18next";
import useWidgetAPI from "utils/proxy/use-widget-api";
const MAX_ALLOWED_FIELDS = 4;
export default function Component({ service }) {
const { t } = useTranslation();
const { widget } = service;
if (!widget.fields) {
widget.fields = ["sites", "resources", "targets", "traffic"];
} else if (widget.fields?.length > MAX_ALLOWED_FIELDS) {
widget.fields = widget.fields.slice(0, MAX_ALLOWED_FIELDS);
}
const { data: sitesData, error: sitesError } = useWidgetAPI(widget, "sites");
const { data: resourcesData, error: resourcesError } = useWidgetAPI(widget, "resources");
if (sitesError || resourcesError) {
return ;
}
if (!sitesData || !resourcesData) {
return (
);
}
const sites = sitesData.data?.sites || [];
const resources = resourcesData.data?.resources || [];
const sitesTotal = sites.length;
const sitesOnline = sites.filter((s) => s.online).length;
const resourcesTotal = resources.length;
const resourcesHealthy = resources.filter(
(r) => r.targets?.some((t) => t.healthStatus !== "unhealthy") || !r.targets?.length,
).length;
const targetsTotal = resources.reduce((sum, r) => sum + (r.targets?.length || 0), 0);
const targetsHealthy = resources.reduce(
(sum, r) => sum + (r.targets?.filter((t) => t.healthStatus !== "unhealthy").length || 0),
0,
);
const trafficIn = sites.reduce((sum, s) => sum + (s.megabytesIn || 0), 0) * 1_000_000;
const trafficOut = sites.reduce((sum, s) => sum + (s.megabytesOut || 0), 0) * 1_000_000;
const trafficTotal = trafficIn + trafficOut;
return (
);
}