mirror of
				https://github.com/lingble/chatwoot.git
				synced 2025-10-31 19:17:48 +00:00 
			
		
		
		
	chore: Handle WebPush rate limiting in push notification service (#12184)
Implemented a rescue block for WebPush::TooManyRequests that logs warnings during rate limiting events. This captures user email and account ID for better traceability. We will implement a proper throttling mechanism after identifying patterns across accounts.
This commit is contained in:
		| @@ -68,15 +68,24 @@ class Notification::PushNotificationService | ||||
|  | ||||
|     WebPush.payload_send(**browser_push_payload(subscription)) | ||||
|     Rails.logger.info("Browser push sent to #{user.email} with title #{push_message[:title]}") | ||||
|   rescue WebPush::ExpiredSubscription, WebPush::InvalidSubscription, WebPush::Unauthorized => e | ||||
|     Rails.logger.info "WebPush subscription expired: #{e.message}" | ||||
|     subscription.destroy! | ||||
|   rescue Errno::ECONNRESET, Net::OpenTimeout, Net::ReadTimeout => e | ||||
|     Rails.logger.error "WebPush operation error: #{e.message}" | ||||
|   rescue StandardError => e | ||||
|     ChatwootExceptionTracker.new(e, account: notification.account).capture_exception | ||||
|     handle_browser_push_error(e, subscription) | ||||
|   end | ||||
|  | ||||
|   def handle_browser_push_error(error, subscription) | ||||
|     case error | ||||
|     when WebPush::ExpiredSubscription, WebPush::InvalidSubscription, WebPush::Unauthorized | ||||
|       Rails.logger.info "WebPush subscription expired: #{error.message}" | ||||
|       subscription.destroy! | ||||
|     when WebPush::TooManyRequests | ||||
|       Rails.logger.warn "WebPush rate limited for #{user.email} on account #{notification.account.id}: #{error.message}" | ||||
|     when Errno::ECONNRESET, Net::OpenTimeout, Net::ReadTimeout | ||||
|       Rails.logger.error "WebPush operation error: #{error.message}" | ||||
|     else | ||||
|       ChatwootExceptionTracker.new(error, account: notification.account).capture_exception | ||||
|       true | ||||
|     end | ||||
|   end | ||||
|  | ||||
|   def send_fcm_push(subscription) | ||||
|     return unless firebase_credentials_present? | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Muhsin Keloth
					Muhsin Keloth