Статистика новых постов на панели управления не работает

Всем привет,

после одного из последних обновлений полторы-две недели назад статистика новых постов на панели управления перестала работать. Она больше ничего не показывает. Это проблема только у меня или это общий баг? Я ничего не нашел через поиск здесь.

С уважением

Извините, не могли бы вы уточнить: вы имеете в виду, что эти графики не работают?

Когда вы последний раз обновляли свой экземпляр? Можете ли вы обновить его сейчас?

Извините за неясность, вот скриншот:

Сегодня вечером я обновился до 05685d430f.

Если память мне не изменяет, это происходит уже около двух недель. На данный момент я обновляюсь каждые пять дней.

Да, трафика сейчас немного, но новые посты появляются. :wink: Я также нажал и выбрал год с сегодняшнего дня. Там тоже ничего нет.

Первое, что приходит в голову, — «недостаточно данных», но я сообщу об этом команде по опыту за работу со staff, чтобы они помогли отладить проблему.

1 лайк

Спасибо! Вот ещё один скриншот, где видно, что появились новые темы. Значит, должны быть и новые сообщения. По крайней мере, столько же, сколько и тем (но здесь их наверняка больше :wink:).

Если вы перейдете на полную страницу отчета по адресу https://YOURSITE.COM/admin/reports/posts?end_date=2025-02-17&start_date=2025-01-17, сможете ли вы получить какие-либо данные, изменив даты или фильтры? Видите ли вы какие-либо ошибки в логах по адресу https://YOURSITE.COM/logs или во вкладке Network в инструментах разработчика Chrome при загрузке этой страницы или панели управления?

1 лайк

Нет, там тоже всё пусто. Я также могу менять даты начала и окончания, но ничего не меняется.

Скриншот интерфейса импорта данных с сообщением о том, что в текущей сессии данные не были импортированы, а также кнопками для выборочного, ежедневного и ежемесячного импорта, датами импорта и выбором категории. (Подпись сгенерирована ИИ)

Нет, их нет. Только несколько уведомлений об устаревании, не связанных со статистикой (согласно времени).

Действительно, есть ошибки. При загрузке страницы их 9, со временем их становится больше.

Изображение показывает лог консоли с различными сообщениями об ошибках, связанными со скриптами и проблемами загрузки в инструментах разработчика Chrome, такими как "Uncaught TypeError", "Cannot find page", а также примером выполнения скрипта и некоторыми управляемыми ресурсами и ограничениями. (Подпись сгенерирована ИИ)

Это поможет? Нужно ли мне скопировать и вставить (текстом) одну или все эти ошибки?

2 лайка

Действительно, я тоже столкнулся с этой ситуацией. В моём сообществе тоже не отображается правильное количество постов.

Неправильно или вообще ничего, как здесь?

1 лайк

Я немного погуглил, и, похоже, ошибки domQueryService связаны с расширением Bitwarden для Chrome; вряд ли они вызовут проблемы. Ошибки mini-profiler можно игнорировать.

Ошибка fingerprint-report исходит из GitHub - discourse/discourse-fingerprint: A plugin that computes user fingerprints to help administrators combat internet trolls. · GitHub. Хотя это проблема, которую нам нужно исправить, она, похоже, не мешает загрузке отчёта Posts в моей локальной среде.

Файл 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://ВАШ_САЙТ.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":"Сообщения","xaxis":"День","yaxis":"Количество новых сообщений","description":"Новые сообщения, созданные за этот период","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":"День"},{"type":"number","property":"y","title":"Количество"}],"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
Plugin name is 'discourse-docs', but plugin directory is named 'discourse-knowledge-explorer'
Plugin name is 'discourse-user-notes', but plugin directory is named '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 лайк