mirror of
https://github.com/farion1231/cc-switch.git
synced 2026-05-25 15:31:10 +08:00
687ffc237d
Add dashboard-level app type filter to usage statistics, replacing the DataSourceBar with a more useful segmented control. All components (summary cards, trend chart, provider stats, model stats, request logs) now respond to the selected app filter. Backend: add optional app_type parameter to get_usage_summary, get_daily_trends, get_provider_stats, and get_model_stats queries. Frontend: new AppTypeFilter type, updated query keys with appType dimension for proper cache separation, and RequestLogTable local filter auto-locks when dashboard filter is active.
133 lines
2.7 KiB
TypeScript
133 lines
2.7 KiB
TypeScript
// 使用统计相关类型定义
|
|
|
|
export interface TokenUsage {
|
|
inputTokens: number;
|
|
outputTokens: number;
|
|
cacheReadTokens: number;
|
|
cacheCreationTokens: number;
|
|
}
|
|
|
|
export interface RequestLog {
|
|
requestId: string;
|
|
providerId: string;
|
|
providerName?: string;
|
|
appType: string;
|
|
model: string;
|
|
requestModel?: string;
|
|
costMultiplier: string;
|
|
inputTokens: number;
|
|
outputTokens: number;
|
|
cacheReadTokens: number;
|
|
cacheCreationTokens: number;
|
|
inputCostUsd: string;
|
|
outputCostUsd: string;
|
|
cacheReadCostUsd: string;
|
|
cacheCreationCostUsd: string;
|
|
totalCostUsd: string;
|
|
isStreaming: boolean;
|
|
latencyMs: number;
|
|
firstTokenMs?: number;
|
|
durationMs?: number;
|
|
statusCode: number;
|
|
errorMessage?: string;
|
|
createdAt: number;
|
|
dataSource?: string;
|
|
}
|
|
|
|
export interface SessionSyncResult {
|
|
imported: number;
|
|
skipped: number;
|
|
filesScanned: number;
|
|
errors: string[];
|
|
}
|
|
|
|
export interface DataSourceSummary {
|
|
dataSource: string;
|
|
requestCount: number;
|
|
totalCostUsd: string;
|
|
}
|
|
|
|
export interface PaginatedLogs {
|
|
data: RequestLog[];
|
|
total: number;
|
|
page: number;
|
|
pageSize: number;
|
|
}
|
|
|
|
export interface ModelPricing {
|
|
modelId: string;
|
|
displayName: string;
|
|
inputCostPerMillion: string;
|
|
outputCostPerMillion: string;
|
|
cacheReadCostPerMillion: string;
|
|
cacheCreationCostPerMillion: string;
|
|
}
|
|
|
|
export interface UsageSummary {
|
|
totalRequests: number;
|
|
totalCost: string;
|
|
totalInputTokens: number;
|
|
totalOutputTokens: number;
|
|
totalCacheCreationTokens: number;
|
|
totalCacheReadTokens: number;
|
|
successRate: number;
|
|
}
|
|
|
|
export interface DailyStats {
|
|
date: string;
|
|
requestCount: number;
|
|
totalCost: string;
|
|
totalTokens: number;
|
|
totalInputTokens: number;
|
|
totalOutputTokens: number;
|
|
totalCacheCreationTokens: number;
|
|
totalCacheReadTokens: number;
|
|
}
|
|
|
|
export interface ProviderStats {
|
|
providerId: string;
|
|
providerName: string;
|
|
requestCount: number;
|
|
totalTokens: number;
|
|
totalCost: string;
|
|
successRate: number;
|
|
avgLatencyMs: number;
|
|
}
|
|
|
|
export interface ModelStats {
|
|
model: string;
|
|
requestCount: number;
|
|
totalTokens: number;
|
|
totalCost: string;
|
|
avgCostPerRequest: string;
|
|
}
|
|
|
|
export interface LogFilters {
|
|
appType?: string;
|
|
providerName?: string;
|
|
model?: string;
|
|
statusCode?: number;
|
|
startDate?: number;
|
|
endDate?: number;
|
|
}
|
|
|
|
export interface ProviderLimitStatus {
|
|
providerId: string;
|
|
dailyUsage: string;
|
|
dailyLimit?: string;
|
|
dailyExceeded: boolean;
|
|
monthlyUsage: string;
|
|
monthlyLimit?: string;
|
|
monthlyExceeded: boolean;
|
|
}
|
|
|
|
export type TimeRange = "1d" | "7d" | "30d";
|
|
|
|
export type AppTypeFilter = "all" | "claude" | "codex" | "gemini";
|
|
|
|
export interface StatsFilters {
|
|
timeRange: TimeRange;
|
|
providerId?: string;
|
|
appType?: string;
|
|
}
|