仪表盘新帖统计数据损坏

大家好,

自从大约一两周前的最近一次升级后,仪表盘上的新帖子统计信息出现了问题。它现在不再显示任何内容。这个问题只发生在我这里,还是一个普遍的bug?我在这里搜索后没有找到相关信息。

此致

抱歉,您能澄清一下吗?您是说这些图表无法正常工作吗?

您上次更新您的实例是什么时候?现在可以更新一下吗?

抱歉,我之前没有说清楚,这是截图:

我今晚更新到了 05685d430f

如果我没记错的话,大概有一两周了,我目前大约每五天升级一次。

是的,目前流量不大,但我们有新帖子。:wink: 我还点击并选择了今天的年份。那里也没有数据。

首先想到的是“数据不足”,但我会将其告知可以帮助调试的员工xp团队。

1 个赞

谢谢!这是另一张截图,您可以看到有新的主题。所以肯定也有新的帖子。至少和主题一样多(但这里肯定比这多 :wink:)。

如果您访问 https://YOURSITE.COM/admin/reports/posts?end_date=2025-02-17&start_date=2025-01-17 的完整报告页面,是否能显示任何数据,调整日期/过滤器后?在加载此页面或仪表板时,您是否在 https://YOURSITE.COM/logs 的日志中或 Chrome DevTools 的 Network 选项卡中看到任何错误?

1 个赞

不,那里也什么都没有。我也可以调整开始和结束日期,但没有变化。

没有,什么都没有。只有一些弃用通知,与统计数据无关(根据时间判断)。

确实有错误。当我加载页面时,有9个错误,随着时间的推移会更多。

这有帮助吗?我应该复制粘贴(文本)其中一个/所有这些错误吗?

2 个赞

确实,我也遇到了这种情况。我的社区也未能正确显示帖子计数。

不正确还是像这里一样什么都没有?

1 个赞

做了一些研究,似乎 domQueryService 错误来自 Bitwarden Chrome 扩展,它们不太可能引起问题。mini-profiler 错误可以忽略。

fingerprint-report 错误来自 https://github.com/discourse/discourse-fingerprint,虽然这是一个我们需要修复的问题,但它似乎并没有阻止 Posts report 在我本地加载。

body_tag_1.js 文件是其他人有时会在 Discourse 上遇到问题的 Lost ability to scroll through HA community site - community-feedback - Home Assistant Community 。您是否安装了广告拦截器?如果是,请尝试禁用它们。如果不是或无效,请尝试启用安全模式 Using Safe Mode to troubleshoot issues with themes and plugins 并查看是否可以加载页面,如果可以,则表明是插件或主题问题。

最后,尝试加载报告的 JSON 并查看您是否在此处获得任何结果:

https://YOURSITE.COM/admin/reports/bulk.json?reports[posts][facets][]=prev_period&reports[posts][start_date]=2025-01-18&reports[posts][end_date]=2025-02-18&reports[posts][limit]=50

4 个赞

我已经禁用了 Opera 中自带的广告拦截器,我正在电脑上使用该浏览器。我还使用了 Pi-hole 和多个阻止列表。

但是:这些问题也出现在我的 iPad 的 Discourse 应用以及其他网络(包括移动数据)上。所以不是广告拦截器之类的问题。

我可以,但今天不行了。 :wink:

当然:

{"reports":[{"type":"posts","title":"Beiträge","xaxis":"Tag","yaxis":"Anzahl neuer Beiträge","description":"Neue Beiträge, die in dieser Zeit erstellt wurden","description_link":null,"data":[],"start_date":"2025-01-18T00:00:00Z","end_date":"2025-02-18T23:59:59Z","prev_data":null,"prev_start_date":"2024-12-17T00:00:00Z","prev_end_date":"2025-01-18T00:00:00Z","prev30Days":null,"dates_filtering":true,"report_key":"reports:posts:20250118:20250218:[:prev_period]:50:4","primary_color":"rgba(113,184,254,1)","secondary_color":"rgba(113,184,254,0.1)","available_filters":[{"id":"category","type":"category","default":null}],"labels":[{"type":"date","property":"x","title":"Tag"},{"type":"number","property":"y","title":"Anzahl"}],"average":false,"percent":false,"higher_is_better":true,"modes":["chart","table"],"prev_period":0,"limit":50}]}

既然这什么都没显示,如果我没理解错的话,那么安全模式还有意义吗?

1 个赞

好的,谢谢,这很有帮助,它表明数据本身丢失了,而不是前端有什么错误 :thinking:

此报告背后的 SQL 查询非常简单,如果您可以访问 Data Explorer 或直接访问数据库,您可以尝试运行并调整此查询,看看它是否能为您提供任何数据:

SELECT 
  COUNT(*) AS "count_all", 
  date(posts.created_at) AS "date_posts_created_at" 
FROM 
  "posts" 
  INNER JOIN "topics" ON "topics"."deleted_at" IS NULL 
  AND "topics"."id" = "posts"."topic_id" 
WHERE 
  "posts"."deleted_at" IS NULL 
  AND (
    topics.archetype <> 'private_message'
  ) 
  AND (
    posts.created_at >= '2025-02-01' 
    AND posts.created_at <= '2025-02-28'
  ) 
  AND "posts"."post_type" = 1 
GROUP BY 
  date(posts.created_at) 
ORDER BY 
  date(posts.created_at)

这是报告代码本身:

恐怕在无法访问您的站点进行数据库挖掘的情况下,进一步调试会有些棘手。

1 个赞

Data Explorer 中的查询返回了数据:

1 个赞

抱歉 Roi,这件事被忽略了。我猜报告代码本身一定有问题?discourse/app/models/concerns/reports/posts.rb at 8596aa34c46071eb42ffbb9e19ad733d1765578e · discourse/discourse · GitHub

您是否可以访问您网站的 rails 控制台?如果可以,请尝试以下操作,看看是否能获得任何数据:

Report.find("posts", start_date: 4.weeks.ago, end_date: Time.zone.now).data

这将输出它运行的 SQL 查询,因此那里可能会有更多线索。

1 个赞

没关系!在管理员仪表板上看起来不完美,但它不像其他错误那样关键。

是的。

嗯,我这样做对吗?

root@prometheus-discourse-sidemount:/var/www/discourse# rails c
插件名称是 'discourse-docs',但插件目录名为 'discourse-knowledge-explorer'
插件名称是 'discourse-user-notes',但插件目录名为 'discourse-staff-notes'
[1] pry(main)> Report.find("posts", start_date: 4.weeks.ago, end_date: Time.zone.now).data
=> []
[2] pry(main)>

答案是空的。这可以解释管理员仪表板上的空框。但您写道答案中也应该有一个 SQL 语句?

1 个赞

啊抱歉,也许我只看到它是因为我在本地运行它。试试这个:

MethodProfiler.output_sql_to_stderr!
Report.find("posts", start_date: 4.weeks.ago, end_date: Time.zone.now).data

现在你会看到很多查询的噪音,但最后的几个查询将是报告中的查询:

1 个赞

好的,噪音更大了。 :wink: 这是您要找的,还是您需要上面更多的内容?

debugsql (sql): SELECT COUNT(*) AS "count_all", date(posts.created_at) AS "date_posts_created_at" FROM "posts" INNER JOIN "topics" ON "topics"."deleted_at" IS NULL AND "topics"."id" = "posts"."topic_id" WHERE "posts"."deleted_at" IS NULL AND (topics.archetype <> 'private_message') AND NOT ((topics.category_id IN (NULL))) AND (posts.created_at >= '2025-02-03 06:00:45.160432' AND posts.created_at <= '2025-03-03 06:00:45.160586') AND "posts"."post_type" = 1 GROUP BY date(posts.created_at) ORDER BY date(posts.created_at)
debugsql (sec): 0.001
debugsql (sql): SELECT "category_custom_fields"."category_id" FROM "category_custom_fields" WHERE "category_custom_fields"."name" = 'private_topics_enabled'
debugsql (sec): 0.0
debugsql (sql): SELECT COUNT(*) FROM "posts" INNER JOIN "topics" ON "topics"."deleted_at" IS NULL AND "topics"."id" = "posts"."topic_id" WHERE "posts"."deleted_at" IS NULL AND (topics.archetype <> 'private_message') AND NOT ((topics.category_id IN (NULL))) AND "posts"."post_type" = 1
debugsql (sec): 0.0
debugsql (sql): SELECT COUNT(*) FROM "posts" INNER JOIN "topics" ON "topics"."deleted_at" IS NULL AND "topics"."id" = "posts"."topic_id" WHERE "posts"."deleted_at" IS NULL AND (topics.archetype <> 'private_message') AND NOT ((topics.category_id IN (NULL))) AND "posts"."post_type" = 1 AND (posts.created_at >= '2025-01-04 06:00:45.160432' and posts.created_at < '2025-02-03 06:00:45.160432')
debugsql (sec): 0.0
debugsql (sql): COMMIT
debugsql (sec): 0.0
=> []
1 个赞

是的,这正是我需要的 :slight_smile: 让我印象深刻的部分是 AND NOT ((topics.category_id IN (NULL)));我没有在上面截图的查询中看到它。这将排除所有没有分类的主题,根据您的论坛设置,这可能会有很多?

我没有在代码中看到它来自哪里。下一步,我将尝试在 Data Explorer 中执行此操作:

SELECT 
  COUNT(*) AS "count_all", 
  date(posts.created_at) AS "date_posts_created_at" 
FROM 
  "posts" 
  INNER JOIN "topics" ON "topics"."deleted_at" IS NULL 
  AND "topics"."id" = "posts"."topic_id" 
WHERE 
  "posts"."deleted_at" IS NULL 
  AND (
    topics.archetype <> 'private_message'
  ) 
  AND (
    posts.created_at >= '2025-02-03 06:00:45.160432' 
    AND posts.created_at <= '2025-03-03 06:00:45.160586'
  ) 
  AND "posts"."post_type" = 1 
GROUP BY 
  date(posts.created_at) 
ORDER BY 
  date(posts.created_at)

(我在这里删除了 AND NOT 子句),看看您是否能得到任何结果。如果我在本地运行此代码,我会得到:

 count_all | date_posts_created_at
-----------+-----------------------
         1 | 2025-02-03
         8 | 2025-02-04
         7 | 2025-02-05
         1 | 2025-02-06
         7 | 2025-02-12
         4 | 2025-02-26

而如果我保留您的查询显示的 category_id 子句,我会得到没有数据。

1 个赞

作品:

:sign_of_the_horns:

我们所有的帖子都有分类。

这个额外的条件是从哪里来的?:thinking:

1 个赞

是的,我真的不确定 :frowning: 可能性很小,但会不会是某个插件添加/修改了什么?:thinking: 你用了什么插件?上面第一个查询(带有 count_all 的那个)来自这里:

如果在控制台中调用这个仍然会添加 category_id IN (NULL) 子句,那真的很奇怪:

Post.public_posts_count_per_day(4.weeks.ago, Time.zone.now)
1 个赞