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:
@@ -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}`
|
||||
|
||||
@@ -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 })
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user