From 55e150352204bc790345cf81ef02bfcb1d7e0594 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Tue, 18 Apr 2017 15:09:07 -0400 Subject: Instances list in admin (#2095) * Add admin/instances index action * Add link to instances admin page * View lists instances * Instances, grouped by domain, ordered by count * Use Account.remote scope * Extract method: Account.by_domain_accounts --- app/controllers/admin/instances_controller.rb | 15 +++++++++++++++ app/models/account.rb | 1 + app/views/admin/instances/index.html.haml | 15 +++++++++++++++ 3 files changed, 31 insertions(+) create mode 100644 app/controllers/admin/instances_controller.rb create mode 100644 app/views/admin/instances/index.html.haml (limited to 'app') diff --git a/app/controllers/admin/instances_controller.rb b/app/controllers/admin/instances_controller.rb new file mode 100644 index 000000000..b8f170ec2 --- /dev/null +++ b/app/controllers/admin/instances_controller.rb @@ -0,0 +1,15 @@ +# frozen_string_literal: true + +module Admin + class InstancesController < BaseController + def index + @instances = ordered_instances.page(params[:page]) + end + + private + + def ordered_instances + Account.remote.by_domain_accounts + end + end +end diff --git a/app/models/account.rb b/app/models/account.rb index 2a10f8345..f8a6dd703 100644 --- a/app/models/account.rb +++ b/app/models/account.rb @@ -68,6 +68,7 @@ class Account < ApplicationRecord scope :suspended, -> { where(suspended: true) } scope :recent, -> { reorder(id: :desc) } scope :alphabetic, -> { order(domain: :asc, username: :asc) } + scope :by_domain_accounts, -> { group(:domain).select(:domain, 'COUNT(*) AS accounts_count').order('accounts_count desc') } def follow!(other_account) active_relationships.where(target_account: other_account).first_or_create!(target_account: other_account) diff --git a/app/views/admin/instances/index.html.haml b/app/views/admin/instances/index.html.haml new file mode 100644 index 000000000..b5ad40ac6 --- /dev/null +++ b/app/views/admin/instances/index.html.haml @@ -0,0 +1,15 @@ +- content_for :page_title do + = t('admin.instances.title') + +%table.table + %thead + %tr + %th= t('admin.instances.domain_name') + %th= t('admin.instances.account_count') + %tbody + - @instances.each do |instance| + %tr + %td= instance.domain + %td= instance.accounts_count + += paginate @instances -- cgit