Add data_visualization_web_ui/js/api.js
This commit is contained in:
parent
5549b520bb
commit
00610b9086
1 changed files with 71 additions and 0 deletions
71
data_visualization_web_ui/js/api.js
Normal file
71
data_visualization_web_ui/js/api.js
Normal file
|
|
@ -0,0 +1,71 @@
|
|||
/**
|
||||
* @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 };
|
||||
}
|
||||
}
|
||||
Loading…
Reference in a new issue