chore: update usage api
This commit is contained in:
@@ -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,
|
||||||
|
|||||||
Reference in New Issue
Block a user