diff options
author | Starfall <root@starfall.blue> | 2020-05-10 02:59:07 -0500 |
---|---|---|
committer | Starfall <root@starfall.blue> | 2020-05-10 02:59:07 -0500 |
commit | 77fa1183cc113e3d3d20140e3545443cf6c7f170 (patch) | |
tree | 2ce4e4dd5235999d163350779f18cf74fe1ff0d1 /app/lib | |
parent | b107e4f771f036b214563764fcd95786f8016ee7 (diff) | |
parent | c6ff4c634caf718adf7280e04909c091d15add1d (diff) |
Merge branch 'glitch'
Diffstat (limited to 'app/lib')
-rw-r--r-- | app/lib/delivery_failure_tracker.rb | 34 | ||||
-rw-r--r-- | app/lib/tag_manager.rb | 2 |
2 files changed, 22 insertions, 14 deletions
diff --git a/app/lib/delivery_failure_tracker.rb b/app/lib/delivery_failure_tracker.rb index 8d3be35de..25fa694d2 100644 --- a/app/lib/delivery_failure_tracker.rb +++ b/app/lib/delivery_failure_tracker.rb @@ -3,47 +3,53 @@ class DeliveryFailureTracker FAILURE_DAYS_THRESHOLD = 7 - def initialize(inbox_url) - @inbox_url = inbox_url + def initialize(url_or_host) + @host = url_or_host.start_with?('https://') || url_or_host.start_with?('http://') ? Addressable::URI.parse(url_or_host).normalized_host : url_or_host end def track_failure! Redis.current.sadd(exhausted_deliveries_key, today) - Redis.current.sadd('unavailable_inboxes', @inbox_url) if reached_failure_threshold? + UnavailableDomain.create(domain: @host) if reached_failure_threshold? end def track_success! Redis.current.del(exhausted_deliveries_key) - Redis.current.srem('unavailable_inboxes', @inbox_url) + UnavailableDomain.find_by(domain: @host)&.destroy end def days Redis.current.scard(exhausted_deliveries_key) || 0 end + def available? + !UnavailableDomain.where(domain: @host).exists? + end + + alias reset! track_success! + class << self - def filter(arr) - arr.reject(&method(:unavailable?)) - end + def without_unavailable(urls) + unavailable_domains_map = Rails.cache.fetch('unavailable_domains') { UnavailableDomain.pluck(:domain).each_with_object({}) { |domain, hash| hash[domain] = true } } - def unavailable?(url) - Redis.current.sismember('unavailable_inboxes', url) + urls.reject do |url| + host = Addressable::URI.parse(url).normalized_host + unavailable_domains_map[host] + end end def available?(url) - !unavailable?(url) + new(url).available? end - def track_inverse_success!(from_account) - new(from_account.inbox_url).track_success! if from_account.inbox_url.present? - new(from_account.shared_inbox_url).track_success! if from_account.shared_inbox_url.present? + def reset!(url) + new(url).reset! end end private def exhausted_deliveries_key - "exhausted_deliveries:#{@inbox_url}" + "exhausted_deliveries:#{@host}" end def today diff --git a/app/lib/tag_manager.rb b/app/lib/tag_manager.rb index c88cf4994..d06bea059 100644 --- a/app/lib/tag_manager.rb +++ b/app/lib/tag_manager.rb @@ -35,5 +35,7 @@ class TagManager domain = uri.host + (uri.port ? ":#{uri.port}" : '') TagManager.instance.web_domain?(domain) + rescue Addressable::URI::InvalidURIError + false end end |