71 lines
2.4 KiB
JavaScript
71 lines
2.4 KiB
JavaScript
/**
|
|
* @module api
|
|
* @description
|
|
* Dieses Modul stellt Funktionen zum Abruf der Magnetometerdaten und Analysemetriken
|
|
* über die API-Endpunkte /api/data und /api/analysis bereit.
|
|
*/
|
|
|
|
/**
|
|
* Hilfsfunktion zum sicheren Aufbau einer Query-URL mit optionalen Parametern.
|
|
* @param {string} baseURL - Basis der API-Route
|
|
* @param {Object} [params={}] - optionale Parameter
|
|
* @returns {string} zusammengesetzte URL
|
|
*/
|
|
function buildQueryURL(baseURL, params = {}) {
|
|
const queryEntries = Object.entries(params)
|
|
.filter(([_, value]) => value !== undefined && value !== null && value !== '');
|
|
if (queryEntries.length === 0) return baseURL;
|
|
const queryString = new URLSearchParams(queryEntries).toString();
|
|
return `${baseURL}?${queryString}`;
|
|
}
|
|
|
|
/**
|
|
* Holt Magnetometerdaten von /api/data.
|
|
* @async
|
|
* @param {Object} [filters={}] - optionale Filter, z.B. { time_range, sensor_id }
|
|
* @returns {Promise<Array<{timestamp:string, sensor:string, Bx:number, By:number, Bz:number}>>}
|
|
*/
|
|
export async function fetchData(filters = {}) {
|
|
const url = buildQueryURL('/api/data', filters);
|
|
try {
|
|
const response = await fetch(url);
|
|
if (!response.ok) {
|
|
console.error(`Fehler beim Laden der Daten: ${response.status}`);
|
|
return [];
|
|
}
|
|
const data = await response.json();
|
|
if (!Array.isArray(data)) {
|
|
console.warn('Unerwartetes Datenformat von /api/data');
|
|
return [];
|
|
}
|
|
return data;
|
|
} catch (error) {
|
|
console.error('Netzwerk- oder Parsing-Fehler bei fetchData:', error);
|
|
return [];
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Holt Analyseergebnisse von /api/analysis.
|
|
* @async
|
|
* @returns {Promise<{mean:number, peaks:Array, noise:number, drift:number}>}
|
|
*/
|
|
export async function fetchAnalysis() {
|
|
try {
|
|
const response = await fetch('/api/analysis');
|
|
if (!response.ok) {
|
|
console.error(`Fehler beim Laden der Analyseergebnisse: ${response.status}`);
|
|
return { mean: 0, peaks: [], noise: 0, drift: 0 };
|
|
}
|
|
const result = await response.json();
|
|
if (typeof result !== 'object' || result === null) {
|
|
console.warn('Unerwartetes Datenformat von /api/analysis');
|
|
return { mean: 0, peaks: [], noise: 0, drift: 0 };
|
|
}
|
|
const { mean = 0, peaks = [], noise = 0, drift = 0 } = result;
|
|
return { mean, peaks, noise, drift };
|
|
} catch (error) {
|
|
console.error('Netzwerk- oder Parsing-Fehler bei fetchAnalysis:', error);
|
|
return { mean: 0, peaks: [], noise: 0, drift: 0 };
|
|
}
|
|
}
|