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:
@@ -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();
|
||||
Reference in New Issue
Block a user