chore: add cancel token

This commit is contained in:
jialin
2026-06-14 19:14:18 +08:00
committed by jialin
parent 08ef2ffa9a
commit 736a853192
2 changed files with 51 additions and 29 deletions
+47 -26
View File
@@ -366,32 +366,45 @@ function toServerRequest(data: ResourceBreakdownRequest) {
async function _breakdown(
url: string,
data: ResourceBreakdownRequest
data: ResourceBreakdownRequest,
options?: {
token?: any;
}
): Promise<ResourceBreakdownResponse> {
const { body, groupBy } = toServerRequest(data);
const res = await request<ServerBreakdownResponse>(url, {
data: body,
method: 'POST'
method: 'POST',
cancelToken: options?.token
});
return flattenResponse(groupBy, res);
}
export async function queryResourceBreakdown(
data: ResourceBreakdownRequest
data: ResourceBreakdownRequest,
options?: {
token?: any;
}
): Promise<ResourceBreakdownResponse> {
return _breakdown(URL.RESOURCE_BREAKDOWN, data);
return _breakdown(URL.RESOURCE_BREAKDOWN, data, options);
}
export async function queryGpuInstancesBreakdown(
data: ResourceBreakdownRequest
data: ResourceBreakdownRequest,
options?: {
token?: any;
}
): Promise<ResourceBreakdownResponse> {
return _breakdown(URL.GPU_BREAKDOWN, data);
return _breakdown(URL.GPU_BREAKDOWN, data, options);
}
export async function queryStorageBreakdown(
data: ResourceBreakdownRequest
data: ResourceBreakdownRequest,
options?: {
token?: any;
}
): Promise<ResourceBreakdownResponse> {
return _breakdown(URL.STORAGE_BREAKDOWN, data);
return _breakdown(URL.STORAGE_BREAKDOWN, data, options);
}
export async function queryResourceEvents(
@@ -406,7 +419,7 @@ export async function queryResourceEvents(
page?: number;
perPage?: number;
},
options?: { skipErrorHandler?: boolean }
options?: { skipErrorHandler?: boolean; token?: any }
): Promise<ResourceEventsResponse> {
const creatorIds = data.filters?.creator_ids;
return request<ResourceEventsResponse>(URL.EVENTS, {
@@ -426,7 +439,8 @@ export async function queryResourceEvents(
perPage: data.perPage ?? 50
},
method: 'GET',
skipErrorHandler: options?.skipErrorHandler
skipErrorHandler: options?.skipErrorHandler,
cancelToken: options?.token
});
}
@@ -456,12 +470,15 @@ export async function queryResourceFilterMeta(
};
}
export async function queryUsageSummary(params: {
start_date: string;
end_date: string;
scope?: 'self' | 'all';
creator_ids?: number[];
}): Promise<UsageSummaryResponse> {
export async function queryUsageSummary(
params: {
start_date: string;
end_date: string;
scope?: 'self' | 'all';
creator_ids?: number[];
},
options?: { token?: any }
): Promise<UsageSummaryResponse> {
const { creator_ids, ...rest } = params;
const res = await request<{
total_tokens: number;
@@ -478,7 +495,8 @@ export async function queryUsageSummary(params: {
scope: params.scope ?? 'all',
...(creator_ids?.length ? { creator_ids: creator_ids.join(',') } : {})
},
method: 'GET'
method: 'GET',
cancelToken: options?.token
});
// Resource Distribution donut — by GPU type, using GPU-Hours (a single,
@@ -486,15 +504,18 @@ export async function queryUsageSummary(params: {
// instance type. (A true cross-resource split needs a common unit.)
let distribution: SummaryResourceDistributionItem[] = [];
try {
const byType = await queryGpuInstancesBreakdown({
start_date: params.start_date,
end_date: params.end_date,
scope: params.scope ?? 'all',
group_by: ['gpu_type'],
...(creator_ids?.length ? { filters: { creator_ids } } : {}),
page: 1,
perPage: 100
});
const byType = await queryGpuInstancesBreakdown(
{
start_date: params.start_date,
end_date: params.end_date,
scope: params.scope ?? 'all',
group_by: ['gpu_type'],
...(creator_ids?.length ? { filters: { creator_ids } } : {}),
page: 1,
perPage: 100
},
{ token: options?.token }
);
const total = byType.items.reduce((s, i) => s + (i.gpu_hours || 0), 0);
distribution = byType.items
.filter((i) => (i.gpu_hours || 0) > 0)
+4 -3
View File
@@ -27,10 +27,9 @@ import PieChart from '@/pages/_components/pie-chart';
import { formatLargeNumber } from '@/utils';
import { CardWrapper } from '@gpustack/core-ui';
import { useAccess, useIntl } from '@umijs/max';
import { useRequest } from 'ahooks';
import { Col, Row } from 'antd';
import dayjs from 'dayjs';
import React, { useMemo, useState } from 'react';
import React, { useEffect, useMemo, useState } from 'react';
import ResourceFilterBar from '../components/resource-filter-bar';
import useResourceMeta from '../hooks/use-resource-meta';
import {
@@ -402,7 +401,9 @@ const SummaryTab: React.FC = () => {
fetchAll();
};
useRequest(fetchAll);
useEffect(() => {
fetchAll();
}, []);
return (
<div>