chore: update usage api

This commit is contained in:
jialin
2025-06-24 16:54:03 +08:00
parent 34af730934
commit 5f7df3f871
4 changed files with 58 additions and 22 deletions
+6 -2
View File
@@ -3,6 +3,9 @@ import qs from 'query-string';
export const DASHBOARD_API = '/dashboard'; export const DASHBOARD_API = '/dashboard';
export const DASHBOARD_USAGE_API = `${DASHBOARD_API}/usage`;
export const DASHBOARD_STATS_API = `${DASHBOARD_API}/usage/stats`;
export async function queryDashboardData() { export async function queryDashboardData() {
return request(DASHBOARD_API); return request(DASHBOARD_API);
} }
@@ -15,11 +18,12 @@ export async function queryDashboardUsageData<T>(
user_ids?: number[]; user_ids?: number[];
raw?: boolean; raw?: boolean;
}, },
options?: { options: {
url: string;
token?: any; token?: any;
} }
) { ) {
return request<T>(`${DASHBOARD_API}/usage?${qs.stringify(params)}`, { return request<T>(`${options.url}?${qs.stringify(params)}`, {
method: 'GET', method: 'GET',
cancelToken: options?.token cancelToken: options?.token
}); });
@@ -4,7 +4,9 @@ import ScrollerModal from '@/components/scroller-modal';
import { exportJsonToExcel } from '@/utils/excel-reader'; import { exportJsonToExcel } from '@/utils/excel-reader';
import { useIntl } from '@umijs/max'; import { useIntl } from '@umijs/max';
import { Table, TableColumnType } from 'antd'; import { Table, TableColumnType } from 'antd';
import dayjs from 'dayjs';
import React, { useEffect } from 'react'; import React, { useEffect } from 'react';
import { DASHBOARD_USAGE_API } from '../../apis';
import { TableRow } from '../../config/types'; import { TableRow } from '../../config/types';
import useUsageData from './use-usage-data'; import useUsageData from './use-usage-data';
@@ -14,17 +16,26 @@ const ExportData: React.FC<{
}> = (props) => { }> = (props) => {
const { open, onCancel } = props || {}; const { open, onCancel } = props || {};
const intl = useIntl(); const intl = useIntl();
const { FilterBar, loading, init, result, userList, modelList, query } = const {
useUsageData<{ FilterBar,
items: TableRow[]; init,
}>({ setResult,
raw: true loading,
}); result,
userList,
modelList,
query,
setQuery
} = useUsageData<{
items: TableRow[];
}>({
url: DASHBOARD_USAGE_API
});
const exportTableColumns: TableColumnType[] = [ const exportTableColumns: TableColumnType[] = [
{ {
title: intl.formatMessage({ id: 'resources.table.index' }), title: intl.formatMessage({ id: 'resources.table.index' }),
width: 60, width: 80,
render(text: any, row: any, index: number) { render(text: any, row: any, index: number) {
return index + 1; return index + 1;
} }
@@ -105,6 +116,18 @@ const ExportData: React.FC<{
useEffect(() => { useEffect(() => {
if (open) { if (open) {
init(); init();
} else {
setQuery({
start_date: dayjs().subtract(30, 'days').format('YYYY-MM-DD'),
end_date: dayjs().format('YYYY-MM-DD'),
model_ids: [],
user_ids: []
});
setResult({
start_date: '',
end_date: '',
data: { items: [] }
});
} }
}, [open]); }, [open]);
@@ -2,6 +2,7 @@ import { useIntl } from '@umijs/max';
import { Col, Row } from 'antd'; import { Col, Row } from 'antd';
import { FC, useContext, useEffect, useMemo } from 'react'; import { FC, useContext, useEffect, useMemo } from 'react';
import styled from 'styled-components'; import styled from 'styled-components';
import { DASHBOARD_STATS_API } from '../../apis';
import { baseColorMap } from '../../config'; import { baseColorMap } from '../../config';
import { DashboardContext } from '../../config/dashboard-context'; import { DashboardContext } from '../../config/dashboard-context';
import { DashboardUsageData } from '../../config/types'; import { DashboardUsageData } from '../../config/types';
@@ -22,7 +23,7 @@ const UsageInner: FC<{ paddingRight: string }> = ({ paddingRight }) => {
const { usageData, handleOnCancel, handleExport, FilterBar, init, open } = const { usageData, handleOnCancel, handleExport, FilterBar, init, open } =
useUsageData<DashboardUsageData>({ useUsageData<DashboardUsageData>({
raw: false, url: DASHBOARD_STATS_API,
defaultData: { defaultData: {
api_request_history: [], api_request_history: [],
completion_token_history: [], completion_token_history: [],
@@ -2,14 +2,18 @@ import useSelectRender from '@/components/seal-form/hooks/use-select-render';
import { queryModelsList } from '@/pages/llmodels/apis'; import { queryModelsList } from '@/pages/llmodels/apis';
import { ListItem as ModelListItem } from '@/pages/llmodels/config/types'; import { ListItem as ModelListItem } from '@/pages/llmodels/config/types';
import { queryUsersList } from '@/pages/users/apis'; import { queryUsersList } from '@/pages/users/apis';
import { ExportOutlined } from '@ant-design/icons'; import { DownloadOutlined } from '@ant-design/icons';
import { useIntl } from '@umijs/max'; import { useIntl } from '@umijs/max';
import { Button, DatePicker, Select, Tooltip } from 'antd'; import { Button, DatePicker, Select, Tooltip } from 'antd';
import dayjs from 'dayjs'; import dayjs from 'dayjs';
import _ from 'lodash'; import _ from 'lodash';
import { useMemo, useState } from 'react'; import { useMemo, useState } from 'react';
import styled from 'styled-components'; import styled from 'styled-components';
import { queryDashboardUsageData } from '../../apis'; import {
DASHBOARD_STATS_API,
DASHBOARD_USAGE_API,
queryDashboardUsageData
} from '../../apis';
import { baseColorMap } from '../../config'; import { baseColorMap } from '../../config';
import useRangePickerPreset from '../../hooks/use-rangepicker-preset'; import useRangePickerPreset from '../../hooks/use-rangepicker-preset';
@@ -87,11 +91,11 @@ const generateData = (dateRage: string[], valueMap: Map<string, number>) => {
}); });
}; };
export default function useUseageData<T>(config?: { export default function useUseageData<T>(config: {
raw?: boolean; url: string;
defaultData?: T; defaultData?: T;
}) { }) {
const { raw = false, defaultData } = config || {}; const { url, defaultData } = config || {};
const intl = useIntl(); const intl = useIntl();
const { TagRender } = useSelectRender({ const { TagRender } = useSelectRender({
maxTagWidth: 100 maxTagWidth: 100
@@ -115,9 +119,7 @@ export default function useUseageData<T>(config?: {
end_date: string; end_date: string;
model_ids: number[]; model_ids: number[];
user_ids: number[]; user_ids: number[];
raw: boolean;
}>({ }>({
raw: raw,
start_date: dayjs().subtract(30, 'days').format('YYYY-MM-DD'), start_date: dayjs().subtract(30, 'days').format('YYYY-MM-DD'),
end_date: dayjs().format('YYYY-MM-DD'), end_date: dayjs().format('YYYY-MM-DD'),
model_ids: [], model_ids: [],
@@ -131,7 +133,7 @@ export default function useUseageData<T>(config?: {
const usageData = useMemo<{ const usageData = useMemo<{
requestTokenData: RequestTokenData; requestTokenData: RequestTokenData;
}>(() => { }>(() => {
if (raw) { if (url === DASHBOARD_USAGE_API) {
return { return {
requestTokenData: { requestTokenData: {
requestData: [], requestData: [],
@@ -203,7 +205,7 @@ export default function useUseageData<T>(config?: {
xAxisData: dateRange xAxisData: dateRange
} }
}; };
}, [result, raw]); }, [result, url]);
const fetchModelsList = async () => { const fetchModelsList = async () => {
try { try {
@@ -248,7 +250,9 @@ export default function useUseageData<T>(config?: {
const fetchUsageData = async (queryParams: any) => { const fetchUsageData = async (queryParams: any) => {
try { try {
setLoading(true); setLoading(true);
const response = await queryDashboardUsageData<T>(queryParams); const response = await queryDashboardUsageData<T>(queryParams, {
url: url
});
setResult({ setResult({
start_date: queryParams.start_date, start_date: queryParams.start_date,
end_date: queryParams.end_date, end_date: queryParams.end_date,
@@ -352,9 +356,12 @@ export default function useUseageData<T>(config?: {
style={{ maxWidth: 200, minWidth: 160 }} style={{ maxWidth: 200, minWidth: 160 }}
onChange={handleModelsChange} onChange={handleModelsChange}
></Select> ></Select>
{!raw && ( {url === DASHBOARD_STATS_API && (
<Tooltip title={intl.formatMessage({ id: 'common.button.export' })}> <Tooltip title={intl.formatMessage({ id: 'common.button.export' })}>
<Button icon={<ExportOutlined />} onClick={handleExport}></Button> <Button
icon={<DownloadOutlined />}
onClick={handleExport}
></Button>
</Tooltip> </Tooltip>
)} )}
</div> </div>
@@ -370,6 +377,7 @@ export default function useUseageData<T>(config?: {
userList, userList,
modelList, modelList,
query, query,
setQuery,
init, init,
setResult, setResult,
FilterBar, FilterBar,