refactor(dashboard): switch usage charts to route group_by, rename Models card

Align dashboard with the route dimension introduced in the previous
commit:

* Token Usage / API Requests pie charts query the breakdown API with
  `group_by: ['date', 'route']` and aggregate via the new `route`
  dimension in `buildUsageLabel`. Visible chart titles keep the existing
  "by Model" wording — only the underlying data dim changed.
* Overview "Models" card label switched to `dashboard.deployments`
  ("部署" / "Deployments"), and the Active Models table heading to
  `dashboard.activeDeployments`. These reflect the underlying entity
  (model deployments) more accurately now that routes are the
  user-facing model concept.
* Drop 11 unused dashboard locale keys (`dashboard.title`,
  `dashboard.models`, `dashboard.allocategpus`, `dashboard.instances`,
  `dashboard.disk`, `dashboard.diskutilization`, `dashboard.apirequest`,
  `dashboard.activeModels`, `dashboard.activeUsers`,
  `dashboard.activeModels.name`, `dashboard.runninginstances`) — no
  remaining references in `src/` after the rename. Locale parity check
  passes.
This commit is contained in:
Yuxing Deng
2026-05-19 16:50:42 +08:00
parent 38107a67fe
commit 44e5b78d29
10 changed files with 26 additions and 62 deletions
+2 -11
View File
@@ -1,32 +1,23 @@
export default {
'dashboard.title': 'Dashboard',
'dashboard.workers': 'Workers',
'dashboard.models': 'Models',
'dashboard.deployments': 'Deployments',
'dashboard.clusters': 'Clusters',
'dashboard.totalgpus': 'GPUs',
'dashboard.allocategpus': 'Allocated GPUs',
'dashboard.instances': 'Instances',
'dashboard.systemload': 'System Load',
'dashboard.memory': 'RAM',
'dashboard.disk': 'Storage',
'dashboard.vram': 'VRAM',
'dashboard.cpuutilization': 'Average CPU Utilization',
'dashboard.memoryutilization': 'Average RAM Utilization',
'dashboard.diskutilization': 'Storage Utilization',
'dashboard.vramutilization': 'Average VRAM Utilization',
'dashboard.gpuutilization': 'Average GPU Utilization',
'dashboard.usage': 'Usage',
'dashboard.apirequest': 'API Requests',
'dashboard.tokens': 'Token Usage',
'dashboard.topusers': 'Top Users',
'dashboard.activeModels': 'Active Models',
'dashboard.activeUsers': 'Active Users',
'dashboard.activeDeployments': 'Active Deployments',
'dashboard.tokenUsageByModel': 'Token Usage by Model',
'dashboard.apiRequestsByModel': 'API Requests by Model',
'dashboard.topTokenUsageByUser': 'Top 10 Token Usage by User',
'dashboard.topTokenUsageByApiKey': 'Top 10 Token Usage by API Key',
'dashboard.runninginstances': 'Running Instances',
'dashboard.activeModels.name': 'Model Name',
'dashboard.allocatevram': 'Allocated VRAM / RAM',
'dashboard.usage.selectuser': 'Select users',
'dashboard.usage.selectmodel': 'Select models',
+2 -11
View File
@@ -1,31 +1,22 @@
export default {
'dashboard.title': 'ダッシュボード',
'dashboard.workers': 'ワーカー',
'dashboard.models': 'モデル',
'dashboard.deployments': 'Deployments',
'dashboard.totalgpus': 'GPU数',
'dashboard.allocategpus': '割り当て済みGPU',
'dashboard.instances': 'インスタンス',
'dashboard.systemload': 'システム負荷',
'dashboard.memory': 'メモリ',
'dashboard.disk': 'ストレージ',
'dashboard.vram': 'VRAM',
'dashboard.cpuutilization': '平均CPU使用率',
'dashboard.memoryutilization': '平均メモリ使用率',
'dashboard.diskutilization': 'ストレージ使用率',
'dashboard.vramutilization': '平均VRAM使用率',
'dashboard.gpuutilization': '平均GPU使用率',
'dashboard.usage': '使用状況',
'dashboard.apirequest': 'APIリクエスト',
'dashboard.tokens': 'トークン使用量',
'dashboard.topusers': 'トップユーザー',
'dashboard.activeModels': 'アクティブなモデル',
'dashboard.activeUsers': 'アクティブユーザー',
'dashboard.activeDeployments': 'Active Deployments',
'dashboard.tokenUsageByModel': 'モデル別トークン使用量',
'dashboard.apiRequestsByModel': 'モデル別APIリクエスト',
'dashboard.topTokenUsageByUser': 'ユーザー別トークン使用量トップ10',
'dashboard.topTokenUsageByApiKey': 'APIキー別トークン使用量トップ10',
'dashboard.runninginstances': '稼働中のインスタンス',
'dashboard.activeModels.name': 'モデル名',
'dashboard.allocatevram': '割り当て済みVRAM / メモリ',
'dashboard.usage.selectuser': 'Select users',
'dashboard.usage.selectmodel': 'Select models',
+2 -11
View File
@@ -1,31 +1,22 @@
export default {
'dashboard.title': 'Панель управления',
'dashboard.workers': 'Рабочие узлы',
'dashboard.models': 'Модели',
'dashboard.deployments': 'Deployments',
'dashboard.totalgpus': 'Всего GPU',
'dashboard.allocategpus': 'Выделенные GPU',
'dashboard.instances': 'Инстансы',
'dashboard.systemload': 'Нагрузка системы',
'dashboard.memory': 'ОЗУ',
'dashboard.disk': 'Хранилище',
'dashboard.vram': 'VRAM',
'dashboard.cpuutilization': 'Средняя загрузка CPU',
'dashboard.memoryutilization': 'Средняя загрузка ОЗУ',
'dashboard.diskutilization': 'Использование хранилища',
'dashboard.vramutilization': 'Средняя загрузка видеопамяти',
'dashboard.gpuutilization': 'Средняя загрузка GPU',
'dashboard.usage': 'Использование',
'dashboard.apirequest': 'API-запросы',
'dashboard.tokens': 'Использование токенов',
'dashboard.topusers': 'Топ пользователей',
'dashboard.activeModels': 'Активные модели',
'dashboard.activeUsers': 'Активные пользователи',
'dashboard.activeDeployments': 'Active Deployments',
'dashboard.tokenUsageByModel': 'Использование токенов по моделям',
'dashboard.apiRequestsByModel': 'API-запросы по моделям',
'dashboard.topTokenUsageByUser': 'Топ-10 пользователей по токенам',
'dashboard.topTokenUsageByApiKey': 'Топ-10 API-ключей по токенам',
'dashboard.runninginstances': 'Запущенные инстансы',
'dashboard.activeModels.name': 'Название модели',
'dashboard.allocatevram': 'Выделено VRAM / ОЗУ',
'dashboard.usage.selectuser': 'Выбрать пользователей',
'dashboard.usage.selectmodel': 'Выбрать модели',
+2 -11
View File
@@ -1,33 +1,24 @@
export default {
'dashboard.title': 'Gösterge Paneli',
'dashboard.workers': 'İşçi Düğümler',
'dashboard.models': 'Modeller',
'dashboard.deployments': 'Deployments',
'dashboard.clusters': 'Kümeler',
'dashboard.totalgpus': "GPU'lar",
'dashboard.allocategpus': "Ayrılan GPU'lar",
'dashboard.instances': 'Örnekler',
'dashboard.systemload': 'Sistem Yükü',
'dashboard.memory': 'RAM',
'dashboard.disk': 'Depolama',
'dashboard.vram': 'VRAM',
'dashboard.cpuutilization': 'Ortalama CPU Kullanımı',
'dashboard.memoryutilization': 'Ortalama RAM Kullanımı',
'dashboard.diskutilization': 'Depolama Kullanımı',
'dashboard.vramutilization': 'Ortalama VRAM Kullanımı',
'dashboard.gpuutilization': 'Ortalama GPU Kullanımı',
'dashboard.usage': 'Kullanım',
'dashboard.apirequest': 'API İstekleri',
'dashboard.tokens': 'Token Kullanımı',
'dashboard.topusers': 'En Aktif Kullanıcılar',
'dashboard.activeModels': 'Aktif Modeller',
'dashboard.activeUsers': 'Aktif Kullanıcılar',
'dashboard.activeDeployments': 'Active Deployments',
'dashboard.tokenUsageByModel': 'Modele Göre Token Kullanımı',
'dashboard.apiRequestsByModel': 'Modele Göre API İstekleri',
'dashboard.topTokenUsageByUser': 'Kullanıcıya Göre İlk 10 Token Kullanımı',
'dashboard.topTokenUsageByApiKey':
'API Anahtarına Göre İlk 10 Token Kullanımı',
'dashboard.runninginstances': 'Çalışan Örnekler',
'dashboard.activeModels.name': 'Model Adı',
'dashboard.allocatevram': 'Ayrılan VRAM / RAM',
'dashboard.usage.selectuser': 'Kullanıcı seçin',
'dashboard.usage.selectmodel': 'Model seçin',
+2 -11
View File
@@ -1,32 +1,23 @@
export default {
'dashboard.title': '概览',
'dashboard.workers': '节点',
'dashboard.models': '模型',
'dashboard.deployments': '部署',
'dashboard.clusters': '集群',
'dashboard.totalgpus': 'GPUs',
'dashboard.allocategpus': '已分配 GPU 数量',
'dashboard.instances': '实例',
'dashboard.systemload': '系统负载',
'dashboard.memory': '内存',
'dashboard.disk': '磁盘',
'dashboard.vram': '显存',
'dashboard.cpuutilization': '平均 CPU 利用率',
'dashboard.memoryutilization': '平均内存利用率',
'dashboard.diskutilization': '磁盘利用率',
'dashboard.vramutilization': '平均显存利用率',
'dashboard.gpuutilization': '平均 GPU 利用率',
'dashboard.usage': '使用量',
'dashboard.apirequest': 'API 请求',
'dashboard.tokens': 'Token 使用量',
'dashboard.topusers': '用户排行',
'dashboard.activeModels': '活跃模型',
'dashboard.activeUsers': '活跃用户',
'dashboard.activeDeployments': '活跃部署',
'dashboard.tokenUsageByModel': '按模型统计 Token 使用量',
'dashboard.apiRequestsByModel': '按模型统计 API 请求数',
'dashboard.topTokenUsageByUser': '用户 Token 使用量 Top 10',
'dashboard.topTokenUsageByApiKey': 'API 密钥 Token 使用量 Top 10',
'dashboard.activeModels.name': '模型名称',
'dashboard.runninginstances': '运行实例',
'dashboard.allocatevram': '已分配显存 / 内存',
'dashboard.usage.selectuser': '选择用户',
'dashboard.usage.selectmodel': '选择模型',
@@ -106,7 +106,7 @@ const ActiveTable = () => {
fontWeight: 'var(--font-weight-bold)'
}}
>
{intl.formatMessage({ id: 'dashboard.activeModels' })}
{intl.formatMessage({ id: 'dashboard.activeDeployments' })}
</span>
}
right={false}
+1 -1
View File
@@ -51,7 +51,7 @@ const NewUsage = () => {
tokenByModelQuery.fetchData({
...commonParams,
metric: 'total_tokens',
group_by: ['date', 'model'],
group_by: ['date', 'route'],
sort_by: '-total_tokens'
})
]);
@@ -27,7 +27,7 @@ const ApiRequestsByModel: React.FC<ApiRequestsByModelProps> = ({
.fetchData({
...commonParams,
metric: 'api_requests',
group_by: ['date', 'model'],
group_by: ['date', 'route'],
page: 1,
perPage: 10,
sort_by: '-api_requests'
@@ -36,7 +36,7 @@ const ApiRequestsByModel: React.FC<ApiRequestsByModelProps> = ({
}, [commonParams]);
const chartData = useMemo(
() => toUsagePieData(query.detailData, 'model', 'api_requests'),
() => toUsagePieData(query.detailData, 'route', 'api_requests'),
[query.detailData]
);
@@ -21,7 +21,7 @@ const TokenUsageByModel: React.FC<TokenUsageByModelProps> = ({
const intl = useIntl();
const chartData = useMemo(
() => toUsagePieData(data, 'model', 'total_tokens'),
() => toUsagePieData(data, 'route', 'total_tokens'),
[data]
);
+11 -2
View File
@@ -22,7 +22,7 @@ export const overviewConfigs = [
{
key: 'model_count',
label: 'dashboard.models',
label: 'dashboard.deployments',
backgroundColor: 'var(--color-white-1)'
},
{
@@ -41,7 +41,7 @@ export const baseColorMap = {
baseR3: 'rgba(85,167,255,0.8)'
};
export type UsageGroupBy = 'model' | 'user' | 'api_key';
export type UsageGroupBy = 'model' | 'route' | 'user' | 'api_key';
export type UsageMetric = 'total_tokens' | 'api_requests';
export interface UsageChartDatum {
@@ -104,6 +104,15 @@ export const buildUsageLabel = (item: BreakdownItem, groupBy: UsageGroupBy) => {
return groupItem?.label || modelName || '-';
}
if (groupBy === 'route') {
return (
groupItem?.label ||
identityValue?.route_name ||
groupValue?.route_name ||
'-'
);
}
return (
groupItem?.label ||
identityValue?.user_name ||