fix(monitoring): diagnosa WhatsApp sadar-gateway (GoWA) + tambah cek Telegram

This commit is contained in:
oxpoe committed 2026-10-13 03:36:53 +07:00
1 parent 6f97430e41
commit 0f612df70f
2 files changed
+54 -30

No files matched your search

+45 -29
View File
@@ -17,6 +17,7 @@ async function checkDependencies() {
mikrotik: [], mikrotik: [],
genieacs: { status: 'unknown', message: '' }, genieacs: { status: 'unknown', message: '' },
whatsapp: { status: 'unknown', message: '' }, whatsapp: { status: 'unknown', message: '' },
telegram: { status: 'unknown', message: '' },
paymentGateways: [], paymentGateways: [],
timestamp: new Date().toISOString() timestamp: new Date().toISOString()
}; };
@@ -104,39 +105,54 @@ async function checkDependencies() {
} }
} }
// 3. Check WhatsApp Gateway (using whatsappStatus from whatsappBot) // 3. Check WhatsApp Gateway (GoWA / Baileys sesuai setting wa_gateway_type)
try { try {
// Import whatsappStatus dynamically to get real-time status const { getSetting } = require('../config/settingsManager');
const whatsappBotModule = await import('./whatsappBot.mjs'); const gw = String(getSetting('wa_gateway_type', 'baileys') || 'baileys').toLowerCase();
const waStatus = whatsappBotModule.whatsappStatus; if (gw === 'gowa') {
const base = String(getSetting('gowa_base_url', 'http://127.0.0.1:3000') || '').replace(/\/+$/, '');
// Check connection status const u = getSetting('gowa_username', '');
// Possible values: 'connecting', 'qr', 'open', 'loggedOut', 'close' const p = getSetting('gowa_password', '');
const isOnline = waStatus.connection === 'open'; const cfg = { timeout: 6000, validateStatus: (s) => s < 500 };
const isQR = waStatus.connection === 'qr'; if (u && p) cfg.auth = { username: u, password: p };
const isLoggedOut = waStatus.connection === 'loggedOut'; const resp = await axios.get(`${base}/app/status`, cfg);
const res = (resp.data && resp.data.results) || {};
let message = 'WhatsApp is disconnected'; const isOnline = !!res.is_connected;
if (isOnline) { results.whatsapp = {
const phone = waStatus.user?.id ? String(waStatus.user.id).split(':')[0] : 'Unknown'; status: isOnline ? 'online' : 'offline',
message = `WhatsApp connected (${phone})`; message: isOnline ? `GoWA connected (${res.jid || res.device_id || '-'})` : 'GoWA tidak terhubung'
} else if (isQR) { };
message = 'WhatsApp waiting for QR scan';
} else if (isLoggedOut) {
message = 'WhatsApp logged out - scan QR again';
} else { } else {
message = `WhatsApp ${waStatus.connection || 'disconnected'}`; const whatsappBotModule = await import('./whatsappBot.mjs');
const waStatus = whatsappBotModule.whatsappStatus;
const isOnline = waStatus && waStatus.connection === 'open';
const isQR = waStatus && waStatus.connection === 'qr';
const isLoggedOut = waStatus && waStatus.connection === 'loggedOut';
let message = 'WhatsApp is disconnected';
if (isOnline) { const phone = waStatus.user && waStatus.user.id ? String(waStatus.user.id).split(':')[0] : 'Unknown'; message = `WhatsApp connected (${phone})`; }
else if (isQR) message = 'WhatsApp waiting for QR scan';
else if (isLoggedOut) message = 'WhatsApp logged out - scan QR again';
else message = `WhatsApp ${(waStatus && waStatus.connection) || 'disconnected'}`;
results.whatsapp = { status: isOnline ? 'online' : 'offline', message };
} }
results.whatsapp = {
status: isOnline ? 'online' : 'offline',
message: message
};
} catch (err) { } catch (err) {
results.whatsapp = { results.whatsapp = { status: 'offline', message: `WhatsApp check error: ${err.message}` };
status: 'offline', }
message: `WhatsApp check error: ${err.message}`
}; // 4. Check Telegram Bot
try {
const { getSetting } = require('../config/settingsManager');
const enabled = !!getSetting('telegram_enabled', false);
const token = String(getSetting('telegram_bot_token', '') || '').trim();
if (!enabled || !token) {
results.telegram = { status: 'offline', message: !enabled ? 'Telegram dinonaktifkan' : 'Token belum diisi' };
} else {
const resp = await axios.get(`https://api.telegram.org/bot${token}/getMe`, { timeout: 6000, validateStatus: (s) => s < 500 });
if (resp.data && resp.data.ok) results.telegram = { status: 'online', message: 'Terhubung sebagai @' + ((resp.data.result && resp.data.result.username) || '-') };
else results.telegram = { status: 'offline', message: (resp.data && resp.data.description) || 'getMe gagal' };
}
} catch (err) {
results.telegram = { status: 'offline', message: `Telegram check error: ${err.message}` };
} }
return results; return results;
+9 -1
View File
@@ -568,13 +568,21 @@
</td> </td>
</tr> </tr>
<tr> <tr>
<td>WhatsApp Bot</td> <td>WhatsApp Bot<div class="sc-label" style="font-size:11px"><%= dependencies.whatsapp.message %></div></td>
<td class="text-right"> <td class="text-right">
<span class="badge <%= dependencies.whatsapp.status === 'online' ? 'bs' : 'bd' %>"> <span class="badge <%= dependencies.whatsapp.status === 'online' ? 'bs' : 'bd' %>">
<%= dependencies.whatsapp.status.toUpperCase() %> <%= dependencies.whatsapp.status.toUpperCase() %>
</span> </span>
</td> </td>
</tr> </tr>
<tr>
<td>Telegram Bot<div class="sc-label" style="font-size:11px"><%= dependencies.telegram ? dependencies.telegram.message : '' %></div></td>
<td class="text-right">
<span class="badge <%= (dependencies.telegram && dependencies.telegram.status === 'online') ? 'bs' : 'bd' %>">
<%= dependencies.telegram ? dependencies.telegram.status.toUpperCase() : 'UNKNOWN' %>
</span>
</td>
</tr>
</table> </table>
<p class="sc-label mt16 mb8">Router MikroTik</p> <p class="sc-label mt16 mb8">Router MikroTik</p>