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 ( ); }