174 lines
4.4 KiB
TypeScript
174 lines
4.4 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';
|
|
}
|
|
|
|
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 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<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;
|