fix(map): сохранить узлы при датах опроса из базы данных
This commit is contained in:
1 parent
72bf648ca8
commit
fda7f353ad
5 files changed
+114
-1
No files matched your search
@@ -38,6 +38,12 @@
|
||||
| 11Б | Оповещения, сбор данных, интеграции, релизы и настройки | Завершён в границах локальной приёмки 2026-10-03; ограничения и evidence в11Б.7 |
|
||||
| 12 | Итоговая доступность, адаптивность, производительность и регрессия | Завершён2026-10-15 в границах предоставленного стенда:1396 UI/221 context,120 live states30 экранов, production builds/ReUI checklist и реальные интеграции. Ограничения — в [акте](ux-ui-acceptance-candidate.md); production-выпуск не выполнялся. |
|
||||
|
||||
## Production265 — исчезновение узлов карты и первичная диагностика (2026-10-15)
|
||||
|
||||
Через выданный read-only аккаунт подтверждён production v2.0.0. Карта отклоняет все4 устройства: API polledAt имеет штатный PostgreSQL timestamptz string (+00), frontend требует ISO. В локальной ветке исправлена только нормализация явного offset; отсутствующая зона и невозможная дата по-прежнему отклоняются. Сохранённый приватный ответ production теперь проходит:4 servers/25 GRE/0 probes. Регрессия сначала воспроизведена новым unit test; после исправления6 unit и13 map E2E прошли, TypeScript/scoped ESLint passed. Production не обновлялся; push этого исправления не выполнялся.
|
||||
|
||||
SSH только чтением:1 vCPU/1973MiB/no swap, PostgreSQL нагружает CPU/IO. Дважды наблюдался retention DELETE по scheduler_runs.finished_at: около1.06M live rows,853MB, нет индекса по этому столбцу. Исходник выполняет cleanup после каждого задания; EXPLAIN эквивалентного SELECT показывает Parallel Seq Scan. TCP443 из backend до4 устройств сейчас3–50ms; TLS/REST этим не приняты. Причинность всех10s тайм-аутов не установлена; очередь shared maxSockets2 входит в deadline. Трафик: live SSE актуален, REST history/list не обновляются автоматически; вычисления требуют отдельной проверки. [Анонимизированный протокол](ux-ui/acceptance/prod265-diagnostics.json). Приватные сырые ответы и учётные данные в Git не включаются. Следующее действие — подготовить и проверить индекс retention, продолжить трафик; применение DDL и развёртывание production требуют отдельного разрешения владельца, предоставившего доступ для чтения.
|
||||
|
||||
## Подготовка версии 2.0.0 (2026-10-15)
|
||||
|
||||
По прямому поручению владельца публикация main/2.0 заменяет прежний режим только локальных коммитов. Добавлен major bump для breaking subject со scope/без scope и двух стандартных footer; CI запускает10 integration cases перед вычислением версии. Package.json и теги вручную не меняются. В выпуск включены накопленные изменения ReUI skills/portable MCP config и сохранённые снимки; локальные PID/cache и приватные fixtures не публикуются. Проверена новая история на известные приватные Portal credentials и шаблоны внешних токенов: совпадений0. [Состав и ограничения релиза](releases/2.0.0.md). Отправка main запускает существующую публикацию образов/релиза и настроенный deploy webhook. Фактический результат сборок определяется Gitea Actions. Первый запуск2464 отклонён валидатором Gitea28.1 до jobs: job-level secrets в if больше не принимается. После подтверждения причины read-only ViewPost по официальному handler условие перенесено в step if по job env; side effects webhook не расширены.
|
||||
|
||||
@@ -0,0 +1,78 @@
|
||||
{
|
||||
"date": "2026-10-15",
|
||||
"scope": "Production diagnosis using a read-only application account and read-only SSH/system/PostgreSQL inspection. No production deployment or configuration changes.",
|
||||
"productionVersion": "2.0.0",
|
||||
"map": {
|
||||
"cause": "PostgreSQL polledAt text with explicit offset is rejected by the ISO-only map validator; the whole topology snapshot is discarded.",
|
||||
"before": {
|
||||
"serverValidationErrors": 4,
|
||||
"field": "polledAt",
|
||||
"error": "invalid_format"
|
||||
},
|
||||
"localFix": {
|
||||
"preservesExplicitTimeZone": true,
|
||||
"rejectsMissingZoneAndInvalidCalendarDate": true,
|
||||
"exactPrivateResponseAccepted": {
|
||||
"servers": 4,
|
||||
"tunnels": 25,
|
||||
"probes": 0
|
||||
}
|
||||
},
|
||||
"checks": {
|
||||
"unitPassed": 6,
|
||||
"e2ePassed": 13,
|
||||
"typescript": "passed",
|
||||
"scopedEslint": "passed"
|
||||
},
|
||||
"deployed": false
|
||||
},
|
||||
"traffic": {
|
||||
"confirmed": "REST history/list/detail load once per scope/retry; live SSE keeps updating separately. History can become stale while live rate is current.",
|
||||
"calculationNotYetFullyAccepted": true,
|
||||
"rawResponsesPrivate": true
|
||||
},
|
||||
"performance": {
|
||||
"host": {
|
||||
"vcpu": 1,
|
||||
"memoryMiB": 1973,
|
||||
"swapMiB": 0,
|
||||
"loadAverage": [
|
||||
4.62,
|
||||
4.87,
|
||||
5.09
|
||||
],
|
||||
"rootUsedPercent": 46
|
||||
},
|
||||
"sample": {
|
||||
"postgresCpuPercent": 66.51,
|
||||
"postgresMemory": "642.6MiB",
|
||||
"backendCpuPercent": 3.26,
|
||||
"cpuIdlePercent": 0,
|
||||
"ioWaitPercent": [
|
||||
34,
|
||||
29
|
||||
]
|
||||
},
|
||||
"schedulerRuns": {
|
||||
"estimatedLiveRows": 1064090,
|
||||
"tableSize": "853 MB",
|
||||
"indexes": "primary key and (job_key, started_at), no finished_at index",
|
||||
"observedActiveQuery": "DELETE FROM scheduler_runs WHERE finished_at < $1",
|
||||
"wait": "IO/AioIoCompletion",
|
||||
"retention": "30 days after every recorded scheduler job",
|
||||
"explainEquivalentSelect": "Gather / Parallel Seq Scan"
|
||||
},
|
||||
"tcpConnectMsByAnonymousServerId": {
|
||||
"1": 36,
|
||||
"2": 3,
|
||||
"3": 50,
|
||||
"4": 6
|
||||
},
|
||||
"limits": [
|
||||
"TCP connect success does not prove TLS/REST authentication or rule out previous failures.",
|
||||
"The native HTTP client timeout also includes time queued in maxSockets=2; actual queue delay has not been measured.",
|
||||
"Database temp-byte and deadlock counters are cumulative with an unknown reset epoch; not attributed to this release.",
|
||||
"No proof that database pressure alone caused every REST timeout."
|
||||
]
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user