update ServerDashboard

This commit is contained in:
Timi
2026-04-12 00:15:54 +08:00
parent 489cbb5d0f
commit 611830f393
30 changed files with 2078 additions and 892 deletions

View File

@@ -12,8 +12,23 @@ export interface ConnectSetting {
token: string;
}
export type DashboardSnapshotMetric = "os" | "cpu" | "memory" | "jvm" | "network" | "hardware" | "storage";
export type DashboardHistoryMetric = "cpu" | "memory" | "jvm" | "network";
export interface ServerDashboardSetting {
snapshotRefreshSeconds: number;
historyRefreshSeconds: number;
snapshotMetrics: DashboardSnapshotMetric[];
historyMetrics: DashboardHistoryMetric[];
}
export interface DashboardSetting {
server: ServerDashboardSetting;
}
interface SettingState {
connect: ConnectSetting;
dashboard: DashboardSetting;
}
const defaultConnectSetting = (): ConnectSetting => ({
@@ -23,8 +38,20 @@ const defaultConnectSetting = (): ConnectSetting => ({
token: ""
});
const defaultServerDashboardSetting = (): ServerDashboardSetting => ({
snapshotRefreshSeconds: 3,
historyRefreshSeconds: 10,
snapshotMetrics: ["os", "cpu", "memory", "jvm", "network", "hardware", "storage"],
historyMetrics: ["cpu", "memory", "jvm", "network"]
});
const defaultDashboardSetting = (): DashboardSetting => ({
server: defaultServerDashboardSetting()
});
const defaultSettingState = (): SettingState => ({
connect: defaultConnectSetting()
connect: defaultConnectSetting(),
dashboard: defaultDashboardSetting()
});
function normalizeConnectSetting(connect?: Partial<ConnectSetting>): ConnectSetting {
@@ -38,10 +65,52 @@ function normalizeConnectSetting(connect?: Partial<ConnectSetting>): ConnectSett
};
}
function normalizeSnapshotMetrics(metrics?: DashboardSnapshotMetric[]): DashboardSnapshotMetric[] {
const validMetrics: DashboardSnapshotMetric[] = ["os", "cpu", "memory", "jvm", "network", "hardware", "storage"];
const metricList = Array.isArray(metrics) ? metrics : [];
const normalizedMetrics = validMetrics.filter((metric) => metricList.includes(metric));
return normalizedMetrics.length ? normalizedMetrics : defaultServerDashboardSetting().snapshotMetrics;
}
function normalizeHistoryMetrics(metrics?: DashboardHistoryMetric[]): DashboardHistoryMetric[] {
const validMetrics: DashboardHistoryMetric[] = ["cpu", "memory", "jvm", "network"];
const metricList = Array.isArray(metrics) ? metrics : [];
const normalizedMetrics = validMetrics.filter((metric) => metricList.includes(metric));
return normalizedMetrics.length ? normalizedMetrics : defaultServerDashboardSetting().historyMetrics;
}
function normalizeRefreshSeconds(value?: number, fallback = 3): number {
if (typeof value !== "number" || Number.isNaN(value)) {
return fallback;
}
return Math.min(Math.max(Math.floor(value), 1), 120);
}
function normalizeServerDashboardSetting(setting?: Partial<ServerDashboardSetting>): ServerDashboardSetting {
const fallback = defaultServerDashboardSetting();
return {
snapshotRefreshSeconds: normalizeRefreshSeconds(setting?.snapshotRefreshSeconds, fallback.snapshotRefreshSeconds),
historyRefreshSeconds: normalizeRefreshSeconds(setting?.historyRefreshSeconds, fallback.historyRefreshSeconds),
snapshotMetrics: normalizeSnapshotMetrics(setting?.snapshotMetrics),
historyMetrics: normalizeHistoryMetrics(setting?.historyMetrics)
};
}
function normalizeDashboardSetting(setting?: Partial<DashboardSetting>): DashboardSetting {
return {
server: normalizeServerDashboardSetting(setting?.server)
};
}
export const useSettingStore = defineStore("setting", () => {
const state = ref<SettingState>(Storage.getDefault<SettingState>(SETTING_STORAGE_KEY, defaultSettingState()));
state.value.connect = normalizeConnectSetting(state.value.connect);
state.value.dashboard = normalizeDashboardSetting(state.value.dashboard);
persist();
const connect = computed(() => state.value.connect);
const dashboard = computed(() => state.value.dashboard);
const hasConnectConfig = computed(() => {
const currentConnect = state.value.connect;
return !!currentConnect.host && !!currentConnect.port && !!currentConnect.token;
@@ -64,10 +133,20 @@ export const useSettingStore = defineStore("setting", () => {
persist();
}
function setServerDashboard(serverSetting: Partial<ServerDashboardSetting>): void {
state.value.dashboard.server = normalizeServerDashboardSetting({
...state.value.dashboard.server,
...serverSetting
});
persist();
}
return {
connect,
dashboard,
hasConnectConfig,
setConnect,
resetConnect
resetConnect,
setServerDashboard
};
});