From 34f29420df89ec892e8227d54cf1275dac29d23f Mon Sep 17 00:00:00 2001 From: hamster1963 <1410514192@qq.com> Date: Tue, 3 Dec 2024 16:15:38 +0800 Subject: [PATCH 1/2] feat: live speed --- .github/workflows/Deploy.yml | 2 +- .../ClientComponents/ServerOverviewClient.tsx | 45 ++++++++++++------- app/layout.tsx | 2 +- app/types/nezha-api.ts | 2 + components/ThemeColorManager.tsx | 35 ++++++++------- lib/serverFetch.tsx | 4 ++ messages/en.json | 1 + messages/ja.json | 1 + messages/zh-t.json | 1 + messages/zh.json | 1 + 10 files changed, 61 insertions(+), 33 deletions(-) diff --git a/.github/workflows/Deploy.yml b/.github/workflows/Deploy.yml index 18d3e20..00339af 100644 --- a/.github/workflows/Deploy.yml +++ b/.github/workflows/Deploy.yml @@ -62,7 +62,7 @@ jobs: uses: oven-sh/setup-bun@v1 with: bun-version: "latest" - + - name: Changelog run: bun x changelogithub env: diff --git a/app/(main)/ClientComponents/ServerOverviewClient.tsx b/app/(main)/ClientComponents/ServerOverviewClient.tsx index b15299d..2dc2552 100644 --- a/app/(main)/ClientComponents/ServerOverviewClient.tsx +++ b/app/(main)/ClientComponents/ServerOverviewClient.tsx @@ -3,6 +3,7 @@ import { ServerApi } from "@/app/types/nezha-api"; import { Loader } from "@/components/loading/Loader"; import { Card, CardContent } from "@/components/ui/card"; +import { Separator } from "@/components/ui/separator"; import getEnv from "@/lib/env-entry"; import { useFilter } from "@/lib/network-filter-context"; import { useStatus } from "@/lib/status-context"; @@ -52,7 +53,7 @@ export default function ServerOverviewClient() { "pointer-events-none": global, })} > - +

{t("p_816-881_Totalservers")} @@ -91,7 +92,7 @@ export default function ServerOverviewClient() { }, )} > - +

{t("p_1610-1676_Onlineservers")} @@ -131,7 +132,7 @@ export default function ServerOverviewClient() { }, )} > - +

{t("p_2532-2599_Offlineservers")} @@ -171,20 +172,34 @@ export default function ServerOverviewClient() { }, )} > - +

-

- {t("p_3463-3530_Totalbandwidth")} -

+
+

+ {t("p_3463-3530_Totalbandwidth")} +

+ +

{t("speed")}

+
{data?.result ? ( -
-

- ↑{formatBytes(data?.total_out_bandwidth)} -

-

- ↓{formatBytes(data?.total_in_bandwidth)} -

-
+ <> +
+

+ ↑{formatBytes(data?.total_out_bandwidth)} +

+

+ ↓{formatBytes(data?.total_in_bandwidth)} +

+
+
+

+ ↑{formatBytes(data?.total_out_speed)}/s +

+

+ ↓{formatBytes(data?.total_in_speed)}/s +

+
+ ) : (
diff --git a/app/layout.tsx b/app/layout.tsx index 048e5ce..67e9f9d 100644 --- a/app/layout.tsx +++ b/app/layout.tsx @@ -1,6 +1,6 @@ // @auto-i18n-check. Please do not delete the line. -import { MotionProvider } from "@/components/motion/motion-provider"; import { ThemeColorManager } from "@/components/ThemeColorManager"; +import { MotionProvider } from "@/components/motion/motion-provider"; import getEnv from "@/lib/env-entry"; import { FilterProvider } from "@/lib/network-filter-context"; import { StatusProvider } from "@/lib/status-context"; diff --git a/app/types/nezha-api.ts b/app/types/nezha-api.ts index 92dee5d..b284398 100644 --- a/app/types/nezha-api.ts +++ b/app/types/nezha-api.ts @@ -3,6 +3,8 @@ export type ServerApi = { offline_servers: number; total_out_bandwidth: number; total_in_bandwidth: number; + total_out_speed: number; + total_in_speed: number; result: NezhaAPISafe[]; }; diff --git a/components/ThemeColorManager.tsx b/components/ThemeColorManager.tsx index 46b9148..0db6ada 100644 --- a/components/ThemeColorManager.tsx +++ b/components/ThemeColorManager.tsx @@ -1,37 +1,40 @@ -'use client'; +"use client"; -import { useEffect } from 'react'; -import { useTheme } from 'next-themes'; +import { useTheme } from "next-themes"; +import { useEffect } from "react"; export function ThemeColorManager() { const { theme, systemTheme } = useTheme(); useEffect(() => { const updateThemeColor = () => { - const currentTheme = theme === 'system' ? systemTheme : theme; + const currentTheme = theme === "system" ? systemTheme : theme; const meta = document.querySelector('meta[name="theme-color"]'); - + if (!meta) { - const newMeta = document.createElement('meta'); - newMeta.name = 'theme-color'; + const newMeta = document.createElement("meta"); + newMeta.name = "theme-color"; document.head.appendChild(newMeta); } - - const themeColor = currentTheme === 'dark' - ? 'hsl(30 15% 8%)' // 深色模式背景色 - : 'hsl(0 0% 98%)'; // 浅色模式背景色 - - document.querySelector('meta[name="theme-color"]')?.setAttribute('content', themeColor); + + const themeColor = + currentTheme === "dark" + ? "hsl(30 15% 8%)" // 深色模式背景色 + : "hsl(0 0% 98%)"; // 浅色模式背景色 + + document + .querySelector('meta[name="theme-color"]') + ?.setAttribute("content", themeColor); }; // Update on mount and theme change updateThemeColor(); // Listen for system theme changes - const mediaQuery = window.matchMedia('(prefers-color-scheme: dark)'); - mediaQuery.addEventListener('change', updateThemeColor); + const mediaQuery = window.matchMedia("(prefers-color-scheme: dark)"); + mediaQuery.addEventListener("change", updateThemeColor); - return () => mediaQuery.removeEventListener('change', updateThemeColor); + return () => mediaQuery.removeEventListener("change", updateThemeColor); }, [theme, systemTheme]); return null; diff --git a/lib/serverFetch.tsx b/lib/serverFetch.tsx index cbb71fd..4cbbe32 100644 --- a/lib/serverFetch.tsx +++ b/lib/serverFetch.tsx @@ -44,6 +44,8 @@ export async function GetNezhaData() { offline_servers: 0, total_out_bandwidth: 0, total_in_bandwidth: 0, + total_in_speed: 0, + total_out_speed: 0, result: [], }; @@ -66,6 +68,8 @@ export async function GetNezhaData() { data.total_out_bandwidth += element.status.NetOutTransfer; data.total_in_bandwidth += element.status.NetInTransfer; + data.total_in_speed += element.status.NetInSpeed; + data.total_out_speed += element.status.NetOutSpeed; // Remove unwanted properties delete element.ipv4; diff --git a/messages/en.json b/messages/en.json index ad255fd..982cf33 100644 --- a/messages/en.json +++ b/messages/en.json @@ -4,6 +4,7 @@ "p_1610-1676_Onlineservers": "Online servers", "p_2532-2599_Offlineservers": "Offline servers", "p_3463-3530_Totalbandwidth": "Total bandwidth", + "speed": "speed", "error_message": "Please check your environment variables and review the server console", "no_data_message": "No data" }, diff --git a/messages/ja.json b/messages/ja.json index 00323aa..c62261d 100644 --- a/messages/ja.json +++ b/messages/ja.json @@ -4,6 +4,7 @@ "p_1610-1676_Onlineservers": "オンラインサーバー", "p_2532-2599_Offlineservers": "オフラインサーバー", "p_3463-3530_Totalbandwidth": "総流量", + "speed": "速度", "error_message": "環境変数を確認し、サーバーコンソールを確認してください", "no_data_message": "データなし" }, diff --git a/messages/zh-t.json b/messages/zh-t.json index 8e82230..0c99add 100644 --- a/messages/zh-t.json +++ b/messages/zh-t.json @@ -4,6 +4,7 @@ "p_1610-1676_Onlineservers": "在線伺服器", "p_2532-2599_Offlineservers": "離線伺服器", "p_3463-3530_Totalbandwidth": "總流量", + "speed": "速率", "error_message": "請檢查您的環境變數並檢查伺服器控制台", "no_data_message": "無資料" }, diff --git a/messages/zh.json b/messages/zh.json index 8fdad27..0668669 100644 --- a/messages/zh.json +++ b/messages/zh.json @@ -4,6 +4,7 @@ "p_1610-1676_Onlineservers": "在线服务器", "p_2532-2599_Offlineservers": "离线服务器", "p_3463-3530_Totalbandwidth": "总流量", + "speed": "速率", "error_message": "请检查您的环境变量并检查服务器控制台", "no_data_message": "无数据" }, From ccc875fb04ccec07ee7fdba4eb6e8b55d484b22e Mon Sep 17 00:00:00 2001 From: hamster1963 <1410514192@qq.com> Date: Tue, 3 Dec 2024 16:24:12 +0800 Subject: [PATCH 2/2] refactor(overview): sort by speed --- app/(main)/ClientComponents/ServerListClient.tsx | 8 ++++---- .../ClientComponents/ServerOverviewClient.tsx | 15 +++++++++------ app/(main)/page.tsx | 2 -- app/not-found.tsx | 2 -- 4 files changed, 13 insertions(+), 14 deletions(-) diff --git a/app/(main)/ClientComponents/ServerListClient.tsx b/app/(main)/ClientComponents/ServerListClient.tsx index 1e01f84..2f851ce 100644 --- a/app/(main)/ClientComponents/ServerListClient.tsx +++ b/app/(main)/ClientComponents/ServerListClient.tsx @@ -107,12 +107,12 @@ export default function ServerListClient() { : filteredServersByStatus.filter((server) => server.tag === tag); if (filter) { - // 根据使用流量进行从高到低排序 + // 根据使用速度进行从高到低排序 filteredServers.sort((a, b) => { return ( - b.status.NetInTransfer + - b.status.NetOutTransfer - - (a.status.NetInTransfer + b.status.NetOutTransfer) + b.status.NetInSpeed + + b.status.NetOutSpeed - + (a.status.NetInSpeed + b.status.NetOutSpeed) ); }); } diff --git a/app/(main)/ClientComponents/ServerOverviewClient.tsx b/app/(main)/ClientComponents/ServerOverviewClient.tsx index 2dc2552..48a1fec 100644 --- a/app/(main)/ClientComponents/ServerOverviewClient.tsx +++ b/app/(main)/ClientComponents/ServerOverviewClient.tsx @@ -49,9 +49,12 @@ export default function ServerOverviewClient() { setStatus("all"); } }} - className={cn("cursor-pointer hover:border-blue-500 transition-all", { - "pointer-events-none": global, - })} + className={cn( + "cursor-pointer hover:border-blue-500 transition-all min-h-[94px]", + { + "pointer-events-none": global, + }, + )} >
@@ -83,7 +86,7 @@ export default function ServerOverviewClient() { } }} className={cn( - "cursor-pointer hover:ring-green-500 ring-1 ring-transparent transition-all", + "cursor-pointer hover:ring-green-500 ring-1 ring-transparent transition-all min-h-[94px]", { "ring-green-500 ring-2 border-transparent": status === "online", }, @@ -123,7 +126,7 @@ export default function ServerOverviewClient() { } }} className={cn( - "cursor-pointer hover:ring-red-500 ring-1 ring-transparent transition-all", + "cursor-pointer hover:ring-red-500 ring-1 ring-transparent transition-all min-h-[94px]", { "ring-red-500 ring-2 border-transparent": status === "offline", }, @@ -163,7 +166,7 @@ export default function ServerOverviewClient() { } }} className={cn( - "cursor-pointer hover:ring-purple-500 ring-1 ring-transparent transition-all", + "cursor-pointer hover:ring-purple-500 ring-1 ring-transparent transition-all min-h-[94px]", { "ring-purple-500 ring-2 border-transparent": filter === true, }, diff --git a/app/(main)/page.tsx b/app/(main)/page.tsx index 51f769b..680118f 100644 --- a/app/(main)/page.tsx +++ b/app/(main)/page.tsx @@ -5,8 +5,6 @@ import { Suspense } from "react"; import ServerGlobal from "./ClientComponents/Global"; import GlobalLoading from "./ClientComponents/GlobalLoading"; -export const runtime = "edge"; - export default async function Home({ searchParams, }: { diff --git a/app/not-found.tsx b/app/not-found.tsx index 18c69b2..bcb89aa 100644 --- a/app/not-found.tsx +++ b/app/not-found.tsx @@ -4,8 +4,6 @@ import Link from "next/link"; import Footer from "./(main)/footer"; import Header from "./(main)/header"; -export const runtime = "edge"; - export default function NotFoundPage() { const t = useTranslations("NotFoundPage"); return (