本参考指南介绍了
/about页面上的统计数据是如何计算的,以及在哪里可以找到每项统计对应的 Ruby 代码。
所需用户级别:所有用户
关于页面统计
所有 Discourse 站点都内置了一个 /about 页面(例如,这是 Meta 的关于页面),其中包含该站点的管理员和版主列表,以及关于站点本身的一些统计数据。
这些统计数据包含所有用户,包括管理员和版主账户。某些统计数据还将包含 匿名账户(如果站点已启用该功能)。
如果启用了“共享匿名统计信息”站点设置(默认情况下该设置已启用),/about 页面上的“站点统计信息”将作为 JSON 文件公开,可通过 /about.json 获取。
如果站点是公开的,/about 页面及其统计数据也将公开可用。
核心统计数据的 Ruby 代码位于:discourse/lib/statistics.rb。协调核心统计数据和插件统计数据的
Stat模型位于 discourse/app/models/stat.rb。
以下是每项统计数据的计算方式说明。
主题
在指定时间范围内创建的主题数量。此统计数据不包含未列出的主题或个人消息。
topics = Topic.listable_topics
{
last_day: topics.where("created_at > ?", 1.day.ago).count,
"7_days": topics.where("created_at > ?", 7.days.ago).count,
"30_days": topics.where("created_at > ?", 30.days.ago).count,
count: topics.count,
}
帖子
在指定时间范围内创建的帖子数量。此处包含个人消息,并将其计为普通帖子。
{
last_day: Post.where("created_at > ?", 1.day.ago).count,
"7_days": Post.where("created_at > ?", 7.days.ago).count,
"30_days": Post.where("created_at > ?", 30.days.ago).count,
count: Post.count,
}
注册
在指定时间范围内注册新账户的有效用户数量。“有效用户”是指已激活、未被暂停且未被禁言的 真实 用户。如果启用了“必须批准用户”设置,则仅统计已批准的用户。
def self.valid_users
users = User.real.activated.not_suspended.not_silenced
users = users.approved if SiteSetting.must_approve_users
users
end
{
last_day: valid_users.where("created_at > ?", 1.day.ago).count,
"7_days": valid_users.where("created_at > ?", 7.days.ago).count,
"30_days": valid_users.where("created_at > ?", 30.days.ago).count,
count: valid_users.count,
}
![]()
真实用户的定义见此处:discourse/app/models/user.rb —— 它排除了系统/机器人用户和匿名用户影子账户。
活跃用户
在指定时间范围内访问过站点的有效用户数量。使用与“注册”相同的 valid_users 过滤器(排除不活跃、被暂停和被禁言的用户)。包含匿名模式用户,但不包含没有账户的用户。
{
last_day: valid_users.where("last_seen_at > ?", 1.day.ago).count,
"7_days": valid_users.where("last_seen_at > ?", 7.days.ago).count,
"30_days": valid_users.where("last_seen_at > ?", 30.days.ago).count,
}
参与用户
在指定时间范围内执行过操作(创建主题、帖子、点赞等)的有效用户数量。如果启用了聊天功能,发送过聊天消息或添加过聊天反应的用户也会被计入。
{
last_day: participating_users_count(1.day.ago),
"7_days": participating_users_count(7.days.ago),
"30_days": participating_users_count(30.days.ago),
}
完整实现在 discourse/lib/statistics.rb 中。
点赞
在指定时间范围内所有主题和帖子收到的点赞总数。
likes = UserAction.where(action_type: UserAction::LIKE)
{
last_day: likes.where("created_at > ?", 1.day.ago).count,
"7_days": likes.where("created_at > ?", 7.days.ago).count,
"30_days": likes.where("created_at > ?", 30.days.ago).count,
count: likes.count,
}
访问者和欧盟访问者
当启用“显示欧盟访问者统计信息”站点设置时,关于页面还将显示估算的访问者数量(总数和基于欧盟的数量)。这些数字是通过结合已登录用户的访问数据与基于页面浏览量比例估算的匿名访问者数量计算得出的。
完整计算逻辑请参阅 discourse/lib/statistics.rb 中的
visitors和eu_visitors方法。
聊天消息
所有聊天频道中发送的聊天消息数量。当启用聊天功能时,还会注册以下统计数据:聊天用户(发送过消息的不同用户)和聊天频道(开放的频道)。
这些统计数据由聊天插件通过 plugins/chat/plugin.rb 中的 register_stat 作为插件统计数据注册。底层查询位于 plugins/chat/lib/chat/statistics.rb。
