Add data_visualization/js/api.js
This commit is contained in:
parent
c0f54d63a0
commit
b45c562717
1 changed files with 54 additions and 0 deletions
54
data_visualization/js/api.js
Normal file
54
data_visualization/js/api.js
Normal file
|
|
@ -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<object>} 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: [] };
|
||||
}
|
||||
}
|
||||
Loading…
Reference in a new issue