From fddc036832e2fd7f965d7b4b4432964753ecc187 Mon Sep 17 00:00:00 2001
From: zhiyu1998 <542716863@qq.com>
Date: Wed, 20 Nov 2024 11:28:38 +0800
Subject: [PATCH] =?UTF-8?q?=E2=9C=A8feat:=20=E6=B7=BB=E5=8A=A0=E4=B8=80?=
=?UTF-8?q?=E4=BA=9B=E7=BD=91=E9=A1=B5?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
package.json | 11 +-
server/app/layout.jsx | 9 ++
server/app/page.jsx | 3 +
server/app/r/api/napcat/[pid]/route.js | 10 ++
server/app/r/api/network/route.js | 25 ++++
server/app/r/api/system/route.js | 60 +++++++++
server/app/r/page.js | 12 ++
server/assets/fonts/FiraCode-VF.woff2 | Bin 0 -> 113088 bytes
server/assets/fonts/SourceHanSerifCN-VF.woff2 | Bin 0 -> 10413080 bytes
server/components/ThemeToggle.jsx | 23 ++++
server/components/content.jsx | 21 ++++
server/components/contents/bili.jsx | 7 ++
server/components/contents/home.jsx | 30 +++++
server/components/contents/tiktok.jsx | 5 +
server/components/contents/weekly.jsx | 11 ++
server/components/header.jsx | 63 ++++++++++
server/components/home/bot-config.jsx | 61 +++++++++
server/components/home/bot-info.jsx | 17 +++
server/components/home/bot-item.jsx | 46 +++++++
server/components/home/bot-network.jsx | 94 ++++++++++++++
server/components/home/system.jsx | 116 ++++++++++++++++++
server/components/sidebar.jsx | 45 +++++++
server/constants/napcat.js | 11 ++
server/constants/sidebar.js | 63 ++++++++++
server/constants/system.js | 5 +
server/contexts/drawer-context.js | 22 ++++
server/postcss.config.js | 6 +
server/styles/global.css | 37 ++++++
server/tailwind.config.js | 23 ++++
server/utils/axiosInstance.js | 50 ++++++++
server/utils/napact.js | 17 +++
31 files changed, 902 insertions(+), 1 deletion(-)
create mode 100644 server/app/layout.jsx
create mode 100644 server/app/page.jsx
create mode 100644 server/app/r/api/napcat/[pid]/route.js
create mode 100644 server/app/r/api/network/route.js
create mode 100644 server/app/r/api/system/route.js
create mode 100644 server/app/r/page.js
create mode 100644 server/assets/fonts/FiraCode-VF.woff2
create mode 100644 server/assets/fonts/SourceHanSerifCN-VF.woff2
create mode 100644 server/components/ThemeToggle.jsx
create mode 100644 server/components/content.jsx
create mode 100644 server/components/contents/bili.jsx
create mode 100644 server/components/contents/home.jsx
create mode 100644 server/components/contents/tiktok.jsx
create mode 100644 server/components/contents/weekly.jsx
create mode 100644 server/components/header.jsx
create mode 100644 server/components/home/bot-config.jsx
create mode 100644 server/components/home/bot-info.jsx
create mode 100644 server/components/home/bot-item.jsx
create mode 100644 server/components/home/bot-network.jsx
create mode 100644 server/components/home/system.jsx
create mode 100644 server/components/sidebar.jsx
create mode 100644 server/constants/napcat.js
create mode 100644 server/constants/sidebar.js
create mode 100644 server/constants/system.js
create mode 100644 server/contexts/drawer-context.js
create mode 100644 server/postcss.config.js
create mode 100644 server/styles/global.css
create mode 100644 server/tailwind.config.js
create mode 100644 server/utils/axiosInstance.js
create mode 100644 server/utils/napact.js
diff --git a/package.json b/package.json
index 8c73196..a75ac9f 100644
--- a/package.json
+++ b/package.json
@@ -5,8 +5,17 @@
"dependencies": {
"axios": "^1.3.4",
"form-data": "^4.0.1",
+ "next": "^14.2.16",
"node-id3": "^0.2.6",
+ "p-queue": "^8.0.1",
"qrcode": "^1.5.3",
- "p-queue": "^8.0.1"
+ "react": "^18.3.1",
+ "react-circular-progressbar": "^2.1.0",
+ "react-dom": "^18.3.1",
+ "systeminformation": "^5.23.5"
+ },
+ "devDependencies": {
+ "daisyui": "^4.12.14",
+ "tailwindcss": "^3.4.14"
}
}
diff --git a/server/app/layout.jsx b/server/app/layout.jsx
new file mode 100644
index 0000000..e8acbcc
--- /dev/null
+++ b/server/app/layout.jsx
@@ -0,0 +1,9 @@
+import "../styles/global.css";
+
+export default function RootLayout({ children }) {
+ return (
+
+
{children}
+
+ )
+}
diff --git a/server/app/page.jsx b/server/app/page.jsx
new file mode 100644
index 0000000..4e3a190
--- /dev/null
+++ b/server/app/page.jsx
@@ -0,0 +1,3 @@
+export default function Page() {
+ return
+}
diff --git a/server/app/r/api/napcat/[pid]/route.js b/server/app/r/api/napcat/[pid]/route.js
new file mode 100644
index 0000000..0fd7fc0
--- /dev/null
+++ b/server/app/r/api/napcat/[pid]/route.js
@@ -0,0 +1,10 @@
+import axiosInstance from "../../../../../utils/axiosInstance.js";
+
+export async function GET(request, { params }) {
+ const { pid } = params;
+ const napcatResp = await axiosInstance.get(`/${ pid }`);
+ return new Response(JSON.stringify(napcatResp), {
+ status: 200,
+ headers: { 'Content-Type': 'application/json' },
+ });
+}
diff --git a/server/app/r/api/network/route.js b/server/app/r/api/network/route.js
new file mode 100644
index 0000000..ba2c6af
--- /dev/null
+++ b/server/app/r/api/network/route.js
@@ -0,0 +1,25 @@
+import axios from "axios";
+
+export async function GET(request) {
+ const url = new URL(request.url); // 获取请求的 URL
+ const targetUrl = url.searchParams.get("url"); // 从查询参数中获取目标 URL
+ const start = Date.now(); // 记录请求开始时间
+
+ try {
+ await axios.get(targetUrl);
+ // 计算结束时间减去开始时间
+ return new Response(JSON.stringify({
+ time: Date.now() - start
+ }), {
+ status: 200,
+ headers: { 'Content-Type': 'application/json' },
+ });
+ } catch (error) {
+ return new Response(JSON.stringify({
+ time: 0
+ }), {
+ status: 500,
+ headers: { 'Content-Type': 'application/json' },
+ })
+ }
+}
diff --git a/server/app/r/api/system/route.js b/server/app/r/api/system/route.js
new file mode 100644
index 0000000..af08533
--- /dev/null
+++ b/server/app/r/api/system/route.js
@@ -0,0 +1,60 @@
+import si from 'systeminformation';
+import os from 'os';
+
+export async function GET(request, { params }) {
+ try {
+ // 获取CPU信息
+ const cpuInfo = await si.cpu();
+ const cpuUsage = await si.currentLoad();
+ const totalCpuCores = cpuInfo.cores;
+ const cpuCoresUsed = ((cpuUsage.currentLoad / 100) * totalCpuCores).toFixed(1); // 使用的核心数
+
+ // 获取内存信息
+ const totalMemory = (os.totalmem() / (1024 ** 3)).toFixed(2); // 转换为 GB
+ const freeMemory = (os.freemem() / (1024 ** 3)).toFixed(2); // 转换为 GB
+ const usedMemory = (totalMemory - freeMemory).toFixed(2);
+ const memoryUsagePercent = ((usedMemory / totalMemory) * 100).toFixed(2);
+
+ // 获取磁盘信息
+ const diskInfo = await si.fsSize();
+ const totalDisk = (diskInfo[0].size / (1024 ** 3)).toFixed(2); // 转换为 GB
+ const usedDisk = (diskInfo[0].used / (1024 ** 3)).toFixed(2); // 转换为 GB
+ const diskUsagePercent = ((usedDisk / totalDisk) * 100).toFixed(2);
+
+ // 获取网络信息
+ const networkInterfaces = os.networkInterfaces();
+ const ipAddress = Object.values(networkInterfaces)
+ .flat()
+ .filter(detail => detail.family === 'IPv4' && !detail.internal)[0].address;
+
+ // 获取系统信息
+ const hostname = os.hostname();
+ const uptime = os.uptime();
+ const osInfo = await si.osInfo();
+
+ return new Response(JSON.stringify({
+ cpuUsage: cpuUsage.currentLoad.toFixed(2),
+ cpuUsageDetail: `${cpuUsage.currentLoad.toFixed(2)}%`,
+ totalCpuCores,
+ cpuCoresUsed,
+ memoryUsage: memoryUsagePercent,
+ usedMemory: `${usedMemory} GB`,
+ totalMemory: `${totalMemory} GB`,
+ diskUsage: diskUsagePercent,
+ usedDisk: `${usedDisk} GB`,
+ totalDisk: `${totalDisk} GB`,
+ loadAverage: cpuUsage.avgLoad.toFixed(2),
+ ipAddress,
+ hostname,
+ uptime: `${Math.floor(uptime / 60 / 60)} hours`,
+ distro: osInfo.distro,
+ kernelVersion: osInfo.kernel,
+ arch: os.arch(),
+ }), {
+ status: 200,
+ headers: { 'Content-Type': 'application/json' },
+ });
+ } catch (error) {
+ return new Response(JSON.stringify({ error: error.message }), { status: 500 });
+ }
+}
diff --git a/server/app/r/page.js b/server/app/r/page.js
new file mode 100644
index 0000000..3bc2d81
--- /dev/null
+++ b/server/app/r/page.js
@@ -0,0 +1,12 @@
+import Sidebar from "../../components/sidebar.jsx";
+import Header from "../../components/header.jsx";
+import { DrawerProvider } from "../../contexts/drawer-context.js";
+
+export default function Page() {
+ return (
+
+
+
+
+ )
+}
diff --git a/server/assets/fonts/FiraCode-VF.woff2 b/server/assets/fonts/FiraCode-VF.woff2
new file mode 100644
index 0000000000000000000000000000000000000000..e755a9dc724a9668629edad07243901207543fec
GIT binary patch
literal 113088
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