feat: add server metrics fetching and update translations

- Implemented `fetchServerMetrics` function in `nezha-api.ts` to retrieve server metrics based on metric type and period.
- Added new metric types and periods to `nezha-api.ts` type definitions.
- Updated English and Chinese translations to include new terms for metrics and periods.
- Commented out `ServerDetailSummary` component in `ServerDetail.tsx` for future use.
This commit is contained in:
hamster1963
2026-01-30 09:14:41 +08:00
parent 1aa66f98ed
commit 65b32ec81e
6 changed files with 951 additions and 365 deletions
File diff suppressed because it is too large Load Diff
+19
View File
@@ -1,7 +1,10 @@
import type { import type {
LoginUserResponse, LoginUserResponse,
MetricPeriod,
MetricType,
MonitorResponse, MonitorResponse,
ServerGroupResponse, ServerGroupResponse,
ServerMetricsResponse,
ServiceResponse, ServiceResponse,
SettingResponse, SettingResponse,
} from "@/types/nezha-api"; } from "@/types/nezha-api";
@@ -69,3 +72,19 @@ export const fetchSetting = async (): Promise<SettingResponse> => {
} }
return data; return data;
}; };
export const fetchServerMetrics = async (
server_id: number,
metric: MetricType,
period?: MetricPeriod,
): Promise<ServerMetricsResponse> => {
const query = period
? `?metric=${metric}&period=${period}`
: `?metric=${metric}`;
const response = await fetch(`/api/v1/server/${server_id}/metrics${query}`);
const data = await response.json();
if (data.error) {
throw new Error(data.error);
}
return data;
};
+5 -1
View File
@@ -77,7 +77,11 @@
"mem": "Mem", "mem": "Mem",
"swap": "Swap", "swap": "Swap",
"upload": "Upload", "upload": "Upload",
"download": "Download" "download": "Download",
"realtime": "Realtime",
"period1d": "1 Day",
"period7d": "7 Days",
"period30d": "30 Days"
}, },
"footer": { "footer": {
"themeBy": "Theme by " "themeBy": "Theme by "
+5 -1
View File
@@ -77,7 +77,11 @@
"mem": "内存", "mem": "内存",
"swap": "虚拟内存", "swap": "虚拟内存",
"upload": "上传", "upload": "上传",
"download": "下载" "download": "下载",
"realtime": "实时",
"period1d": "1 天",
"period7d": "7 天",
"period30d": "30 天"
}, },
"footer": { "footer": {
"themeBy": "主题-" "themeBy": "主题-"
+2 -3
View File
@@ -3,7 +3,6 @@ import { useNavigate, useParams } from "react-router-dom";
import { NetworkChart } from "@/components/NetworkChart"; import { NetworkChart } from "@/components/NetworkChart";
import ServerDetailChart from "@/components/ServerDetailChart"; import ServerDetailChart from "@/components/ServerDetailChart";
import ServerDetailOverview from "@/components/ServerDetailOverview"; import ServerDetailOverview from "@/components/ServerDetailOverview";
import ServerDetailSummary from "@/components/ServerDetailSummary";
import TabSwitch from "@/components/TabSwitch"; import TabSwitch from "@/components/TabSwitch";
import { Separator } from "@/components/ui/separator"; import { Separator } from "@/components/ui/separator";
@@ -39,9 +38,9 @@ export default function ServerDetail() {
<Separator className="flex-1" /> <Separator className="flex-1" />
</section> </section>
<section> {/* <section>
<ServerDetailSummary server_id={Number(server_id)} /> <ServerDetailSummary server_id={Number(server_id)} />
</section> </section> */}
<div style={{ display: currentTab === tabs[0] ? "block" : "none" }}> <div style={{ display: currentTab === tabs[0] ? "block" : "none" }}>
<ServerDetailChart server_id={server_id} /> <ServerDetailChart server_id={server_id} />
+38
View File
@@ -158,3 +158,41 @@ export interface SettingResponse {
version: string; version: string;
}; };
} }
export type MetricType =
| "cpu"
| "memory"
| "swap"
| "disk"
| "net_in_speed"
| "net_out_speed"
| "net_in_transfer"
| "net_out_transfer"
| "load1"
| "load5"
| "load15"
| "tcp_conn"
| "udp_conn"
| "process_count"
| "temperature"
| "uptime"
| "gpu";
export type MetricPeriod = "1d" | "7d" | "30d";
export interface MetricDataPoint {
ts: number;
value: number;
}
export interface ServerMetricsData {
server_id: number;
server_name: string;
metric: string;
data_points: MetricDataPoint[];
}
export interface ServerMetricsResponse {
success: boolean;
data: ServerMetricsData;
}