Files
nezha-dash-v1/src/lib/nezha-api.ts
T
hamster1963 65b32ec81e 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.
2026-01-30 09:14:41 +08:00

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;
};