/** * Admin Dashboard API endpoints * Provides system-wide statistics and metrics */ import { apiClient } from '../client' import type { DashboardStats, TrendDataPoint, ModelStat, ApiKeyUsageTrendPoint, UserUsageTrendPoint } from '@/types' /** * Get dashboard statistics * @returns Dashboard statistics including users, keys, accounts, and token usage */ export async function getStats(): Promise { const { data } = await apiClient.get('/admin/dashboard/stats') return data } /** * Get real-time metrics * @returns Real-time system metrics */ export async function getRealtimeMetrics(): Promise<{ active_requests: number requests_per_minute: number average_response_time: number error_rate: number }> { const { data } = await apiClient.get<{ active_requests: number requests_per_minute: number average_response_time: number error_rate: number }>('/admin/dashboard/realtime') return data } export interface TrendParams { start_date?: string end_date?: string granularity?: 'day' | 'hour' user_id?: number api_key_id?: number model?: string account_id?: number group_id?: number stream?: boolean billing_type?: number | null } export interface TrendResponse { trend: TrendDataPoint[] start_date: string end_date: string granularity: string } /** * Get usage trend data * @param params - Query parameters for filtering * @returns Usage trend data */ export async function getUsageTrend(params?: TrendParams): Promise { const { data } = await apiClient.get('/admin/dashboard/trend', { params }) return data } export interface ModelStatsParams { start_date?: string end_date?: string user_id?: number api_key_id?: number model?: string account_id?: number group_id?: number stream?: boolean billing_type?: number | null } export interface ModelStatsResponse { models: ModelStat[] start_date: string end_date: string } /** * Get model usage statistics * @param params - Query parameters for filtering * @returns Model usage statistics */ export async function getModelStats(params?: ModelStatsParams): Promise { const { data } = await apiClient.get('/admin/dashboard/models', { params }) return data } export interface ApiKeyTrendParams extends TrendParams { limit?: number } export interface ApiKeyTrendResponse { trend: ApiKeyUsageTrendPoint[] start_date: string end_date: string granularity: string } /** * Get API key usage trend data * @param params - Query parameters for filtering * @returns API key usage trend data */ export async function getApiKeyUsageTrend( params?: ApiKeyTrendParams ): Promise { const { data } = await apiClient.get('/admin/dashboard/api-keys-trend', { params }) return data } export interface UserTrendParams extends TrendParams { limit?: number } export interface UserTrendResponse { trend: UserUsageTrendPoint[] start_date: string end_date: string granularity: string } /** * Get user usage trend data * @param params - Query parameters for filtering * @returns User usage trend data */ export async function getUserUsageTrend(params?: UserTrendParams): Promise { const { data } = await apiClient.get('/admin/dashboard/users-trend', { params }) return data } export interface BatchUserUsageStats { user_id: number today_actual_cost: number total_actual_cost: number } export interface BatchUsersUsageResponse { stats: Record } /** * Get batch usage stats for multiple users * @param userIds - Array of user IDs * @returns Usage stats map keyed by user ID */ export async function getBatchUsersUsage(userIds: number[]): Promise { const { data } = await apiClient.post('/admin/dashboard/users-usage', { user_ids: userIds }) return data } export interface BatchApiKeyUsageStats { api_key_id: number today_actual_cost: number total_actual_cost: number } export interface BatchApiKeysUsageResponse { stats: Record } /** * Get batch usage stats for multiple API keys * @param apiKeyIds - Array of API key IDs * @returns Usage stats map keyed by API key ID */ export async function getBatchApiKeysUsage( apiKeyIds: number[] ): Promise { const { data } = await apiClient.post( '/admin/dashboard/api-keys-usage', { api_key_ids: apiKeyIds } ) return data } export const dashboardAPI = { getStats, getRealtimeMetrics, getUsageTrend, getModelStats, getApiKeyUsageTrend, getUserUsageTrend, getBatchUsersUsage, getBatchApiKeysUsage } export default dashboardAPI