210 lines
4.8 KiB
TypeScript
210 lines
4.8 KiB
TypeScript
/**
|
|
* 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<DashboardStats> {
|
|
const { data } = await apiClient.get<DashboardStats>('/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<TrendResponse> {
|
|
const { data } = await apiClient.get<TrendResponse>('/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<ModelStatsResponse> {
|
|
const { data } = await apiClient.get<ModelStatsResponse>('/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<ApiKeyTrendResponse> {
|
|
const { data } = await apiClient.get<ApiKeyTrendResponse>('/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<UserTrendResponse> {
|
|
const { data } = await apiClient.get<UserTrendResponse>('/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<string, BatchUserUsageStats>
|
|
}
|
|
|
|
/**
|
|
* 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<BatchUsersUsageResponse> {
|
|
const { data } = await apiClient.post<BatchUsersUsageResponse>('/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<string, BatchApiKeyUsageStats>
|
|
}
|
|
|
|
/**
|
|
* 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<BatchApiKeysUsageResponse> {
|
|
const { data } = await apiClient.post<BatchApiKeysUsageResponse>(
|
|
'/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
|