action_webhook 1.0.0 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/action_webhook/base.rb +23 -8
- data/lib/action_webhook/version.rb +1 -1
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2063e93683fe64ce519f241843f17e33da9f29d671b965af97c0f97540a98ecc
|
4
|
+
data.tar.gz: 1f591bf9cfb727d9ab6e750338b708e4e24df2e782ea3f1a5096277f4311474d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 14ed8242d705d62f573fd884e83bc70479ed4397c4bb3fffd75fd178bdc929fe5d981c395abb99ab7d647c7f1aec3aeaf1685784b3d521e3e62ed2e073ee8c1c
|
7
|
+
data.tar.gz: 45c7362968926262d79f6dedb16f2391d30a2b64980e3a5d0116558360ee63fe416b54f33a17012b82e5b50d8a465a58d5f91e1b6fa1f05e185959a2ce547230
|
data/lib/action_webhook/base.rb
CHANGED
@@ -81,12 +81,21 @@ module ActionWebhook
|
|
81
81
|
@attempts += 1
|
82
82
|
response = process_webhook
|
83
83
|
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
84
|
+
# Separate successful and failed responses
|
85
|
+
successful_responses = response.select { |r| r[:success] }
|
86
|
+
failed_responses = response.reject { |r| r[:success] }
|
87
|
+
|
88
|
+
# Invoke success callback for successful deliveries
|
89
|
+
invoke_callback(self.class.after_deliver_callback, successful_responses) if successful_responses.any?
|
90
|
+
|
91
|
+
# Handle failed responses
|
92
|
+
if failed_responses.any? && @attempts < self.class.max_retries
|
93
|
+
# Extract failed webhook details for retry
|
94
|
+
failed_webhook_details = failed_responses.map { |r| @webhook_details.find { |detail| detail[:url] == r[:url] } }.compact
|
95
|
+
retry_with_backoff(failed_webhook_details)
|
96
|
+
elsif failed_responses.any?
|
97
|
+
# All retries exhausted for failed URLs
|
98
|
+
invoke_callback(self.class.after_retries_exhausted_callback, failed_responses)
|
90
99
|
end
|
91
100
|
|
92
101
|
response
|
@@ -318,13 +327,19 @@ module ActionWebhook
|
|
318
327
|
end
|
319
328
|
end
|
320
329
|
|
321
|
-
def retry_with_backoff
|
330
|
+
def retry_with_backoff(failed_webhook_details = nil)
|
331
|
+
# Use failed webhook details if provided, otherwise retry all
|
332
|
+
retry_details = failed_webhook_details || @webhook_details
|
333
|
+
|
322
334
|
delay = calculate_backoff_delay
|
323
|
-
logger.info("Scheduling webhook retry #{@attempts + 1}/#{self.class.max_retries} in #{delay} seconds")
|
335
|
+
logger.info("Scheduling webhook retry #{@attempts + 1}/#{self.class.max_retries} for #{retry_details.size} URLs in #{delay} seconds")
|
324
336
|
|
325
337
|
job_class = resolve_job_class
|
326
338
|
serialized_webhook = serialize
|
327
339
|
|
340
|
+
# Update the webhook details to only include failed URLs
|
341
|
+
serialized_webhook["webhook_details"] = retry_details
|
342
|
+
|
328
343
|
enqueue_retry_job(job_class, serialized_webhook, delay)
|
329
344
|
end
|
330
345
|
|