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.
This commit is contained in:
Claude
2026-01-22 14:42:22 +00:00
parent de5988ba8f
commit b3917299cd
2 changed files with 6 additions and 1 deletions
+5 -1
View File
@@ -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}`
+1
View File
@@ -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 })
}