/** * 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'; } 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 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?: { start_date?: string; end_date?: string }): 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;