Skip to content

Commit 3d3c356

Browse files
committed
Align watchdog heartbeat logging with message timeout
1 parent 5ee9d6d commit 3d3c356

2 files changed

Lines changed: 12 additions & 7 deletions

File tree

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
0a75b57f5dbb0bb1488eacb47111ee22ff42dd3747bfe07bb69c9445d5e55c3e config-baseline.json
2-
ff15bb8b4231fc80174249ae89bcb61439d7adda5ee6be95e4d304680253a59f config-baseline.core.json
1+
00e346178fc40bbfe864266dc694fdc080658c15aac6e3b5887d76925d1a8b2e config-baseline.json
2+
60a021201aff8acf89c5d1d7496edc481ae88532e83303131bfbb1a2fbe1ff05 config-baseline.core.json
33
7f42b22b46c487d64aaac46001ba9d9096cf7bf0b1c263a54d39946303ff5018 config-baseline.channel.json
4-
483d4f3c1d516719870ad6f2aba6779b9950f85471ee77b9994a077a7574a892 config-baseline.plugin.json
4+
3f6fccab66a9abe7e1dd412fb01b13b944ed24edbe09df55ada3323acc7f76fe config-baseline.plugin.json

extensions/whatsapp/src/auto-reply/monitor.ts

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -123,6 +123,8 @@ export async function monitorWebChannel(
123123
const maxMediaBytes = resolveWhatsAppMediaMaxBytes(account);
124124
const heartbeatSeconds = resolveHeartbeatSeconds(cfg, tuning.heartbeatSeconds);
125125
const reconnectPolicy = resolveReconnectPolicy(cfg, tuning.reconnect);
126+
const messageTimeoutMs = resolveMessageTimeoutMs(cfg, tuning.messageTimeoutMs);
127+
const messageTimeoutMinutes = Math.floor(messageTimeoutMs / 60000);
126128
const baseMentionConfig = buildMentionConfig(cfg);
127129
const groupHistoryLimit =
128130
cfg.channels?.whatsapp?.accounts?.[tuning.accountId ?? ""]?.historyLimit ??
@@ -192,7 +194,7 @@ export async function monitorWebChannel(
192194

193195
// Watchdog to detect stuck message processing (e.g., event emitter died).
194196
// Tuning overrides are test-oriented; production defaults remain unchanged.
195-
const MESSAGE_TIMEOUT_MS = resolveMessageTimeoutMs(cfg, tuning.messageTimeoutMs);
197+
const MESSAGE_TIMEOUT_MS = messageTimeoutMs;
196198
const WATCHDOG_CHECK_MS = tuning.watchdogCheckMs ?? 60 * 1000; // 1m default
197199

198200
const onMessage = createWebOnMessageHandler({
@@ -329,13 +331,16 @@ export async function monitorWebChannel(
329331
lastInboundAt: active.lastInboundAt,
330332
authAgeMs,
331333
uptimeMs: Date.now() - active.startedAt,
332-
...(minutesSinceLastMessage !== null && minutesSinceLastMessage > 30
334+
...(minutesSinceLastMessage !== null && minutesSinceLastMessage > messageTimeoutMinutes
333335
? { minutesSinceLastMessage }
334336
: {}),
335337
};
336338

337-
if (minutesSinceLastMessage && minutesSinceLastMessage > 30) {
338-
heartbeatLogger.warn(logData, "⚠️ web gateway heartbeat - no messages in 30+ minutes");
339+
if (minutesSinceLastMessage && minutesSinceLastMessage > messageTimeoutMinutes) {
340+
heartbeatLogger.warn(
341+
logData,
342+
`⚠️ web gateway heartbeat - no messages in ${messageTimeoutMinutes}+ minutes`,
343+
);
339344
} else {
340345
heartbeatLogger.info(logData, "web gateway heartbeat");
341346
}

0 commit comments

Comments
 (0)