Reduce hot run polling pressure

This commit is contained in:
npc0-hue
2026-09-07 20:26:20 +08:00
parent 4ab7bb820d
commit fd9dbab669
16 changed files with 335 additions and 56 deletions
+4 -1
View File
@@ -33,6 +33,9 @@ interface OverviewData {
jobs: JobResponse[];
}
const overviewJobStates: JobResponse["state"][] = ["failed"];
const overviewJobLimit = 50;
export interface HomePageInitialState {
core?: OperationsModuleState<OverviewData>;
metrics?: OperationsModuleState<ServerMetricsResponse[]>;
@@ -55,7 +58,7 @@ export function HomePage({ session, onNavigate, initialState }: HomePageProps) {
try {
const [instances, jobs] = await Promise.all([
platformApiClient.listServerInstances(),
platformApiClient.listJobs()
platformApiClient.listJobs(undefined, { states: overviewJobStates, limit: overviewJobLimit })
]);
setCore({ status: "ready", data: { instances: instances.items, jobs: jobs.items }, refreshedAt: refreshedNow() });
} catch (error) {
+4 -1
View File
@@ -10,6 +10,9 @@ import { cx } from "../utils/classes";
type ModuleState<T> = { status: "loading" } | { status: "error"; reason: string } | { status: "ready"; data: T };
const maintenanceJobStates: JobResponse["state"][] = ["failed"];
const maintenanceJobLimit = 100;
export function MaintenancePage({ session, operations, onNavigate }: PageComponentProps) {
const [jobs, setJobs] = useState<ModuleState<JobResponse[]>>({ status: "loading" });
const [servers, setServers] = useState<ModuleState<ServerInstanceResponse[]>>({ status: "loading" });
@@ -18,7 +21,7 @@ export function MaintenancePage({ session, operations, onNavigate }: PageCompone
const refreshJobs = useCallback(async () => {
setJobs({ status: "loading" });
try {
const response = await platformApiClient.listJobs();
const response = await platformApiClient.listJobs(undefined, { states: maintenanceJobStates, limit: maintenanceJobLimit });
setJobs({ status: "ready", data: response.items });
} catch (error) {
setJobs({ status: "error", reason: error instanceof Error ? error.message : "加载失败" });
+2 -1
View File
@@ -66,6 +66,7 @@ const serverListRefreshMs = 15000;
const serverMetricFreshMs = 30000;
const serverForceDeleteConfirmation = "FORCE DELETE";
const serverOperationalJobStates: JobResponse["state"][] = ["queued", "accepted", "running", "retrying", "failed"];
const serverOperationalJobLimit = 200;
export function ServersPage({ session, operations, onNavigate }: PageComponentProps) {
const [listState, setListState] = useState<ListState>("loading");
@@ -97,7 +98,7 @@ export function ServersPage({ session, operations, onNavigate }: PageComponentPr
showLoading ? platformApiClient.listGamePlugins() : Promise.resolve(undefined),
platformApiClient.listRunEndpoints({ status: "online" }),
platformApiClient.listServerInstances(),
platformApiClient.listJobs(undefined, { states: serverOperationalJobStates })
platformApiClient.listJobs(undefined, { states: serverOperationalJobStates, limit: serverOperationalJobLimit })
]);
if (pluginResponse) setPlugins(pluginResponse.items);
setEndpoints(endpointResponse.items);