Fix Monitor snapshot contract and alpha.9 release compatibility #32
No reviewers
Labels
No labels
bug
documentation
duplicate
enhancement
good first issue
help wanted
invalid
question
wontfix
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference: ochenstarik/server-monitor-manager#32
Loading…
Reference in a new issue
No description provided.
Delete branch "hermes/monitor-snapshot-contract"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Hermes: формат снимка Monitor, совместимость БД, дисциплина релизов
Состояние
main@f9205c3, роль Monitor слита (#29), подписанная поставка Queue A слита (#26);v0.1.0-alpha.8пересобран, все Linux-артефакты иserver-monitor-manager-manifest.sigна месте;Ветка:
hermes/monitor-snapshot-contract.Часть 1 — снимок Monitor не читается Desktop · блокирующий
Роль Monitor установлена, но мониторинг работать не будет. Скрипт
/usr/local/libexec/ochenstarik-smm-metricsвыдаёт имена полей, которых не понимает ни парсер Desktop, ни собственный контракт проекта.Ждёт
SshMonitorService.QueryAsync:Выдаёт скрипт:
Совпадают два поля из шестнадцати —
CPU_COUNTиLOAD1. Остальные не совпадают по имени, аPROTOCOL,HOSTNAME,SYSTEMD_SSH,SYSTEMD_WIREGUARDотсутствуют вовсе.Практический результат: в Desktop имя сервера подставится из профиля, память, диск, swap, inode и сеть покажут нули, состояния SSH и WireGuard —
unknown. Формально роль установлена, фактически функция, ради которой существует Desktop, не работает.Формат уже зафиксирован в
docs/installer-contract.md§7 — его и надо соблюсти дословно, а не изобретать заново.Что сделать
docs/installer-contract.md§7:PROTOCOL=1,HOSTNAME,UPTIME_SECONDS,LOAD1,CPU_COUNT,MEM_TOTAL_KB,MEM_AVAILABLE_KB,SWAP_TOTAL_KB,SWAP_FREE_KB,DISK_TOTAL_KB,DISK_AVAILABLE_KB,DISK_INODES_TOTAL,DISK_INODES_FREE,NETWORK_RX_BYTES,NETWORK_TX_BYTES,KERNEL.SYSTEMD_SSHиSYSTEMD_WIREGUARD— их читает Desktop, но в §7 их нет. Дописать в §7, чтобы контракт снова был единственным источником.DF_OUTиDF_INODESиз вывода убрать: снимок не должен содержать ничего, кроме полей контракта.Контрактный тест — переделать
tests/acceptance/test_monitor_snapshot.shпроверяет скрипт против списка полей, который живёт в самом тесте. Именно поэтому расхождение с Desktop не поймалось.Список ожидаемых полей должен существовать в одном месте и использоваться обеими сторонами:
Как реализовать — на ваше усмотрение: общий файл-фикстура с эталонным снимком, из которого обе стороны берут набор ключей, либо генерация списка из
installer-contract.md. Требование одно: изменение имени поля с одной стороны обязано ронять тест другой стороны.SshMonitorService.csпри этом не менять — правится скрипт, а не парсер. Если парсер тоже потребует правки, описать вREPORT.md.Часть 2 — совместимость существующей БД с SQLitePCLRaw 3.0.5
Пункт из прошлого задания, оставшийся невыполненным. Сейчас он не горит только по счастливой случайности:
alpha.8собран из коммита, где ещё2.1.12. Но вmainуже3.0.5, и следующий релиз его унесёт.На живом Hub пользователя база создана версией
2.1.12. Если совместимости нет, это проявится в моментupdate-control.Проверить: открытие существующей
control.dbсборкой из текущегоmain,PRAGMA user_versionбез повторного применения миграций, чтение агентов, identities, links, provisioning и аудита,backup-createиbackup-restoreна этой же базе, и то же самое наlinux-arm64self-contained trimmed single-file.Добавить постоянный тест на открытие базы предыдущей схемы — эталонная
control.dbв репозитории либо скрипт её воспроизведения. Без него следующее обновление SQLite повторит эту историю.Если хоть одна проверка не проходит — откатить
#23отдельным PR и написать об этом прямо.Часть 3 — дисциплина релизов
Тег
v0.1.0-alpha.8был сдвинут: сначала указывал на80b4797, теперь наad180e9. Так делать нельзя, и теперь особенно: релиз содержитserver-monitor-manager-manifest.jsonи подписьmanifest.sig, которые описывают конкретное содержимое. Если тег двигается, подпись перестаёт что-либо доказывать, а у того, кто сверялся с прежним тегом, проверка не сойдётся.docs/installer-contract.md: опубликованный тег неизменяем; ошибка в сборке исправляется выпуском следующей версии, а не переписыванием тега.v0.1.0-alpha.9после частей 1 и 2.smm-setup.sh(ассет релиза) временный обход багаvalidate_control_url— дефект исправлен в #24, обход помечен комментарием в коде.Критерий приёмки
installer-contract.md§7 плюс два поля systemd; лишних полей нет;validate_control_urlизsmm-setup.shудалён;Отчёт
Раздельно: локально, в CI со ссылками, не запускалось и почему.
Verification evidence:
git diff --checkpassed.Intentional cross-contract red proof:
28916b01fa3dd1859f3879c43f2b33639a6c7c0arenamed DesktopMEM_TOTAL_KBtoMEM_TOTAL; the opposite-side canonical contract failed exactly as required: https://github.com/ochenstarik-ui/server-monitor-manager/actions/runs/31379098394MEM_TOTAL_KB, actualMEM_TOTAL; 119 passed / 1 failed.hermes/monitor-contract-red-proofand is not part of this PR.