Повний перелік недоробленого — з причинами й перевіркою по коду
Раніше незроблене було розсипане: частина в таблиці «чесний зріз», частина в «дрібному боргу», частина лише в текстах етапів, а частина ніде — як приймач трапів чи кнопки Telegram, що нікуди не ведуть. Тепер один розділ, складений перевіркою коду: для кожного пункту звірено, чи є під нього щось у server/internal, agent/internal і web/src. Імена таблиць і міграцій теж звірені — sla_targets замість вигаданого sla_reports, 0009_billing_licensing замість 0009_billing. Розбито за тим, наскільки відсутність помітна: схема без коду, оголошене без реалізації, зроблене наполовину, відсутні перевірки й те, що впирається в зовнішні умови. «Дрібний борг» прибрано — новий перелік поглинає його цілком. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
parent
32b0b003df
commit
e371327174
1 changed files with 86 additions and 12 deletions
98
ROADMAP.md
98
ROADMAP.md
|
|
@ -16,7 +16,8 @@ API віддає готове полотно з живими статусами,
|
|||
## Чого немає: чесний зріз
|
||||
|
||||
Схема БД з Етапу 1 покриває майже все з технічного завдання, але **схема ≠
|
||||
реалізація**. Нижче — розрив між ними.
|
||||
реалізація**. Нижче — розрив між ними великими мазками; поіменний перелік
|
||||
із причинами — у розділі «Чого немає: повний перелік» наприкінці.
|
||||
|
||||
| Підсистема | Схема | Реалізація |
|
||||
|------------|-------|------------|
|
||||
|
|
@ -320,16 +321,89 @@ Diff* — усе з ТЗ.
|
|||
5. **Етап 7 (NCM)** — головний аргумент Enterprise-тарифу.
|
||||
6. **Етап 10 (мобільний)** — після того, як є що показувати.
|
||||
|
||||
Далі за ТЗ лишаються дашборди з NOC TV-режимом, білінг зі Stripe і ліцензійні
|
||||
ключі — усі три мають готову схему й жодного коду.
|
||||
Дашборди з NOC TV-режимом зроблено 2026-08-25. Що лишається — нижче,
|
||||
окремим переліком із причинами.
|
||||
|
||||
## Дрібний борг
|
||||
## Чого немає: повний перелік
|
||||
|
||||
- Перетягування вузла через UI не покрите автотестом: синтетичні події не
|
||||
запускають d3-drag у React Flow. Шлях перевірений тестами сервера.
|
||||
- Підкладки-плани приміщень віддаються API, але полотно їх не малює — потрібен
|
||||
прийом і роздача файлів (S3/MinIO або локальний диск).
|
||||
- `modbus` і `netflow` оголошені в сіді плагінів і не написані. Обидва позначені
|
||||
`is_core = false`, тож у переліку перевірок система показує їх недоступними —
|
||||
обіцянки немає. Писати Modbus без жодного інвертора під рукою означало б
|
||||
віддати неперевірений промисловий протокол.
|
||||
Стан на 2026-08-25, після розгортання на бойовому сервері. Перелік
|
||||
складений перевіркою коду, а не з пам'яті: для кожного пункту звірено,
|
||||
чи є під нього щось у `server/internal`, `agent/internal` і `web/src`.
|
||||
|
||||
Порядок — за тим, наскільки відсутність помітна тому, хто користується
|
||||
системою.
|
||||
|
||||
### Схема є, коду немає зовсім
|
||||
|
||||
Ці таблиці створені міграціями й порожні. Небезпека тут не в самій
|
||||
відсутності, а в тому, що схема виглядає як обіцянка.
|
||||
|
||||
| Що | Де схема | Чого бракує |
|
||||
|---|---|---|
|
||||
| **Білінг і ліцензії** | `0009_billing_licensing.sql` | усього: тарифи, ліміти, Stripe, ключі. Для Micro-SaaS це те, через що продають |
|
||||
| **Відкат конфігу** | `ncm.rollbacks` | API, UI і — головне — запис на пристрій. Двоетапне погодження в схемі є, виконавця немає |
|
||||
| **Ескалації сповіщень** | `alr.escalation_policies` | «не підтвердили за 15 хв — буди наступного» |
|
||||
| **Web Push** | `alr.push_subscriptions` | підписки й доставка. Потрібне для PWA |
|
||||
| **Звіти SLA** | `core.sla_targets`, `core.sla_periods` | розрахунок доступності за період і вивантаження |
|
||||
| **Збережені подання** | `core.saved_views` | фільтри інвентарю, які можна назвати й повернутись |
|
||||
| **Прокрутка дашбордів на TV** | `dashboards.tv_options.rotate_sec` | сам режим NOC TV працює, але сторінки не гортаються по колу |
|
||||
|
||||
### Оголошено в переліку можливостей, не написано
|
||||
|
||||
| Що | Стан | Чому не зроблено |
|
||||
|---|---|---|
|
||||
| **`snmp.walk`** | тип чека є в `core.check_types`, модуля немає | таблиці з динамічним індексом: потрібне виявлення рядків і породження метрик на кожен. Найбільша з відсутніх можливостей опитування |
|
||||
| **Modbus-TCP** | плагін у сіді, `is_core = false` | немає жодного інвертора чи UPS під рукою. Неперевірений промисловий протокол у мережі з живим обладнанням — гірше, ніж його відсутність |
|
||||
| **NetFlow / sFlow** | плагін у сіді, `is_core = false` | окремий приймач потоків, за обсягом — власний етап |
|
||||
| **Приймач SNMP-трапів** | `ts.snmp_traps` і `WriteLogs` готові | на зонді немає слухача 162/udp. Syslog зроблено, трапи — ні |
|
||||
|
||||
Обидва плагіни позначені `is_core = false`, тож у переліку перевірок
|
||||
система показує їх недоступними — обіцянки користувачу немає.
|
||||
|
||||
### Зроблено наполовину
|
||||
|
||||
**Сповіщення за подіями не спрацьовують.** Движок правил рахує тільки
|
||||
джерела `metric`, `icmp` і `interface`. Для `syslog`, `trap`, `ncm` і
|
||||
`compliance` він свідомо повертає порожньо — їх треба обробляти подією в
|
||||
момент надходження, а не опитуванням. Тобто правило з такими джерелами
|
||||
можна створити, і воно ніколи не спрацює. Дані при цьому збираються:
|
||||
журнал пишеться, знахідки відповідності рахуються — не вистачає ланки
|
||||
між ними й алертом.
|
||||
|
||||
**Кнопки в Telegram нікуди не ведуть.** Сповіщення йде з кнопками
|
||||
«Підтвердити» й «Заглушити 1 год» (`callback_data` у `notify.go`), але
|
||||
приймача натискань немає: сервер не має вебхука Telegram. Кнопки видно,
|
||||
натиснути можна, нічого не станеться.
|
||||
|
||||
**Підкладки-плани приміщень.** `topo.map_backgrounds` віддається в
|
||||
`GET /maps/{id}`, полотно їх не малює. Потрібен прийом і роздача файлів
|
||||
— іконки мап уже зберігаються в базі, тож можна тим самим шляхом, без
|
||||
S3. Приблизно пів дня.
|
||||
|
||||
**Мобільний режим мапи.** Адаптив сторінок є, але на полотні
|
||||
перетягування вузла пальцем не розведене з панорамуванням: потрібен
|
||||
явний режим редагування, інакше кожна спроба посунути карту рухатиме
|
||||
вузол.
|
||||
|
||||
**Прототипи шаблонів.** Шаблон описує сталий перелік метрик. Для
|
||||
інтерфейсів і дисків потрібні прототипи: «на кожен знайдений рядок
|
||||
таблиці — свій набір метрик». Без цього кожен порт заводиться руками.
|
||||
|
||||
### Перевірки, яких немає
|
||||
|
||||
**У вебі немає тестового прогону взагалі** — ні vitest, ні jest.
|
||||
Перевіряється типами й живим браузером. Найпомітніший наслідок:
|
||||
перетягування вузла на мапі не покрите, бо d3-drag не запускається
|
||||
синтетичними подіями; серверний бік цієї дії тестами покритий.
|
||||
|
||||
**CI жодного разу не запускався.** `.forgejo/workflows/ci.yml` написано,
|
||||
але раннера немає. Прогони робились руками; те, що CI мав би ловити
|
||||
(`gofmt`, `go vet`, тести з базою, крос-збірка зонда), проганялось
|
||||
окремо перед кожним комітом.
|
||||
|
||||
### Чого не буде без зовнішніх умов
|
||||
|
||||
- **Справжній TLS** на бойовому сервері — потрібен домен. Зараз
|
||||
самопідписаний: Let's Encrypt не видає сертифікатів на IP-адреси.
|
||||
- **Telegram Mini App** — окрема робота, і почати варто з приймача
|
||||
кнопок бота: він дає 90% користі за 10% зусиль.
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue