From 67147afefc39233021140ea5c6c40b2702e1e3a0 Mon Sep 17 00:00:00 2001 From: hamster1963 <1410514192@qq.com> Date: Fri, 6 Dec 2024 15:19:33 +0800 Subject: [PATCH] feat: chart peak cut switch --- bun.lockb | Bin 298242 -> 298962 bytes package.json | 1 + src/components/NetworkChart.tsx | 79 +++++++++++++++++++++++++++++--- src/components/ui/switch.tsx | 27 +++++++++++ 4 files changed, 101 insertions(+), 6 deletions(-) create mode 100644 src/components/ui/switch.tsx diff --git a/bun.lockb b/bun.lockb index c8e16f2d3cb3e975526ea748d6b2adde7007ac04..580e885de050c63b1b077e51c790660d101e5c24 100755 GIT binary patch delta 46840 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
#>vTDxOp| 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

` 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 diff --git a/package.json b/package.json index 4f1e49a..53ecab8 100644 --- a/package.json +++ b/package.json @@ -19,6 +19,7 @@ "@radix-ui/react-progress": "^1.1.0", "@radix-ui/react-separator": "^1.1.0", "@radix-ui/react-slot": "^1.1.0", + "@radix-ui/react-switch": "^1.1.1", "@tanstack/react-query": "^5.62.2", "@tanstack/react-query-devtools": "^5.62.2", "@tanstack/react-table": "^8.20.5", diff --git a/src/components/NetworkChart.tsx b/src/components/NetworkChart.tsx index 4dbdb42..5a47f71 100644 --- a/src/components/NetworkChart.tsx +++ b/src/components/NetworkChart.tsx @@ -25,10 +25,12 @@ import { useTranslation } from "react-i18next"; import { CartesianGrid, Line, LineChart, XAxis, YAxis } from "recharts"; import NetworkChartLoading from "./NetworkChartLoading"; import { NezhaMonitor, ServerMonitorChart } from "@/types/nezha-api"; +import { Switch } from "./ui/switch"; +import { Label } from "./ui/label"; interface ResultItem { created_at: number; - [key: string]: number | null; + [key: string]: number; } export function NetworkChart({ @@ -112,6 +114,7 @@ export const NetworkChartClient = React.memo(function NetworkChart({ const defaultChart = "All"; const [activeChart, setActiveChart] = React.useState(defaultChart); + const [isPeakEnabled, setIsPeakEnabled] = React.useState(false); const handleButtonClick = useCallback( (chart: string) => { @@ -175,6 +178,63 @@ export const NetworkChartClient = React.memo(function NetworkChart({ )); }, [activeChart, defaultChart, chartDataKey, getColorByIndex]); + const processedData = useMemo(() => { + if (!isPeakEnabled) { + return activeChart === defaultChart + ? formattedData + : chartData[activeChart]; + } + + // 如果开启了削峰,对数据进行处理 + const data = ( + activeChart === defaultChart ? formattedData : chartData[activeChart] + ) as ResultItem[]; + const windowSize = 7; // 增加到7个点的移动平均 + const weights = [0.1, 0.1, 0.15, 0.3, 0.15, 0.1, 0.1]; // 加权平均的权重 + + return data.map((point, index) => { + if (index < windowSize - 1) return point; + + const window = data.slice(index - windowSize + 1, index + 1); + const smoothed = { ...point } as ResultItem; + + if (activeChart === defaultChart) { + // 处理所有线路的数据 + chartDataKey.forEach((key) => { + const values = window + .map((w) => w[key]) + .filter((v) => v !== undefined && v !== null) as number[]; + if (values.length === windowSize) { + smoothed[key] = values.reduce( + (acc, val, idx) => acc + val * weights[idx], + 0, + ); + } + }); + } else { + // 处理单条线路的数据 + const values = window + .map((w) => w.avg_delay) + .filter((v) => v !== undefined && v !== null) as number[]; + if (values.length === windowSize) { + smoothed.avg_delay = values.reduce( + (acc, val, idx) => acc + val * weights[idx], + 0, + ); + } + } + + return smoothed; + }); + }, [ + isPeakEnabled, + activeChart, + formattedData, + chartData, + chartDataKey, + defaultChart, + ]); + return ( @@ -185,6 +245,16 @@ export const NetworkChartClient = React.memo(function NetworkChart({ {chartDataKey.length} {t("monitor.monitorCount")} +

+ + +
{chartButtons}
@@ -195,11 +265,7 @@ export const NetworkChartClient = React.memo(function NetworkChart({ > @@ -282,6 +348,7 @@ const formatData = (rawData: NezhaMonitor[]) => { } const timeIndex = created_at.indexOf(time); + // @ts-expect-error - avg_delay is an array result[time][monitor_name] = timeIndex !== -1 ? avg_delay[timeIndex] : null; }); diff --git a/src/components/ui/switch.tsx b/src/components/ui/switch.tsx new file mode 100644 index 0000000..ad657f3 --- /dev/null +++ b/src/components/ui/switch.tsx @@ -0,0 +1,27 @@ +import * as React from "react"; +import * as SwitchPrimitives from "@radix-ui/react-switch"; + +import { cn } from "@/lib/utils"; + +const Switch = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + + + +)); +Switch.displayName = SwitchPrimitives.Root.displayName; + +export { Switch };