about summary refs log tree commit diff
path: root/app/lib
diff options
context:
space:
mode:
authorTakeshi Umeda <noel.yoshiba@gmail.com>2021-05-06 06:39:02 +0900
committerGitHub <noreply@github.com>2021-05-05 23:39:02 +0200
commit7cb34b32f8bc925b56c79dbcf053671f93f2eb42 (patch)
treeb05d123350c4af203a6009418b1bfc7056820b27 /app/lib
parentd9ae3db8d5543cf0b7fa44186c191c9bb2472d23 (diff)
Add management of delivery availability in Federation settings (#15771)
* Add management of delivery availavility in Federation settings

* fix translate

* Remove useless object creation

* Fix DeepSource issue

* Add shortcut for all

* Fix DeepSource(skipcq)

* Change 'remove' to 'clear'

* Fix style

* Change class method name (exhausted_deliveries_key_by)
Diffstat (limited to 'app/lib')
-rw-r--r--app/lib/delivery_failure_tracker.rb26
1 files changed, 26 insertions, 0 deletions
diff --git a/app/lib/delivery_failure_tracker.rb b/app/lib/delivery_failure_tracker.rb
index 2cd6ef7ad..8907ade4c 100644
--- a/app/lib/delivery_failure_tracker.rb
+++ b/app/lib/delivery_failure_tracker.rb
@@ -17,6 +17,10 @@ class DeliveryFailureTracker
     UnavailableDomain.find_by(domain: @host)&.destroy
   end
 
+  def clear_failures!
+    Redis.current.del(exhausted_deliveries_key)
+  end
+
   def days
     Redis.current.scard(exhausted_deliveries_key) || 0
   end
@@ -25,6 +29,10 @@ class DeliveryFailureTracker
     !UnavailableDomain.where(domain: @host).exists?
   end
 
+  def exhausted_deliveries_days
+    Redis.current.smembers(exhausted_deliveries_key).sort.map { |date| Date.new(date.slice(0, 4).to_i, date.slice(4, 2).to_i, date.slice(6, 2).to_i) }
+  end
+
   alias reset! track_success!
 
   class << self
@@ -44,6 +52,24 @@ class DeliveryFailureTracker
     def reset!(url)
       new(url).reset!
     end
+
+    def warning_domains
+      domains = Redis.current.keys(exhausted_deliveries_key_by('*')).map do |key|
+        key.delete_prefix(exhausted_deliveries_key_by(''))
+      end
+
+      domains - UnavailableDomain.all.pluck(:domain)
+    end
+
+    def warning_domains_map
+      warning_domains.index_with { |domain| Redis.current.scard(exhausted_deliveries_key_by(domain)) }
+    end
+
+    private
+
+    def exhausted_deliveries_key_by(host)
+      "exhausted_deliveries:#{host}"
+    end
   end
 
   private