import { useTranslation } from "next-i18next/pages"; import dynamic from "next/dynamic"; import { useCallback } from "react"; import Block from "../components/block"; import Container from "../components/container"; import useDataPoints from "./use-data-points"; import { parseVersionForUrl } from "utils/proxy/api-helpers"; import useWidgetAPI from "utils/proxy/use-widget-api"; const ChartDual = dynamic(() => import("../components/chart_dual"), { ssr: false }); const defaultPointsLimit = 15; const defaultInterval = (isChart) => (isChart ? 1000 : 5000); export default function Component({ service }) { const { t } = useTranslation(); const { widget } = service; const { chart, metric } = widget; const { refreshInterval = defaultInterval(chart), pointsLimit = defaultPointsLimit, version = 3 } = widget; const apiVersion = parseVersionForUrl(version, 3); const rxKey = apiVersion === 3 ? "rx" : "bytes_recv"; const txKey = apiVersion === 3 ? "tx" : "bytes_sent"; const [, interfaceName] = metric.split(":"); const [dataPoints, addDataPoint] = useDataPoints(pointsLimit, { a: 0, b: 0 }); const handleData = useCallback( (newData) => { if (!newData?.error) { const interfaceData = newData.find((item) => item[item.key] === interfaceName); if (interfaceData) { addDataPoint({ a: (interfaceData[rxKey] * 8) / interfaceData.time_since_update, b: (interfaceData[txKey] * 8) / interfaceData.time_since_update, }); } } }, [addDataPoint, interfaceName, rxKey, txKey], ); const { data, error } = useWidgetAPI( widget, `${apiVersion}/network`, { refreshInterval: Math.max(defaultInterval(chart), refreshInterval), }, { onSuccess: handleData }, ); if (error || (data && data.error)) { const finalError = error || data.error; return ; } if (!data) { return ( - ); } const interfaceData = data.find((item) => item[item.key] === interfaceName); if (!interfaceData) { return ( - ); } return ( {chart && ( t("common.bitrate", { value, maximumFractionDigits: 0, }) } /> )} {interfaceData && interfaceData.interface_name && chart && (
{interfaceData.interface_name}
)}
{t("common.bitrate", { value: (interfaceData[rxKey] * 8) / interfaceData.time_since_update, maximumFractionDigits: 0, })}{" "} {t("docker.rx")}
{!chart && ( {interfaceData && interfaceData.interface_name && (
{interfaceData.interface_name}
)}
)}
{t("common.bitrate", { value: (interfaceData[txKey] * 8) / interfaceData.time_since_update, maximumFractionDigits: 0, })}{" "} {t("docker.tx")}
); }