54 lines
2 KiB
JavaScript
54 lines
2 KiB
JavaScript
"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: [] };
|
|
}
|
|
}
|