/** * @file Abfrage-Skript für den SAP Endpoint Service. * Dieses Skript sendet eine Liste von API-Endpunkten an den lokalen FastAPI-Bulk-Service, * wertet die Ergebnisse aus und gibt sie formatiert in der Konsole aus. * @author MBT * @version 1.0 */ const path = require('path'); require('dotenv').config({ path: path.resolve(__dirname, '../../src/.env') }); /** * @typedef {Object} EndpointResult * @property {string} endpoint - Der geprüfte SAP-Endpunkt. * @property {string} status - Der SAP-Status (z. B. "Deprecated", "active", "Unbekannt"). * @property {string} message - Die detaillierte Statusmeldung der SAP-Prüfung. */ /** * @typedef {Object} BulkApiResponse * @property {number} total_checked - Die Gesamtanzahl der geprüften Endpunkte. * @property {EndpointResult[]} results - Die Liste der einzelnen Prüfergebnisse. */ /** * Liste der SAP-Endpunkte, die auf Änderungen oder Deprecations geprüft werden sollen. * @type {string[]} */ const endpointsToCheck = [ "v1/inventories" ]; /** * Erstellt die URL-Query-Parameter für die Bulk-Abfrage. * Jedes Element aus `endpointsToCheck` wird als separater "endpoints"-Parameter angehängt. * @type {URLSearchParams} */ const params = new URLSearchParams(); endpointsToCheck.forEach(ep => { params.append("endpoints", ep); }); /** * Die Ziel-URL für den lokalen FastAPI-Bulk-Endpunkt. * @type {string} */ const url = `http://127.0.0.1:8000/informations/bulk?${params.toString()}`; const apiKeysString = process.env.APIKEYS || ""; const firstApiKey = apiKeysString.split(",")[0].trim(); const headers = { "X-API-Key": firstApiKey }; // Führt den HTTP-Call an die FastAPI aus fetch(url, { method: "GET", headers: headers }) .then(response => { if (!response.ok) { throw new Error(`HTTP-Fehler! Status: ${response.status}`); } return response.json(); // Wandelt die Antwort in ein echtes JS-Objekt um }) .then(data => { // 1. Komplette Antwort ausgeben (ohne [Array]-Kürzung durch Node.js) console.log("Gesamtes API-Feedback:"); console.log(JSON.stringify(data, null, 2)); // 2. Ergebnisse im Detail durchgehen und die berechneten SAP-Daten anzeigen if (data && data.results) { console.log("\n=== SAP API-Statusbericht ==="); data.results.forEach(item => { console.log(`\nEndpunkt: ${item.endpoint}`); console.log(`Status: ${item.status}`); console.log(`Meldung: ${item.message || 'Keine Meldung vorhanden.'}`); // Nur ausgeben, wenn wir echte Datumsdaten vom Server erhalten haben if (item.deprecated && item.deprecated.length > 0) { const [qDate, pDate] = item.deprecated; const [qDecom, pDecom] = item.decommissioned; console.log(`\n --- Upgrade- & Rückbaufristen ---`); console.log(` [Q-System] Abgekündigt: ${qDate} --> Geplanter Rückbau (+1 Jahr): ${qDecom}`); console.log(` [P-System] Abgekündigt: ${pDate} --> Geplanter Rückbau (+1 Jahr): ${pDecom}`); } else { console.log(`\n --> Keine anstehenden Abkündigungen oder Fristen für diesen Endpunkt.`); } console.log("----------------------------------------------------------------------"); }); } else { console.log("Keine 'results' im JSON-Response gefunden."); } }) .catch( /** * Catch-Block für Netzwerk- oder Verarbeitungsfehler. * @param {Error} error - Das aufgetretene Fehler-Objekt. */ error => console.error("Fehler bei der Abfrage:", error) );