diff --git a/frontend/src/services/adminService.ts b/frontend/src/services/adminService.ts index ac52c4a..454c208 100644 --- a/frontend/src/services/adminService.ts +++ b/frontend/src/services/adminService.ts @@ -15,6 +15,36 @@ apiClient.interceptors.request.use(async (reqConfig) => { return reqConfig; }); +export interface AlertEvent { + id: string; + service_name: string; + alert_type: 'service_down' | 'service_degraded' | 'recovery'; + status: 'active' | 'acknowledged' | 'resolved'; + message: string | null; + details: Record | null; + created_at: string; + acknowledged_at: string | null; + resolved_at: string | null; +} + +export interface ServiceHealthEntry { + service: string; + status: 'healthy' | 'degraded' | 'down' | 'unknown'; + checkedAt: string | null; + latencyMs: number | null; + errorMessage: string | null; +} + +export interface AnalyticsSummary { + range: string; + totalUploads: number; + succeeded: number; + failed: number; + successRate: number; + avgProcessingMs: number | null; + generatedAt: string; +} + export interface AdminUser { id: string; email: string; @@ -103,6 +133,38 @@ class AdminService { async sendWeeklySummaryEmail(): Promise { await apiClient.post('/admin/send-weekly-summary'); } + + /** + * Get service health status for all monitored services (admin only) + */ + async getHealth(): Promise { + const response = await apiClient.get('/admin/health'); + return response.data.data; + } + + /** + * Get processing analytics summary for a given time range (admin only) + */ + async getAnalytics(range: string = '24h'): Promise { + const response = await apiClient.get(`/admin/analytics?range=${range}`); + return response.data.data; + } + + /** + * Get active alert events (admin only) + */ + async getAlerts(): Promise { + const response = await apiClient.get('/admin/alerts'); + return response.data.data; + } + + /** + * Acknowledge an alert by ID (admin only) + */ + async acknowledgeAlert(id: string): Promise { + const response = await apiClient.post(`/admin/alerts/${id}/acknowledge`); + return response.data.data; + } } export const adminService = new AdminService(); \ No newline at end of file