mirror of
https://github.com/Buriburizaem0n/nezha-dash-v1.git
synced 2026-05-06 05:48:41 +00:00
65b32ec81e
- 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.
91 lines
2.1 KiB
TypeScript
91 lines
2.1 KiB
TypeScript
import type {
|
|
LoginUserResponse,
|
|
MetricPeriod,
|
|
MetricType,
|
|
MonitorResponse,
|
|
ServerGroupResponse,
|
|
ServerMetricsResponse,
|
|
ServiceResponse,
|
|
SettingResponse,
|
|
} from "@/types/nezha-api";
|
|
|
|
let lastestRefreshTokenAt = 0;
|
|
|
|
export const fetchServerGroup = async (): Promise<ServerGroupResponse> => {
|
|
const response = await fetch("/api/v1/server-group");
|
|
const data = await response.json();
|
|
if (data.error) {
|
|
throw new Error(data.error);
|
|
}
|
|
return data;
|
|
};
|
|
|
|
export const fetchLoginUser = async (): Promise<LoginUserResponse> => {
|
|
const response = await fetch("/api/v1/profile");
|
|
const data = await response.json();
|
|
if (data.error) {
|
|
throw new Error(data.error);
|
|
}
|
|
|
|
// auto refresh token
|
|
if (
|
|
document.cookie &&
|
|
(!lastestRefreshTokenAt ||
|
|
Date.now() - lastestRefreshTokenAt > 1000 * 60 * 60)
|
|
) {
|
|
lastestRefreshTokenAt = Date.now();
|
|
fetch("/api/v1/refresh-token");
|
|
}
|
|
|
|
return data;
|
|
};
|
|
|
|
export type MonitorPeriod = "1d" | "7d" | "30d";
|
|
|
|
export const fetchMonitor = async (
|
|
server_id: number,
|
|
period?: MonitorPeriod,
|
|
): Promise<MonitorResponse> => {
|
|
const query = period ? `?period=${period}` : "";
|
|
const response = await fetch(`/api/v1/server/${server_id}/service${query}`);
|
|
const data = await response.json();
|
|
if (data.error) {
|
|
throw new Error(data.error);
|
|
}
|
|
return data;
|
|
};
|
|
|
|
export const fetchService = async (): Promise<ServiceResponse> => {
|
|
const response = await fetch("/api/v1/service");
|
|
const data = await response.json();
|
|
if (data.error) {
|
|
throw new Error(data.error);
|
|
}
|
|
return data;
|
|
};
|
|
|
|
export const fetchSetting = async (): Promise<SettingResponse> => {
|
|
const response = await fetch("/api/v1/setting");
|
|
const data = await response.json();
|
|
if (data.error) {
|
|
throw new Error(data.error);
|
|
}
|
|
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;
|
|
};
|