run_31_analysis/data_visualization/js/api.js

48 lines
1.3 KiB
JavaScript

/**
* Daten-Layer-Modul zur Kommunikation mit der API /results
* Verantwortlich für das Abrufen von Experimentergebnissen mit optionalen Filtern.
*
* @module api
*/
/**
* Sendet GET-Anfrage an /results und gibt das JSON-Ergebnis zurück.
* @async
* @function fetchResults
* @param {Object} [filters={}] - Optionale Filterparameter (run_id, parallelism, Zeitraum etc.)
* @returns {Promise<Array<Object>>} - Gibt ein Array von Testergebnisobjekten zurück
* @throws {Error} Falls die Anfrage fehlschlägt oder ungültige Daten empfängt
*/
export async function fetchResults(filters = {}) {
const url = new URL('/results', window.location.origin);
Object.entries(filters).forEach(([key, value]) => {
if (value !== undefined && value !== null && value !== '') {
url.searchParams.append(key, value);
}
});
try {
const response = await fetch(url.toString(), {
method: 'GET',
headers: {
'Accept': 'application/json'
}
});
if (!response.ok) {
throw new Error(`API-Fehler: ${response.status} ${response.statusText}`);
}
const data = await response.json();
if (!Array.isArray(data)) {
throw new Error('Unerwartetes API-Antwortformat: erwartet Array');
}
return data;
} catch (error) {
console.error('Fehler beim Laden der Ergebnisse:', error);
throw error;
}
}