52 lines
1.9 KiB
Ruby
52 lines
1.9 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
class Chat::Statistics
|
|
def self.about_messages
|
|
{
|
|
:last_day => ChatMessage.where("created_at > ?", 1.days.ago).count,
|
|
"7_days" => ChatMessage.where("created_at > ?", 7.days.ago).count,
|
|
"30_days" => ChatMessage.where("created_at > ?", 30.days.ago).count,
|
|
:previous_30_days =>
|
|
ChatMessage.where("created_at BETWEEN ? AND ?", 60.days.ago, 30.days.ago).count,
|
|
:count => ChatMessage.count,
|
|
}
|
|
end
|
|
|
|
def self.about_channels
|
|
{
|
|
:last_day => ChatChannel.where(status: :open).where("created_at > ?", 1.days.ago).count,
|
|
"7_days" => ChatChannel.where(status: :open).where("created_at > ?", 7.days.ago).count,
|
|
"30_days" => ChatChannel.where(status: :open).where("created_at > ?", 30.days.ago).count,
|
|
:previous_30_days =>
|
|
ChatChannel
|
|
.where(status: :open)
|
|
.where("created_at BETWEEN ? AND ?", 60.days.ago, 30.days.ago)
|
|
.count,
|
|
:count => ChatChannel.where(status: :open).count,
|
|
}
|
|
end
|
|
|
|
def self.about_users
|
|
{
|
|
:last_day => ChatMessage.where("created_at > ?", 1.days.ago).distinct.count(:user_id),
|
|
"7_days" => ChatMessage.where("created_at > ?", 7.days.ago).distinct.count(:user_id),
|
|
"30_days" => ChatMessage.where("created_at > ?", 30.days.ago).distinct.count(:user_id),
|
|
:previous_30_days =>
|
|
ChatMessage
|
|
.where("created_at BETWEEN ? AND ?", 60.days.ago, 30.days.ago)
|
|
.distinct
|
|
.count(:user_id),
|
|
:count => ChatMessage.distinct.count(:user_id),
|
|
}
|
|
end
|
|
|
|
def self.monthly
|
|
start_of_month = Time.zone.now.beginning_of_month
|
|
{
|
|
messages: ChatMessage.where("created_at > ?", start_of_month).count,
|
|
channels: ChatChannel.where(status: :open).where("created_at > ?", start_of_month).count,
|
|
users: ChatMessage.where("created_at > ?", start_of_month).distinct.count(:user_id),
|
|
}
|
|
end
|
|
end
|