From d293e637f6c1dbccf78dc556a11637ad33a16921 Mon Sep 17 00:00:00 2001 From: Xargana Date: Tue, 8 Apr 2025 16:42:43 +0300 Subject: [PATCH] hopefully fixed monitoring for pm2 --- api/status/status.js | 74 ++++++++++++++++++++++++++++++++------------ 1 file changed, 54 insertions(+), 20 deletions(-) diff --git a/api/status/status.js b/api/status/status.js index 1a02d99..c2e2392 100644 --- a/api/status/status.js +++ b/api/status/status.js @@ -25,17 +25,23 @@ REMOTE_SERVERS.forEach(server => { let pm2ServicesStatus = {}; async function checkServers() { - for (const server of REMOTE_SERVERS) { - const startTime = Date.now(); - try { - const res = await ping.promise.probe(server.host); - serversStatus[server.name].online = res.alive; - serversStatus[server.name].responseTime = res.time; - } catch (error) { - serversStatus[server.name].online = false; - serversStatus[server.name].responseTime = null; + try { + for (const server of REMOTE_SERVERS) { + try { + const res = await ping.promise.probe(server.host, { + timeout: 2, // Set a timeout of 2 seconds + }); + serversStatus[server.name].online = res.alive; + serversStatus[server.name].responseTime = res.time; + } catch (error) { + console.error(`Error pinging ${server.host}:`, error); + serversStatus[server.name].online = false; + serversStatus[server.name].responseTime = null; + } + serversStatus[server.name].lastChecked = new Date().toISOString(); } - serversStatus[server.name].lastChecked = new Date().toISOString(); + } catch (error) { + console.error("Error in checkServers function:", error); } } @@ -63,8 +69,8 @@ async function checkPM2Services() { name: process.name, id: process.pm_id, status: process.pm2_env.status, - cpu: process.monit.cpu, - memory: process.monit.memory, + cpu: process.monit ? process.monit.cpu : null, + memory: process.monit ? process.monit.memory : null, uptime: process.pm2_env.pm_uptime ? Date.now() - process.pm2_env.pm_uptime : null, @@ -81,18 +87,46 @@ async function checkPM2Services() { } async function checkAll() { - await checkServers(); - await checkPM2Services(); + try { + await checkServers(); + await checkPM2Services(); + } catch (error) { + console.error("Error in checkAll function:", error); + } } -setInterval(checkAll, CHECK_INTERVAL); -checkAll(); +// Initial check with error handling +try { + checkAll(); +} catch (error) { + console.error("Error during initial check:", error); +} +// Set interval with error handling +setInterval(() => { + try { + checkAll(); + } catch (error) { + console.error("Error during scheduled check:", error); + } +}, CHECK_INTERVAL); + +// Route with error handling router.get("/", (req, res) => { - res.json({ - servers: serversStatus, - pm2Services: pm2ServicesStatus - }); + try { + res.json({ + servers: serversStatus, + pm2Services: pm2ServicesStatus + }); + } catch (error) { + console.error("Error sending status response:", error); + res.status(500).json({ error: "Internal server error" }); + } +}); + +// Add a simple health check endpoint +router.get("/health", (req, res) => { + res.status(200).send("OK"); }); module.exports = router;