From b45c562717b7ab3c12aecb7aba7be13a84468eea Mon Sep 17 00:00:00 2001 From: Mika Date: Sat, 10 Jan 2026 14:23:01 +0000 Subject: [PATCH] Add data_visualization/js/api.js --- data_visualization/js/api.js | 54 ++++++++++++++++++++++++++++++++++++ 1 file changed, 54 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..74d8631 --- /dev/null +++ b/data_visualization/js/api.js @@ -0,0 +1,54 @@ +"use strict"; + +/** + * Modul zur Kommunikation mit der Backend-API für Migrationsmetriken. + * Bezieht strukturierte Datenobjekte und bereitet sie zur Nutzung in der Visualisierung vor. + */ + +/** + * Baut eine Query-String-URL aus den optionalen Parametern. + * @param {object} params - Key-Value Paare für optionale Parameter. + * @returns {string} Query-String mit vorangestelltem ? oder leerem String. + */ +function buildQueryString(params = {}) { + const queryEntries = Object.entries(params).filter(([_, v]) => v !== undefined && v !== null && v !== ""); + if (queryEntries.length === 0) return ""; + const query = queryEntries.map(([k, v]) => `${encodeURIComponent(k)}=${encodeURIComponent(v)}`).join("&"); + return `?${query}`; +} + +/** + * Lädt Metrikdaten der Migrationen vom Server. + * @param {object} [filters] - Optional: { filter: 'setup_type', run_id: string } + * @returns {Promise} metric_report - Das JSON-Objekt mit setups, metrics und spikes. + */ +export async function fetchMigrationReport(filters = {}) { + const endpoint = "/migration_report"; + const queryString = buildQueryString(filters); + const url = `${endpoint}${queryString}`; + + try { + const response = await fetch(url, { method: "GET" }); + if (!response.ok) { + console.error(`API request failed with status ${response.status}`); + return { setups: [], metrics: [], spikes: [] }; + } + const data = await response.json(); + + // Strukturprüfung der erwarteten Felder + if (!data || typeof data !== "object") { + console.error("Invalid JSON structure from /migration_report"); + return { setups: [], metrics: [], spikes: [] }; + } + + // Mindestvalidierungen der erwarteten Felder + const setups = Array.isArray(data.setups) ? data.setups : []; + const metrics = Array.isArray(data.metrics) ? data.metrics : []; + const spikes = Array.isArray(data.spikes) ? data.spikes : []; + + return { setups, metrics, spikes }; + } catch (error) { + console.error("Error fetching migration report:", error); + return { setups: [], metrics: [], spikes: [] }; + } +}