Bug 60951
| Summary: | Системные журналы: страница обрывается на записи с многострочным сообщением (остальные записи не показываются), вместо имени процесса «null[PID]»/«kernel[null]», на каждой странице N+1 строка, при смене «Показывать» начало страницы не пересчитывается | ||
|---|---|---|---|
| Product: | Branch p11 | Reporter: | Ajrat Makhmutov <rauty> |
| Component: | alterator-logs | Assignee: | Mikhail Efremov <sem> |
| Status: | NEW --- | QA Contact: | qa-p11 <qa-p11> |
| Severity: | normal | ||
| Priority: | P5 | ||
| Version: | unspecified | ||
| Hardware: | x86_64 | ||
| OS: | Linux | ||
| Attachments: | |||
Created attachment 22470 [details]
последняя страница при 20 строках: «systemd-sysv-generator[null]», страница оборвана перед многострочным сообщением alterator-manager (12 записей вместо 19)
Created attachment 22471 [details]
после выбора «100 строк» на последней странице подпись остаётся «Строки 9980-9998», записей столько же
Created attachment 22472 [details]
вывод проверки бэкенда: null вместо имени и PID в сравнении с journalctl, 101 запись на странице и повтор граничной, start после смены размера, обрыв стра
Created attachment 22473 [details]
скрипт, которым получен backend-check.txt (запускать от root)
|

Description
Ajrat Makhmutov 2026-10-12 20:34:39 MSKСистема: Альт Образование 11.2, x86_64, KDE Plasma (Wayland), Центр управления системой (alterator-browser-qt6-3.7.6-alt1). Версия пакета: alterator-logs-0.9.4-alt2 Шаги воспроизведения: 1. Центр управления системой → Система → «Системные журналы» (ввести пароль root). Открывается журнал «Системные сообщения (Journald)» на последней странице, «Показывать: 20 строк». 2. Сравнить имена процессов в строках с выводом journalctl -o short за то же время. 3. Не уходя с последней страницы, выбрать «Показывать: 100 строк». 4. Нажать «Первая страница», затем «Далее». 5. Чтобы получить многострочное сообщение без SYSLOG_IDENTIFIER, от root выполнить gdbus call --system -d org.altlinux.alterator -o /org/altlinux/alterator/apt -m org.altlinux.alterator.apt1.LastDistUpgrade (alterator-manager пишет в журнал ошибку из 4 строк), затем в модуле нажать «Последняя страница». Ожидаемый результат: Имя процесса и PID в строках такие же, как в journalctl. На странице ровно столько записей, сколько выбрано в «Показывать», соседние страницы не пересекаются. После смены размера страницы на последней странице видно 100 последних записей. Многострочные сообщения выводятся целиком и не влияют на остальные записи страницы. Фактический результат: 1. Если в записи нет SYSLOG_IDENTIFIER, вместо имени процесса выводится «null»: «null[893]: couldn't list homed users…» (journalctl: «accounts-daemon[893]»), то же у alterator-manager. Если нет _PID, вместо PID выводится «null»: «kernel[null]: …» (journalctl: «kernel:»), «systemd-sysv-generator[null]: …» (journalctl: «systemd-sysv-generator[266020]»). Бэкенд запрашивает только MESSAGE,_PID,_HOSTNAME,SYSLOG_IDENTIFIER,PRIORITY (backend3/logs:194-195), а jq -r печатает null для отсутствующих полей (logs:238). journalctl в таких случаях берёт _COMM и SYSLOG_PID. 2. Каждая страница содержит size+1 записей, граничная запись повторяется на соседних страницах: «Первая страница» → «Строки 1-101 из 9998» (101 запись), «Далее» → «Строки 101-201» (запись 101 на обеих страницах). Причина: stop=$((start+size)) (logs:231), а диапазон sed -n "$start,$stop p" (logs:166) включает обе границы. 3. На последней странице («Строки 9980-9998», 20 строк) выбор «100 строк» оставляет «Строки 9980-9998» и те же 19 записей. При смене размера меняется только size, start не пересчитывается (logs:207-209). 100 записей появляются только после «Последняя страница» или «Назад». 4. Многострочное сообщение обрывает страницу: всё, что идёт после него, не выводится. jq печатает 6 полей по строкам, MESSAGE из нескольких строк сдвигает цепочку read -r в journald_log_format (logs:140-145), в priority попадает строка текста («Interface name: org.altlinux.alterator.apt1»), выражение ${log_colors[$priority]} (logs:148) завершается ошибкой bash «syntax error in expression», подоболочка journald_log_format выходит. На последней странице при 20 строках видно 12 записей вместо 19, страница кончается записью перед сообщением alterator-manager; на тестовой выборке из 21 записи выведено 10. Воспроизводится всегда (4 из 4). Дополнительно: Модуль читает только journalctl --system, сообщения пользовательских журналов в нём не видны. Видимо, это сделано намеренно, но разница с journalctl -f от root может сбивать с толку. MESSAGE в виде массива байтов (не UTF-8) и отсутствующий MESSAGE тоже не обрабатываются: jq печатает массив в несколько строк или null. Возможное исправление: формировать строку одним вызовом jq, например jq -r '[(.__REALTIME_TIMESTAMP), ._HOSTNAME, (.SYSLOG_IDENTIFIER // ._COMM // "?"), (._PID // .SYSLOG_PID // ""), (.MESSAGE|tostring|gsub("\n";" ")), (.PRIORITY // "6")] | @tsv' и запрашивать _COMM и SYSLOG_PID в --output-fields; stop считать как start+size-1; при смене размера пересчитывать start, если start+size-1 > total. Код: packages/gears/a/alterator-logs.git, ветка p11, alterator-logs/backend3/logs:140-148, 166, 194-195, 207-209, 231, 238. В Sisyphus (0.9.5-alt1) код тот же. Похожие закрытые баги: #44392 (сбивается количество строк при переключении журналов, FIXED в p10), #21709 (кнопка «назад» перепрыгивает через страницу, FIXED). Вложения: last-page-20-null-and-truncated.png — последняя страница при 20 строках: «systemd-sysv-generator[null]», страница оборвана перед многострочным сообщением alterator-manager (12 записей вместо 19). size-100-start-not-recalculated.png — после выбора «100 строк» на последней странице подпись остаётся «Строки 9980-9998», записей столько же. backend-check.txt — вывод проверки бэкенда: null вместо имени и PID в сравнении с journalctl, 101 запись на странице и повтор граничной, start после смены размера, обрыв страницы с ошибкой bash. backend-check.sh — скрипт, которым получен backend-check.txt (запускать от root).