import React, { useState, useEffect } from 'react'; import axios from 'axios'; import { Button, Typography, Paper, Box, CircularProgress, Alert, Snackbar, Table, TableBody, TableCell, TableContainer, TableHead, TableRow } from '@mui/material'; const MetricsAnalyzer = () => { const [loading, setLoading] = useState(false); const [metrics, setMetrics] = useState([]); const [analysisResult, setAnalysisResult] = useState(null); const [error, setError] = useState(null); const [openSnackbar, setOpenSnackbar] = useState(false); const transformMetricsForAnalysis = (metrics) => { return metrics.flatMap(metricResponse => metricResponse.data.map(metricData => ({ description: metricData.description, device: parseInt(metricData.device, 10), id: metricData.source_id, name: metricData.__name__, source: metricData.instance, status: parseInt(metricData.status, 10), timestamp: metricData.timestamp, value: metricData.value.toString() })) ); }; const analyzeMetrics = async () => { try { setLoading(true); setError(null); // 1. Сначала загружаем метрики const metricsResponse = await axios.get(`/api/metrics/all-values`); setMetrics(metricsResponse.data); // 2. Преобразуем и отправляем на анализ const requestData = transformMetricsForAnalysis(metricsResponse.data); const analysisResponse = await axios.get(`:5134/api/metrics/rest`, { data: requestData, headers: { 'Content-Type': 'application/json', } }); setAnalysisResult(analysisResponse.data); setOpenSnackbar(true); } catch (err) { const errorMessage = err.response?.data?.message || err.message || 'Ошибка при анализе метрик'; setError(errorMessage); setOpenSnackbar(true); } finally { setLoading(false); } }; const handleCloseSnackbar = () => { setOpenSnackbar(false); }; return ( Анализ метрик системы {analysisResult && ( Результаты анализа {Array.isArray(analysisResult) ? ( Параметр Результат Описание {analysisResult.map((item, index) => ( {item.name || item.parameter} {item.value || item.result} {item.description || '-'} ))}
) : ( {JSON.stringify(analysisResult, null, 2)} )}
)} {error || 'Анализ метрик успешно завершен'}
); }; export default MetricsAnalyzer;