chore(api): better track webhook delivery failures

This commit is contained in:
isra el
2024-12-28 10:36:04 +03:00
parent 3a2b714fdd
commit 9f3b257588
2 changed files with 15 additions and 3 deletions

View File

@@ -27,6 +27,8 @@ export class WebhookSubscription {
@Prop({ type: Number, default: 0 })
successfulDeliveryCount: number
@Prop({ type: Number, default: 0 })
deliveryFailureCount: number
@Prop({ type: Number, default: 0 })
deliveryAttemptCount: number
@@ -35,6 +37,9 @@ export class WebhookSubscription {
@Prop({ type: Date })
lastDeliverySuccessAt: Date
@Prop({ type: Date })
lastDeliveryFailureAt: Date
}
export const WebhookSubscriptionSchema =

View File

@@ -157,14 +157,15 @@ export class WebhookService {
webhookNotification: WebhookNotificationDocument,
) {
const now = new Date()
const webhookSubscriptionId = webhookNotification.webhookSubscription
const webhookSubscription = await this.webhookSubscriptionModel.findById(
webhookNotification.webhookSubscription,
webhookSubscriptionId,
)
if (!webhookSubscription) {
console.log(
`Webhook subscription not found for ${webhookNotification._id}`,
`Webhook subscription not found for ${webhookSubscriptionId}`,
)
return
}
@@ -213,6 +214,10 @@ export class WebhookService {
webhookNotification.deliveryAttemptCount,
)
await webhookNotification.save()
webhookSubscription.deliveryFailureCount += 1
webhookSubscription.lastDeliveryFailureAt = now
} finally {
webhookSubscription.deliveryAttemptCount += 1
await webhookSubscription.save()
@@ -244,7 +249,9 @@ export class WebhookService {
}
// Check for notifications that need to be delivered every 3 minutes
@Cron('0 */3 * * * *')
@Cron('0 */3 * * * *', {
disabled: process.env.NODE_ENV !== 'production'
})
async checkForNotificationsToDeliver() {
const now = new Date()
const notifications = await this.webhookNotificationModel