docbrown/app/services/admin/charts_data.rb
Monica Mateiu 99401449d4
Display analytics up to yesterday instead of today (#17064)
Stop displaying admin analytics for current day, as the data is incomplete. Instead, show analytics for any given period up to yesterday
2022-04-04 15:17:32 -04:00

34 lines
1.5 KiB
Ruby

module Admin
class ChartsData
def initialize(length = 7)
@length = length
end
def call
period = (@length + 1).days.ago..1.day.ago
previous_period = (@length * 2).days.ago..@length.days.ago
grouped_posts = Article.where(published_at: period).group("DATE(published_at)").size
grouped_comments = Comment.where(created_at: period).group("DATE(created_at)").size
grouped_reactions = Reaction.where(created_at: period).group("DATE(created_at)").size
grouped_users = User.where(registered_at: period).group("DATE(registered_at)").size
days_range = @length.downto(1)
posts_values = days_range.map { |n| grouped_posts[n.days.ago.to_date] || 0 }
comments_values = days_range.map { |n| grouped_comments[n.days.ago.to_date] || 0 }
reactions_values = days_range.map { |n| grouped_reactions[n.days.ago.to_date] || 0 }
new_members_values = days_range.map { |n| grouped_users[n.days.ago.to_date] || 0 }
[
["Posts", posts_values.sum, Article.where(published_at: previous_period).size,
posts_values],
["Comments", comments_values.sum, Comment.where(created_at: previous_period).size,
comments_values],
["Reactions", reactions_values.sum, Reaction.where(created_at: previous_period).size,
reactions_values],
["New members", new_members_values.sum, User.where(registered_at: previous_period).size,
new_members_values],
]
end
end
end