feat(04-01): extend adminService with monitoring API methods and types

- Add AlertEvent interface (snake_case per backend raw model data)
- Add ServiceHealthEntry interface (camelCase per backend admin.ts remapping)
- Add AnalyticsSummary interface (camelCase per analyticsService.ts)
- Add getHealth(), getAnalytics(range), getAlerts(), acknowledgeAlert(id) methods
This commit is contained in:
admin
2026-02-24 16:34:29 -05:00
parent 9c4b9a5e12
commit f84a822989

View File

@@ -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<string, unknown> | 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<void> {
await apiClient.post('/admin/send-weekly-summary');
}
/**
* Get service health status for all monitored services (admin only)
*/
async getHealth(): Promise<ServiceHealthEntry[]> {
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<AnalyticsSummary> {
const response = await apiClient.get(`/admin/analytics?range=${range}`);
return response.data.data;
}
/**
* Get active alert events (admin only)
*/
async getAlerts(): Promise<AlertEvent[]> {
const response = await apiClient.get('/admin/alerts');
return response.data.data;
}
/**
* Acknowledge an alert by ID (admin only)
*/
async acknowledgeAlert(id: string): Promise<AlertEvent> {
const response = await apiClient.post(`/admin/alerts/${id}/acknowledge`);
return response.data.data;
}
}
export const adminService = new AdminService();