stromlinien_passau_magnetfeld/data_visualization_web_ui/js/api.js

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 };
}
}