diff options
Diffstat (limited to 'app/models/hooks/web_hook.rb')
-rw-r--r-- | app/models/hooks/web_hook.rb | 49 |
1 files changed, 1 insertions, 48 deletions
diff --git a/app/models/hooks/web_hook.rb b/app/models/hooks/web_hook.rb index 819152a38c8..ceee86c1671 100644 --- a/app/models/hooks/web_hook.rb +++ b/app/models/hooks/web_hook.rb @@ -2,6 +2,7 @@ class WebHook < ApplicationRecord include Sortable + include WebHooks::AutoDisabling InterpolationError = Class.new(StandardError) @@ -78,46 +79,6 @@ class WebHook < ApplicationRecord 'user/project/integrations/webhooks' end - def next_backoff - return MAX_BACKOFF if backoff_count >= 8 # optimization to prevent expensive exponentiation and possible overflows - - (INITIAL_BACKOFF * (BACKOFF_GROWTH_FACTOR**backoff_count)) - .clamp(INITIAL_BACKOFF, MAX_BACKOFF) - .seconds - end - - def disable! - update_attribute(:recent_failures, EXCEEDED_FAILURE_THRESHOLD) - end - - def enable! - return if recent_failures == 0 && disabled_until.nil? && backoff_count == 0 - - assign_attributes(recent_failures: 0, disabled_until: nil, backoff_count: 0) - save(validate: false) - end - - # Don't actually back-off until FAILURE_THRESHOLD failures have been seen - # we mark the grace-period using the recent_failures counter - def backoff! - attrs = { recent_failures: next_failure_count } - - if recent_failures >= FAILURE_THRESHOLD - attrs[:backoff_count] = next_backoff_count - attrs[:disabled_until] = next_backoff.from_now - end - - assign_attributes(attrs) - save(validate: false) if changed? - end - - def failed! - return unless recent_failures < MAX_FAILURES - - assign_attributes(disabled_until: nil, backoff_count: 0, recent_failures: next_failure_count) - save(validate: false) - end - # @return [Boolean] Whether or not the WebHook is currently throttled. def rate_limited? rate_limiter.rate_limited? @@ -179,14 +140,6 @@ class WebHook < ApplicationRecord self.url_variables = {} if url_changed? && !encrypted_url_variables_changed? end - def next_failure_count - recent_failures.succ.clamp(1, MAX_FAILURES) - end - - def next_backoff_count - backoff_count.succ.clamp(1, MAX_FAILURES) - end - def initialize_url_variables self.url_variables = {} if encrypted_url_variables.nil? end |