From b3917299cd0cdb2adaf34b8aa91279c02ab859a8 Mon Sep 17 00:00:00 2001 From: Claude Date: Thu, 22 Jan 2026 14:42:22 +0000 Subject: [PATCH] feat: add message retry and failure metrics tracking Added metrics tracking for: - message_retries_total: Incremented when message retry is attempted - message_failures_total: Incremented when max retries reached or encryption fails Note: messages_queued metric is not applicable as this implementation sends messages directly without an explicit queue system. --- src/Socket/messages-recv.ts | 6 +++++- src/Socket/messages-send.ts | 1 + 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/src/Socket/messages-recv.ts b/src/Socket/messages-recv.ts index 36deaf09..4be626e9 100644 --- a/src/Socket/messages-recv.ts +++ b/src/Socket/messages-recv.ts @@ -4,7 +4,7 @@ import { randomBytes } from 'crypto' import Long from 'long' import { proto } from '../../WAProto/index.js' import { DEFAULT_CACHE_TTLS, KEY_BUNDLE_TYPE, MIN_PREKEY_COUNT } from '../Defaults' -import { metrics, recordMessageReceived, recordHistorySyncMessages } from '../Utils/prometheus-metrics.js' +import { metrics, recordMessageReceived, recordHistorySyncMessages, recordMessageRetry, recordMessageFailure } from '../Utils/prometheus-metrics.js' import type { GroupParticipant, MessageReceiptType, @@ -409,11 +409,13 @@ export const makeMessagesRecvSocket = (config: SocketConfig) => { if (messageRetryManager.hasExceededMaxRetries(msgId)) { logger.debug({ msgId }, 'reached retry limit with new retry manager, clearing') messageRetryManager.markRetryFailed(msgId) + recordMessageFailure('retry', 'max_retries_reached') return } // Increment retry count using new system const retryCount = messageRetryManager.incrementRetryCount(msgId) + recordMessageRetry('retry') // Use the new retry count for the rest of the logic const key = `${msgId}:${msgKey?.participant}` @@ -425,11 +427,13 @@ export const makeMessagesRecvSocket = (config: SocketConfig) => { if (retryCount >= maxMsgRetryCount) { logger.debug({ retryCount, msgId }, 'reached retry limit, clearing') await msgRetryCache.del(key) + recordMessageFailure('retry', 'max_retries_reached') return } retryCount += 1 await msgRetryCache.set(key, retryCount) + recordMessageRetry('retry') } const key = `${msgId}:${msgKey?.participant}` diff --git a/src/Socket/messages-send.ts b/src/Socket/messages-send.ts index 8e24aedc..ae2be48d 100644 --- a/src/Socket/messages-send.ts +++ b/src/Socket/messages-send.ts @@ -596,6 +596,7 @@ export const makeMessagesSocket = (config: SocketConfig) => { const nodes = (await Promise.all(encryptionPromises)).filter(node => node !== null) as BinaryNode[] if (recipientJids.length > 0 && nodes.length === 0) { + recordMessageFailure('send', 'encryption_failed') throw new Boom('All encryptions failed', { statusCode: 500 }) }