From 083b4caa74ba01cb8f03b22d7845daae38280c8b Mon Sep 17 00:00:00 2001 From: Mika Date: Mon, 16 Mar 2026 13:59:09 +0000 Subject: [PATCH] Add data_visualization/js/api.js --- data_visualization/js/api.js | 62 ++++++++++++++++++++++++++++++++++++ 1 file changed, 62 insertions(+) create mode 100644 data_visualization/js/api.js diff --git a/data_visualization/js/api.js b/data_visualization/js/api.js new file mode 100644 index 0000000..f360160 --- /dev/null +++ b/data_visualization/js/api.js @@ -0,0 +1,62 @@ +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 +}; \ No newline at end of file