From abf05c1fe1bf424b8535351380a1aed9d179bf82 Mon Sep 17 00:00:00 2001 From: Mika Date: Mon, 12 Jan 2026 11:39:20 +0000 Subject: [PATCH] Add spike_visualizer/js/api.js --- spike_visualizer/js/api.js | 52 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 spike_visualizer/js/api.js diff --git a/spike_visualizer/js/api.js b/spike_visualizer/js/api.js new file mode 100644 index 0000000..58f920d --- /dev/null +++ b/spike_visualizer/js/api.js @@ -0,0 +1,52 @@ +'use strict'; + +/** + * fetchSpikes - Holt Spike-Daten vom API-Endpunkt /api/spikes ab. + * + * @param {Object} [filters={}] - Optionale Filterparameter (cpu_id, start_time, end_time) + * @returns {Promise} - Promise, das ein Array klassifizierter Spike-Objekte zurückgibt. + */ +export async function fetchSpikes(filters = {}) { + const params = new URLSearchParams(); + + if (filters.cpu_id !== undefined && filters.cpu_id !== null) { + params.append('cpu_id', filters.cpu_id); + } + if (filters.start_time) { + params.append('start_time', filters.start_time); + } + if (filters.end_time) { + params.append('end_time', filters.end_time); + } + + const queryString = params.toString() ? `?${params.toString()}` : ''; + const url = `/api/spikes${queryString}`; + + try { + const response = await fetch(url, { + method: 'GET', + headers: { + 'Accept': 'application/json' + } + }); + + if (!response.ok) { + console.error(`Fehler beim Laden der Spike-Daten: ${response.status}`); + return []; + } + + const data = await response.json(); + + if (!Array.isArray(data)) { + console.warn('Unerwartetes Antwortformat der API. Erwartet: Array von Spike-Objekten.'); + return []; + } + + return data.filter(item => + item && typeof item === 'object' && 'id' in item && 'timestamp' in item + ); + } catch (error) { + console.error('Netzwerk- oder Parsing-Fehler beim Abrufen der Spike-Daten:', error); + return []; + } +} \ No newline at end of file