/** * Usage page — top-level tab shell. * * - Summary: cross-resource overview (KPIs + trend + by-type breakdown + donut) * - Tokens: existing per-request token usage page (untouched) * - GPU Instances: per-instance compute usage * - Storage: PV capacity usage * - Resource Events: lifecycle event list (created / metered / deleted / ...) * * Resource Events is kept as a tab (not a separate route) so the page filter * set stays consistent across all views. * * The previous implementation lived in this file; it now lives in * ``components/token-tab.tsx`` so we can host it as a tab pane. */ import { useAccess } from '@umijs/max'; import { Tabs, TabsProps } from 'antd'; import React, { useMemo, useState } from 'react'; import GpuInstancesTab from './components/gpu-instances-tab'; import ResourceEvents from './components/resource-events'; import StorageTab from './components/storage-tab'; import SummaryTab from './components/summary-tab'; import TokenTab from './components/token-tab'; const Usage: React.FC = () => { const access = useAccess(); // Land on the cross-resource Summary by default. const [activeKey, setActiveKey] = useState('summary'); const items: TabsProps['items'] = useMemo( () => [ { key: 'summary', label: 'Summary', children: }, { key: 'tokens', label: 'Tokens', children: }, { key: 'gpu-instances', label: 'GPU Instances', children: }, { key: 'storage', label: 'Storage', children: }, { key: 'resource-events', label: 'Resource Events', children: } ], [] ); // Users who can't see GPU Service (MaaS-only: no cluster, no resource usage) // only have token usage — drop the tab shell and show Tokens directly. if (!access.canSeeGpuService) { return ; } return ( ); }; export default Usage;