diff options
author | Eugen Rochko <eugen@zeonfederated.com> | 2020-12-14 09:06:34 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-12-14 09:06:34 +0100 |
commit | 216b85b053d091306e3311a21f5b050f70a75130 (patch) | |
tree | 10a6598ad72500a7284e605336e22d36a69cdadd /app/models/instance_filter.rb | |
parent | a3b5675aa83f7fec4036888e0d94b626ad973f75 (diff) |
Fix performance on instances list in admin UI (#15282)
- Reduce duplicate queries - Remove n+1 queries - Add accounts count to detailed view - Add separate action log entry for updating existing domain blocks
Diffstat (limited to 'app/models/instance_filter.rb')
-rw-r--r-- | app/models/instance_filter.rb | 31 |
1 files changed, 20 insertions, 11 deletions
diff --git a/app/models/instance_filter.rb b/app/models/instance_filter.rb index 9c467bc27..0598d8fea 100644 --- a/app/models/instance_filter.rb +++ b/app/models/instance_filter.rb @@ -13,18 +13,27 @@ class InstanceFilter end def results - if params[:limited].present? - scope = DomainBlock - scope = scope.matches_domain(params[:by_domain]) if params[:by_domain].present? - scope.order(id: :desc) - elsif params[:allowed].present? - scope = DomainAllow - scope = scope.matches_domain(params[:by_domain]) if params[:by_domain].present? - scope.order(id: :desc) + scope = Instance.includes(:domain_block, :domain_allow).order(accounts_count: :desc) + + params.each do |key, value| + scope.merge!(scope_for(key, value.to_s.strip)) if value.present? + end + + scope + end + + private + + def scope_for(key, value) + case key.to_s + when 'limited' + Instance.joins(:domain_block).reorder(Arel.sql('domain_blocks.id desc')) + when 'allowed' + Instance.joins(:domain_allow).reorder(Arel.sql('domain_allows.id desc')) + when 'by_domain' + Instance.matches_domain(value) else - scope = Account.remote - scope = scope.matches_domain(params[:by_domain]) if params[:by_domain].present? - scope.by_domain_accounts + raise "Unknown filter: #{key}" end end end |