const API_BASE_URL = ''; /** * Führt einen GET-Request zur /results-API aus und gibt strukturierte Ergebnisse zurück. * @param {Object} [filters] - optionale Filterparameter (run_id, parameter_filter) * @returns {Promise} strukturierte Analyseergebnisse */ export async function fetchResults(filters = {}) { const url = new URL('/results', window.location.origin); if (filters.run_id) { url.searchParams.append('run_id', filters.run_id); } if (filters.parameter_filter) { url.searchParams.append('parameter_filter', filters.parameter_filter); } try { const response = await fetch(url.toString(), { method: 'GET', headers: { 'Accept': 'application/json' } }); if (!response.ok) { console.error('API request failed with status', response.status); return []; } const data = await response.json(); return parseResults(data); } catch (error) { console.error('Error fetching results:', error); return []; } } /** * Wandelt Rohdaten aus der API in eine konsistente Struktur für Diagramme um. * @param {Array} rawData - Nicht transformierte API-Daten * @returns {Array} strukturierte Objekte für Visualisierung */ export function parseResults(rawData = []) { if (!Array.isArray(rawData)) { console.warn('Unexpected data format from API'); return []; } return rawData.map(item => ({ runId: item.run_id ?? null, bandCenter: Number(item.band_center) || 0, bandWidth: Array.isArray(item.band_width_p10_p90) ? item.band_width_p10_p90 : [0, 0], maxOutlier: Number(item.max_outlier) || 0, overheadMs: Number(item.overhead_ms) || 0 })); } export default { fetchResults, parseResults };