// /pages/api/health.js export default async function handler(req, res) { const basePath = "talas5"; const protocol = "http"; const hostname = "10.10.0.70"; const port = "80"; const idMap = "12"; const idUser = "484"; const idLD = "50922"; const buildUrl = method => `${protocol}://${hostname}:${port}/${basePath}/ClientData/WebServiceMap.asmx/${method}?idMap=${idMap}&idUser=${idUser}`; const externalUrls = { GisStationsStaticDistrict: buildUrl("GisStationsStaticDistrict"), GisLinesStatus: `${protocol}://${hostname}:${port}/${basePath}/ClientData/WebServiceMap.asmx/GisLinesStatus?idMap=${idMap}`, GisStationsMeasurements: buildUrl("GisStationsMeasurements"), GisStationsStatusDistrict: buildUrl("GisStationsStatusDistrict"), GisSystemStatic: buildUrl("GisSystemStatic"), }; const internalApiBase = "http://localhost:3000"; const internalApis = { //area readArea: `${internalApiBase}/api/talas_v5_DB/area/readArea?m=${idMap}`, //device getAllStationsNames: `${internalApiBase}/api/talas_v5_DB/device/getAllStationsNames`, getDevices: `${internalApiBase}/api/talas_v5_DB/device/getDevices`, //gisLines readGisLines: `${internalApiBase}/api/talas_v5_DB/gisLines/readGisLines`, //locationDevice getDeviceId: `${internalApiBase}/api/talas_v5_DB/locationDevice/getDeviceId`, locationDeviceNameById: `${internalApiBase}/api/talas_v5_DB/locationDevice/locationDeviceNameById?idLD=${idLD}`, locationDevices: `${internalApiBase}/api/talas_v5_DB/locationDevice/locationDevices`, //pois addPoi: `${internalApiBase}/api/talas_v5_DB/pois/addPoi`, deletePoi: `${internalApiBase}/api/talas_v5_DB/pois/deletePoi`, getPoiById: `${internalApiBase}/api/talas_v5_DB/pois/getPoiById`, poiIcons: `${internalApiBase}/api/talas_v5_DB/pois/poi-icons`, readAllPOIs: `${internalApiBase}/api/talas_v5_DB/pois/readAllPOIs`, updateLocation: `${internalApiBase}/api/talas_v5_DB/pois/updateLocation`, updatePoi: `${internalApiBase}/api/talas_v5_DB/pois/updatePoi`, //poiTyp readPoiTyp: `${internalApiBase}/api/talas_v5_DB/poiTyp/readPoiTyp`, //station getAllStationsNames: `${internalApiBase}/api/talas_v5_DB/station/getAllStationsNames`, getDevices: `${internalApiBase}/api/talas_v5_DB/station/getDevices`, // priorityConfig: `${internalApiBase}/api/talas_v5_DB/priorityConfig`, }; const results = {}; // Prüfe externe Webservices await Promise.all( Object.entries(externalUrls).map(async ([name, url]) => { try { const response = await fetch(url); results[name] = { ok: response.ok, status: response.status, url, }; if (name === "GisSystemStatic" && response.ok) { const data = await response.json(); results["UserRights"] = { ok: Array.isArray(data.Rights), length: data.Rights?.length || 0, }; } } catch (error) { results[name] = { ok: false, error: error.message, url, }; } }) ); // Prüfe interne API-Routen await Promise.all( Object.entries(internalApis).map(async ([name, url]) => { try { const response = await fetch(url); results[`API_${name}`] = { ok: response.ok, status: response.status, url, }; } catch (error) { results[`API_${name}`] = { ok: false, error: error.message, url, }; } }) ); // Prüfe Mock-Status const useMocksEnv = process.env.NEXT_PUBLIC_USE_MOCKS; results["MockMode"] = { expected: "false", actual: useMocksEnv, ok: useMocksEnv === "false", info: useMocksEnv === "false" ? "✅ Mockdaten deaktiviert – Live-Daten aktiv." : "⚠️ Mockdaten aktiv – nicht für Produktion geeignet!", }; // Prüfe Konfiguration der .env.production results["envConfig"] = { NODE_ENV: process.env.NODE_ENV || "undefined", DB_HOST: process.env.DB_HOST || "❌ fehlt", NEXT_PUBLIC_USE_MOCKS: useMocksEnv || "❌ fehlt", status: process.env.NODE_ENV === "production" && useMocksEnv === "false" && process.env.DB_HOST ? "✅ .env.production scheint korrekt." : "⚠️ Bitte .env.production prüfen – möglicherweise fehlt etwas.", }; const allOk = Object.values(results).every(r => r.ok); res.status(allOk ? 200 : 207).json({ status: allOk ? "ok" : "partial", version: "1.0.0", services: results, }); }