Add breakdown of usage by source to admin UI for hashtags (#11517)

Allows determining where the majority of posts in a hashtag come
from on a given day at a glance.
This commit is contained in:
Eugen Rochko
2019-08-07 20:20:39 +02:00
committed by GitHub
parent bced70469a
commit 3a6b6c63f2
3 changed files with 57 additions and 0 deletions

View File

@ -4,6 +4,8 @@ module Admin
class TagsController < BaseController
before_action :set_tags, only: :index
before_action :set_tag, except: :index
before_action :set_usage_by_domain, except: :index
before_action :set_counters, except: :index
def index
authorize :tag, :index?
@ -33,6 +35,21 @@ module Admin
@tag = Tag.find(params[:id])
end
def set_usage_by_domain
@usage_by_domain = @tag.statuses
.where(visibility: :public)
.where(Status.arel_table[:id].gteq(Mastodon::Snowflake.id_at(Time.now.utc.beginning_of_day)))
.joins(:account)
.group('accounts.domain')
.reorder('statuses_count desc')
.pluck('accounts.domain, count(*) AS statuses_count')
end
def set_counters
@accounts_today = @tag.history.first[:accounts]
@accounts_week = Redis.current.pfcount(*current_week_days.map { |day| "activity:tags:#{@tag.id}:#{day}:accounts" })
end
def filtered_tags
scope = Tag
scope = scope.discoverable if filter_params[:context] == 'directory'
@ -49,5 +66,13 @@ module Admin
def tag_params
params.require(:tag).permit(:name, :trendable, :usable, :listable)
end
def current_week_days
now = Time.now.utc.beginning_of_day.to_date
(Date.commercial(now.cwyear, now.cweek)..now).map do |date|
date.to_time.utc.beginning_of_day.to_i
end
end
end
end