fix(netflow): запускать TypeScript worker с собственным загрузчиком
This commit is contained in:
1 parent
7a38bb36aa
commit
19ad294ded
20 files changed
+472
-13
No files matched your search
@@ -0,0 +1,25 @@
|
||||
import fs from 'node:fs'
|
||||
import assert from 'node:assert/strict'
|
||||
import {execFileSync} from 'node:child_process'
|
||||
import pg from 'pg'
|
||||
const database=process.env.MMAPP_OWN_SQL_DB,root='/app/backend/acceptance'
|
||||
assert(/^mm_accept_166_\d+$/.test(database))
|
||||
const url=new URL(process.env.DATABASE_URL);assert.equal(url.pathname,'/'+database);assert.equal(url.username,database)
|
||||
const client=new pg.Client({connectionString:url.toString()});await client.connect()
|
||||
assert.equal((await client.query('SELECT current_database() AS name')).rows[0].name,database)
|
||||
const role=(await client.query('SELECT rolsuper,rolcreatedb,rolcreaterole,rolbypassrls FROM pg_roles WHERE rolname=current_user')).rows[0]
|
||||
assert(Object.values(role).every(value=>value===false));await client.end()
|
||||
const pkg=JSON.parse(fs.readFileSync('/app/backend/package.json'))
|
||||
const profiles=pkg.scripts['test:all'].split(/\s*&&\s*/).map(c=>{const m=/^npm run (test:[\w-]+)$/.exec(c);assert(m);return m[1]})
|
||||
const report={date:'2026-10-14',block:'12.5.222',scope:'full backend profile list on owned isolated PostgreSQL; no production DSN',database,profiles:[],passed:false}
|
||||
for(const profile of profiles){
|
||||
const started=Date.now();let output='',passed=true,errorName
|
||||
try{output=execFileSync('npm',['--prefix','backend','run',profile],{cwd:'/app',timeout:240_000,maxBuffer:16*1024**2,encoding:'utf8',env:{...process.env,NODE_ENV:'test',GEOIP_DIR:'/tmp/'+database+'/geoip',DATABASE_PATH:'/tmp/'+database+'/legacy.db'},stdio:['ignore','pipe','pipe']})}
|
||||
catch(e){passed=false;errorName=e.name;output=String(e.stdout??'')+'\n'+String(e.stderr??'')}
|
||||
fs.writeFileSync(root+'/'+profile.replace(':','-')+'-private.log',output,{mode:0o600})
|
||||
const skippedLines=output.split('\n').filter(s=>/\bskip(?:ped)?\b/i.test(s));const unavailableSql=skippedLines.filter(s=>/PostgreSQL|owned|own SQL|explicit owned|database|MMAPP_OWN/i.test(s)&&!s.includes('skip/release/recovery passed'));
|
||||
report.profiles.push({profile,passed,durationMs:Date.now()-started,errorName,skippedLineCount:skippedLines.length,unavailableSqlBranches:unavailableSql.map(line=>line.trim())})
|
||||
fs.writeFileSync(root+'/owned222-result.json',JSON.stringify(report,null,2));console.log(JSON.stringify(report.profiles.at(-1)))
|
||||
}
|
||||
report.passed=report.profiles.every(p=>p.passed);fs.writeFileSync(root+'/owned222-result.json',JSON.stringify(report,null,2))
|
||||
if(!report.passed)process.exitCode=1
|
||||
@@ -58,10 +58,10 @@ let state: FlowListenerState = { bound: false, address: null }
|
||||
let wantListen = false
|
||||
let databaseStop: Promise<void> | null = null
|
||||
|
||||
function workerFileUrl(): URL {
|
||||
const ts = import.meta.url.includes(".ts")
|
||||
export function trafficFlowWorkerFileUrl(): URL {
|
||||
const ts = new URL(import.meta.url).pathname.endsWith(".ts")
|
||||
return new URL(
|
||||
ts ? "./traffic-flow-collector-worker.ts" : "./traffic-flow-collector-worker.js",
|
||||
ts ? "./traffic-flow-worker-bootstrap.mjs" : "./traffic-flow-collector-worker.js",
|
||||
import.meta.url,
|
||||
)
|
||||
}
|
||||
@@ -125,7 +125,7 @@ async function spawnWorker(): Promise<void> {
|
||||
await applyExporterCtxFromDb()
|
||||
const exporterMap = await buildExporterMapPayload()
|
||||
if (databaseStop) return
|
||||
const w = new Worker(workerFileUrl(), { execArgv: process.execArgv })
|
||||
const w = new Worker(trafficFlowWorkerFileUrl(), { execArgv: process.execArgv })
|
||||
w.on("message", (msg: WorkerToMain) => handleWorkerMessage(msg))
|
||||
w.on("error", (err) => {
|
||||
state = { bound: false, address: null }
|
||||
|
||||
@@ -100,7 +100,10 @@ if (!ownDb) {
|
||||
await new Promise<void>(resolve => reservation.bind(0, "127.0.0.1", resolve))
|
||||
const port = reservation.address().port
|
||||
await new Promise<void>(resolve => reservation.close(resolve))
|
||||
const workerFile = new URL(import.meta.url.endsWith(".ts") ? "./traffic-flow-collector-worker.ts" : "./traffic-flow-collector-worker.js", import.meta.url)
|
||||
const { trafficFlowWorkerFileUrl } = await import("./traffic-flow-ingest.js")
|
||||
const workerFile = process.env.MMAPP_TEST_COMPILED_WORKER === "true"
|
||||
? new URL("../../dist/services/traffic-flow-collector-worker.js", import.meta.url)
|
||||
: trafficFlowWorkerFileUrl()
|
||||
worker = new Worker(workerFile)
|
||||
worker.on("error", error => { workerError = error })
|
||||
worker.on("message", (message: WorkerToMain) => {
|
||||
|
||||
@@ -0,0 +1,4 @@
|
||||
// Register the TypeScript resolver inside this worker; parent hooks are not enough.
|
||||
import { tsImport } from "tsx/esm/api"
|
||||
|
||||
await tsImport(new URL("./traffic-flow-collector-worker.ts", import.meta.url).href, import.meta.url)
|
||||
@@ -1,6 +1,6 @@
|
||||
# UX/UI: протокол внешней приёмки 12.5
|
||||
|
||||
Актуальное продолжение 2026-10-14: блок221 завершён. GRE API/config/snapshot source отклоняют missing/duplicate native ID/name и повреждённые records, fallback identity удалены. Local13/flags49, configSync7 и production22 прошли; false observed revisions не добавляются. Whole actual source2own GRE/UI passed, own tunnels/DB/roles удалены. Первичный native500104.165.244.7 сохранён; причина неизвестна. Backend ux-gre221/compiled1056/source490 matched, frontend ux-routing218. Следующий222 — общая backend регрессия в собственных PostgreSQL DB и профильный GRE UI. Этап12.5 открыт.
|
||||
Актуальное продолжение 2026-10-14: блок222 завершён. Общая backend регрессия25 после worker fix и GRE/Filters E2E52 прошли. Отдельно SQL disabled33/months5; source+compiled IPv6 UDP worker6rows/aggregates/shutdown passed. Dev worker получил собственный tsx bootstrap; production worker path сохранён. Own DB/roles удалены. Backend ux-regression222/compiled1056/source492 matched, frontend ux-routing218. Live API6/UI4 passed. Следующий223 — согласование текущего плана, статусов и укрупнённой матрицы остатка. Этап12.5 открыт.
|
||||
|
||||
IPsec78: реальный PSK responder established, mode-config198.18.78.10 и online=true подтверждены API; точные собственные объекты удалены. Сертификатный/DN online, late failure и history restore остаются открытыми. [Отчёт](ux-ui/acceptance/ipsec-mode-config-2026-10-09.json), [журнал](ux-ui-progress.md).
|
||||
|
||||
@@ -2611,3 +2611,7 @@ BGP/OSPF contrast: baseline22/fixed104 cells0 violations; E2E22 и real UI8 pass
|
||||
## 12.5.221 — GRE native identity (2026-10-14)
|
||||
|
||||
Общий identity boundary предотвращает fallback IDs/names и false config revisions. Local13/flags49, production22 и real source/API/UI passed; own objects удалены. Первичный500 сохранён, причина неизвестна. Подробности и границы — [журнал](ux-ui-progress.md). Backend ux-gre221, frontend ux-routing218; следующий222 — общая backend/профильная UI регрессия.
|
||||
|
||||
## 12.5.222 — backend/worker регрессия (2026-10-14)
|
||||
|
||||
Backend25/UI52, disabled33/months5 и оба IPv6 UDP/SQL worker режима прошли; own DB/roles удалены. Dev bootstrap исправлен, production entry сохранён. Подробности и границы — [журнал](ux-ui-progress.md). Backend ux-regression222, frontend ux-routing218; следующий223 — актуализация матрицы/статусов.
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
# План реализации UX/UI по пятичасовым окнам
|
||||
|
||||
Актуальное продолжение 2026-10-14: блок221 завершён. GRE API/config/snapshot source отклоняют missing/duplicate native ID/name и повреждённые records, fallback identity удалены. Local13/flags49, configSync7 и production22 прошли; false observed revisions не добавляются. Whole actual source2own GRE/UI passed, own tunnels/DB/roles удалены. Первичный native500104.165.244.7 сохранён; причина неизвестна. Backend ux-gre221/compiled1056/source490 matched, frontend ux-routing218. Следующий222 — общая backend регрессия в собственных PostgreSQL DB и профильный GRE UI. Этап12.5 открыт.
|
||||
Актуальное продолжение 2026-10-14: блок222 завершён. Общая backend регрессия25 после worker fix и GRE/Filters E2E52 прошли. Отдельно SQL disabled33/months5; source+compiled IPv6 UDP worker6rows/aggregates/shutdown passed. Dev worker получил собственный tsx bootstrap; production worker path сохранён. Own DB/roles удалены. Backend ux-regression222/compiled1056/source492 matched, frontend ux-routing218. Live API6/UI4 passed. Следующий223 — согласование текущего плана, статусов и укрупнённой матрицы остатка. Этап12.5 открыт.
|
||||
|
||||
Общий план проекта MikrotikManager. Основан на согласованном плане из задачи; точка продолжения обновлена 2026-10-13. Источник фактического прогресса, проверок и ограничений — [журнал реализации](ux-ui-progress.md). Этот документ задаёт объём и критерии завершения, журнал фиксирует результат.
|
||||
|
||||
|
||||
+13
-1
@@ -1,6 +1,6 @@
|
||||
# UX/UI: журнал реализации
|
||||
|
||||
Актуальное продолжение 2026-10-14: блок221 завершён. GRE API/config/snapshot source отклоняют missing/duplicate native ID/name и повреждённые records, fallback identity удалены. Local13/flags49, configSync7 и production22 прошли; false observed revisions не добавляются. Whole actual source2own GRE/UI passed, own tunnels/DB/roles удалены. Первичный native500104.165.244.7 сохранён; причина неизвестна. Backend ux-gre221/compiled1056/source490 matched, frontend ux-routing218. Следующий222 — общая backend регрессия в собственных PostgreSQL DB и профильный GRE UI. Этап12.5 открыт.
|
||||
Актуальное продолжение 2026-10-14: блок222 завершён. Общая backend регрессия25 после worker fix и GRE/Filters E2E52 прошли. Отдельно SQL disabled33/months5; source+compiled IPv6 UDP worker6rows/aggregates/shutdown passed. Dev worker получил собственный tsx bootstrap; production worker path сохранён. Own DB/roles удалены. Backend ux-regression222/compiled1056/source492 matched, frontend ux-routing218. Live API6/UI4 passed. Следующий223 — согласование текущего плана, статусов и укрупнённой матрицы остатка. Этап12.5 открыт.
|
||||
|
||||
Общий план: [UX/UI по этапам и пятичасовым окнам](ux-ui-plan.md). План задаёт объём, этот журнал фиксирует выполненные блоки и ограничения. Записи расположены от новых к старым; подробная история этапа12 также сохранена в [ux-ui-stage-12.md](ux-ui-stage-12.md).
|
||||
|
||||
@@ -38,6 +38,18 @@
|
||||
| 11Б | Оповещения, сбор данных, интеграции, релизы и настройки | Завершён в границах локальной приёмки 2026-10-03; ограничения и evidence в11Б.7 |
|
||||
| 12 | Итоговая доступность, адаптивность, производительность и регрессия | Локальная приёмка завершена в границах12.3.83; внешняя12.5 в работе, выполненные блоки1–196 и ограничения ниже. Runtime backend/frontend ux-peak196. |
|
||||
|
||||
## 12.5.222 — общая регрессия и исправление dev NetFlow worker (2026-10-14)
|
||||
|
||||
После общих GRE catalog/config/alert readers выполнены25 backend profiles в собственной PostgreSQL с NOSUPERUSER/NOCREATEDB/NOCREATEROLE/NOBYPASSRLS. Test image не содержал /app/.env или /app/backend/.env; main DSN не копировался. По специальным namespace guards дополнительно выполнены33 disabled API/SQL checks (Home/Jump/Exit, bigint positive control, native contacts0) в mm_accept_152 и5 календарных SQL checks в mm_accept_149. Контроль skip/release/recovery concurrency — успешный contention test, не пропущенная SQL ветка.
|
||||
|
||||
GRE/Filters20specs:52 unique E2E passed, skipped0/flaky0, пользовательские screenshots не перезаписывались. Дополнительная IPv6 UDP/source-worker SQL в mm_accept_144 первоначально упала ERR_MODULE_NOT_FOUND на src/db/index.js. Source worker не получал достаточный TS resolver из parent. Добавлен traffic-flow-worker-bootstrap.mjs, регистрирующий tsx внутри worker; dev factory использует его, production .js entry сохранён. Вариант source/compiled выбирается явно в отдельной приёмке. Backend build и4 shutdown checks прошли.
|
||||
|
||||
Повтор source-bootstrap и compiled: по2 реальным UDP datagrams,6 SQL flow rows,25200bytes/42packets minute и7200bytes/12packets Internet hour/day, shutdown acknowledgement. Это synthetic IPv6 payload по local IPv4 UDP, публичный IPv6 WAN не проверялся. Первая повторная all-profile attempt не стартовала из-за неправильного mount gre222-checks в runner: namespace cleanup сработал; исправлено на regression222-checks, свежая БД и25 профилей после worker fix passed. Все собственные DB/roles удалены.
|
||||
|
||||
Backend ux-regression222 compiled1056/source492 matched, healthy; frontend ux-routing218 сохранён. Real Portal JWT:6 API (servers/GRE/BGP/OSPF/flow settings/scheduler)200, network failures0; Traffic/Data collection UI1440/320 —4 smoke cases без page errors/mutations. Изменения не применяли native network configuration и не меняли пароли. Последняя полная UI-regression192 не объявляется повторённой: текущая UI52 профильная. Этап12.5 открыт в пределах матрицы.
|
||||
|
||||
Протоколы: [backend25](ux-ui/acceptance/regression222-backend-2026-10-14.json), [UI52](ux-ui/acceptance/regression222-ui-2026-10-14.json), [disabled33](ux-ui/acceptance/optional222-152-result.json), [months5](ux-ui/acceptance/optional222-149-result.json), [initial worker failure](ux-ui/acceptance/optional222-144-initial-failure.json), [source](ux-ui/acceptance/optional222-144-source-bootstrap-result.json), [compiled](ux-ui/acceptance/optional222-144-compiled-result.json), [build](ux-ui/acceptance/regression222-build-proof-2026-10-14.json), [deployment](ux-ui/acceptance/regression222-deployment-2026-10-14.json), [live](ux-ui/acceptance/regression222-live-2026-10-14.json). Следующий223 — устранить устаревшие краткие статусы в документах и дать компактный актуальный остаток по группам, сохранив историю.
|
||||
|
||||
## 12.5.221 — native identity GRE без выдуманных fallback (2026-10-14)
|
||||
|
||||
Общий readGreNativeRows валидирует коллекцию, строковые поля, native .id/name, blank/whitespace IDs, duplicate ID и duplicate normalized names. API/config mapper и alert source используют один boundary. mapGreLive больше не создаёт gre-index IDs/names для повреждённых rows. Корректные .id и имена со спецсимволами сохранены. Неполный API catalog передаёт per-device failure, snapshot source сообщает GRE error, BGP observations сохраняются.
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
# Оставшаяся внешняя приёмка — 2026-10-13
|
||||
|
||||
Актуальное продолжение 2026-10-14: блок221 завершён. GRE API/config/snapshot source отклоняют missing/duplicate native ID/name и повреждённые records, fallback identity удалены. Local13/flags49, configSync7 и production22 прошли; false observed revisions не добавляются. Whole actual source2own GRE/UI passed, own tunnels/DB/roles удалены. Первичный native500104.165.244.7 сохранён; причина неизвестна. Backend ux-gre221/compiled1056/source490 matched, frontend ux-routing218. Следующий222 — общая backend регрессия в собственных PostgreSQL DB и профильный GRE UI. Этап12.5 открыт.
|
||||
Актуальное продолжение 2026-10-14: блок222 завершён. Общая backend регрессия25 после worker fix и GRE/Filters E2E52 прошли. Отдельно SQL disabled33/months5; source+compiled IPv6 UDP worker6rows/aggregates/shutdown passed. Dev worker получил собственный tsx bootstrap; production worker path сохранён. Own DB/roles удалены. Backend ux-regression222/compiled1056/source492 matched, frontend ux-routing218. Live API6/UI4 passed. Следующий223 — согласование текущего плана, статусов и укрупнённой матрицы остатка. Этап12.5 открыт.
|
||||
|
||||
Это актуальная матрица после 12.5.221. Исторические записи сохраняют версии и ограничения на момент выполнения; поздние проверки ниже уточняют их. Этап 12.5 открыт. Успех в двух CHR и одном backend не означает приёмку всех конфигураций, интеграций или полной регрессии.
|
||||
Это актуальная матрица после 12.5.222. Исторические записи сохраняют версии и ограничения на момент выполнения; поздние проверки ниже уточняют их. Этап 12.5 открыт. Успех в двух CHR и одном backend не означает приёмку всех конфигураций, интеграций или полной регрессии.
|
||||
|
||||
Стенд: Debian13/Compose, PostgreSQL18.6, два CHR RouterOS7.24.5. Backend `ux-gre221`, frontend `ux-routing218`; production lab с195 использует AUTH_REQUIRED=true и Portal1.3.1. Подписанные JWT/RBAC проверялись в изолированных процессах. Все собственные объекты112 удалены, исходные13 коллекций×2 (включая logging/certificates/files/routes) проверены; пароли не менялись.
|
||||
Стенд: Debian13/Compose, PostgreSQL18.6, два CHR RouterOS7.24.5. Backend `ux-regression222`, frontend `ux-routing218`; production lab с195 использует AUTH_REQUIRED=true и Portal1.3.1. Подписанные JWT/RBAC проверялись в изолированных процессах. Все собственные объекты112 удалены, исходные13 коллекций×2 (включая logging/certificates/files/routes) проверены; пароли не менялись.
|
||||
|
||||
| Раздел | Подтверждено | Осталось / условие завершения |
|
||||
| --- | --- | --- |
|
||||
@@ -1529,3 +1529,7 @@ BGP/OSPF contrast: baseline22/fixed104 cells0 violations; E2E22 и real UI8 pass
|
||||
## 12.5.221 — GRE native identity (2026-10-14)
|
||||
|
||||
Общий identity boundary предотвращает fallback IDs/names и false config revisions. Local13/flags49, production22 и real source/API/UI passed; own objects удалены. Первичный500 сохранён, причина неизвестна. Подробности и границы — [журнал](ux-ui-progress.md). Backend ux-gre221, frontend ux-routing218; следующий222 — общая backend/профильная UI регрессия.
|
||||
|
||||
## 12.5.222 — backend/worker регрессия (2026-10-14)
|
||||
|
||||
Backend25/UI52, disabled33/months5 и оба IPv6 UDP/SQL worker режима прошли; own DB/roles удалены. Dev bootstrap исправлен, production entry сохранён. Подробности и границы — [журнал](ux-ui-progress.md). Backend ux-regression222, frontend ux-routing218; следующий223 — актуализация матрицы/статусов.
|
||||
+14
-1
@@ -1,6 +1,6 @@
|
||||
# Этап 12: итоговая приёмка UX/UI
|
||||
|
||||
Актуальное продолжение 2026-10-14: блок221 завершён. GRE API/config/snapshot source отклоняют missing/duplicate native ID/name и повреждённые records, fallback identity удалены. Local13/flags49, configSync7 и production22 прошли; false observed revisions не добавляются. Whole actual source2own GRE/UI passed, own tunnels/DB/roles удалены. Первичный native500104.165.244.7 сохранён; причина неизвестна. Backend ux-gre221/compiled1056/source490 matched, frontend ux-routing218. Следующий222 — общая backend регрессия в собственных PostgreSQL DB и профильный GRE UI. Этап12.5 открыт.
|
||||
Актуальное продолжение 2026-10-14: блок222 завершён. Общая backend регрессия25 после worker fix и GRE/Filters E2E52 прошли. Отдельно SQL disabled33/months5; source+compiled IPv6 UDP worker6rows/aggregates/shutdown passed. Dev worker получил собственный tsx bootstrap; production worker path сохранён. Own DB/roles удалены. Backend ux-regression222/compiled1056/source492 matched, frontend ux-routing218. Live API6/UI4 passed. Следующий223 — согласование текущего плана, статусов и укрупнённой матрицы остатка. Этап12.5 открыт.
|
||||
|
||||
План: [ux-ui-plan.md](ux-ui-plan.md). Фактические результаты: [ux-ui-progress.md](ux-ui-progress.md). Подготовлен после сводных проверок 11Б; завершение каждого блока требует локального коммита без push.
|
||||
|
||||
@@ -4002,3 +4002,16 @@ Backend ux-gre221 compiled1056/source490 matched, healthy; frontend ux-routing21
|
||||
|
||||
Протоколы: [baseline](ux-ui/acceptance/gre221-baseline.json), [fixed](ux-ui/acceptance/gre221-fixed.json), [build](ux-ui/acceptance/gre221-build-proof-2026-10-14.json), [deployment](ux-ui/acceptance/gre221-deployment-2026-10-14.json), [initial500/diagnostics](ux-ui/acceptance/gre221-initial-native-failure-2026-10-14.json), [whole actual source/UI/cleanup](ux-ui/acceptance/gre221-native-live-2026-10-14.json). Следующий222 — общая backend регрессия в собственных PostgreSQL DB (без main env/DB) и профильный GRE/Filters UI после общего reader.
|
||||
|
||||
|
||||
## 12.5.222 — общая регрессия и исправление dev NetFlow worker (2026-10-14)
|
||||
|
||||
После общих GRE catalog/config/alert readers выполнены25 backend profiles в собственной PostgreSQL с NOSUPERUSER/NOCREATEDB/NOCREATEROLE/NOBYPASSRLS. Test image не содержал /app/.env или /app/backend/.env; main DSN не копировался. По специальным namespace guards дополнительно выполнены33 disabled API/SQL checks (Home/Jump/Exit, bigint positive control, native contacts0) в mm_accept_152 и5 календарных SQL checks в mm_accept_149. Контроль skip/release/recovery concurrency — успешный contention test, не пропущенная SQL ветка.
|
||||
|
||||
GRE/Filters20specs:52 unique E2E passed, skipped0/flaky0, пользовательские screenshots не перезаписывались. Дополнительная IPv6 UDP/source-worker SQL в mm_accept_144 первоначально упала ERR_MODULE_NOT_FOUND на src/db/index.js. Source worker не получал достаточный TS resolver из parent. Добавлен traffic-flow-worker-bootstrap.mjs, регистрирующий tsx внутри worker; dev factory использует его, production .js entry сохранён. Вариант source/compiled выбирается явно в отдельной приёмке. Backend build и4 shutdown checks прошли.
|
||||
|
||||
Повтор source-bootstrap и compiled: по2 реальным UDP datagrams,6 SQL flow rows,25200bytes/42packets minute и7200bytes/12packets Internet hour/day, shutdown acknowledgement. Это synthetic IPv6 payload по local IPv4 UDP, публичный IPv6 WAN не проверялся. Первая повторная all-profile attempt не стартовала из-за неправильного mount gre222-checks в runner: namespace cleanup сработал; исправлено на regression222-checks, свежая БД и25 профилей после worker fix passed. Все собственные DB/roles удалены.
|
||||
|
||||
Backend ux-regression222 compiled1056/source492 matched, healthy; frontend ux-routing218 сохранён. Real Portal JWT:6 API (servers/GRE/BGP/OSPF/flow settings/scheduler)200, network failures0; Traffic/Data collection UI1440/320 —4 smoke cases без page errors/mutations. Изменения не применяли native network configuration и не меняли пароли. Последняя полная UI-regression192 не объявляется повторённой: текущая UI52 профильная. Этап12.5 открыт в пределах матрицы.
|
||||
|
||||
Протоколы: [backend25](ux-ui/acceptance/regression222-backend-2026-10-14.json), [UI52](ux-ui/acceptance/regression222-ui-2026-10-14.json), [disabled33](ux-ui/acceptance/optional222-152-result.json), [months5](ux-ui/acceptance/optional222-149-result.json), [initial worker failure](ux-ui/acceptance/optional222-144-initial-failure.json), [source](ux-ui/acceptance/optional222-144-source-bootstrap-result.json), [compiled](ux-ui/acceptance/optional222-144-compiled-result.json), [build](ux-ui/acceptance/regression222-build-proof-2026-10-14.json), [deployment](ux-ui/acceptance/regression222-deployment-2026-10-14.json), [live](ux-ui/acceptance/regression222-live-2026-10-14.json). Следующий223 — устранить устаревшие краткие статусы в документах и дать компактный актуальный остаток по группам, сохранив историю.
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# Тестовый сервер UX/UI — 2026-10-10
|
||||
|
||||
Актуальное продолжение 2026-10-14: блок221 завершён. GRE API/config/snapshot source отклоняют missing/duplicate native ID/name и повреждённые records, fallback identity удалены. Local13/flags49, configSync7 и production22 прошли; false observed revisions не добавляются. Whole actual source2own GRE/UI passed, own tunnels/DB/roles удалены. Первичный native500104.165.244.7 сохранён; причина неизвестна. Backend ux-gre221/compiled1056/source490 matched, frontend ux-routing218. Следующий222 — общая backend регрессия в собственных PostgreSQL DB и профильный GRE UI. Этап12.5 открыт.
|
||||
Актуальное продолжение 2026-10-14: блок222 завершён. Общая backend регрессия25 после worker fix и GRE/Filters E2E52 прошли. Отдельно SQL disabled33/months5; source+compiled IPv6 UDP worker6rows/aggregates/shutdown passed. Dev worker получил собственный tsx bootstrap; production worker path сохранён. Own DB/roles удалены. Backend ux-regression222/compiled1056/source492 matched, frontend ux-routing218. Live API6/UI4 passed. Следующий223 — согласование текущего плана, статусов и укрупнённой матрицы остатка. Этап12.5 открыт.
|
||||
|
||||
| Параметр | Проверенное состояние |
|
||||
| --- | --- |
|
||||
@@ -2342,3 +2342,7 @@ BGP/OSPF contrast: baseline22/fixed104 cells0 violations; E2E22 и real UI8 pass
|
||||
## 12.5.221 — GRE native identity (2026-10-14)
|
||||
|
||||
Общий identity boundary предотвращает fallback IDs/names и false config revisions. Local13/flags49, production22 и real source/API/UI passed; own objects удалены. Первичный500 сохранён, причина неизвестна. Подробности и границы — [журнал](ux-ui-progress.md). Backend ux-gre221, frontend ux-routing218; следующий222 — общая backend/профильная UI регрессия.
|
||||
|
||||
## 12.5.222 — backend/worker регрессия (2026-10-14)
|
||||
|
||||
Backend25/UI52, disabled33/months5 и оба IPv6 UDP/SQL worker режима прошли; own DB/roles удалены. Dev bootstrap исправлен, production entry сохранён. Подробности и границы — [журнал](ux-ui-progress.md). Backend ux-regression222, frontend ux-routing218; следующий223 — актуализация матрицы/статусов.
|
||||
@@ -0,0 +1,20 @@
|
||||
{
|
||||
"date": "2026-10-14",
|
||||
"block": "12.5.222",
|
||||
"database": "mm_accept_144_1791920520902",
|
||||
"script": "traffic-flow-ipv6-pipeline.test.ts",
|
||||
"passed": true,
|
||||
"workerMode": "compiled",
|
||||
"knownChecks": null,
|
||||
"udpSqlMetrics": {
|
||||
"udpDatagramsReceived": 2,
|
||||
"rawRows": 6,
|
||||
"allTrafficBytes": 25200,
|
||||
"allTrafficPackets": 42,
|
||||
"internetFactsBytes": 7200,
|
||||
"internetFactsPackets": 12,
|
||||
"workerShutdownAcknowledged": true,
|
||||
"minuteHourDayTotalsPassed": true
|
||||
},
|
||||
"ownedDatabaseAndRoleRemoved": true
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"date": "2026-10-14",
|
||||
"block": "12.5.222",
|
||||
"database": "mm_accept_144_1791919769374",
|
||||
"script": "traffic-flow-ipv6-pipeline.test.ts",
|
||||
"passed": false,
|
||||
"errorName": "Error",
|
||||
"exitCode": 1
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
{
|
||||
"date": "2026-10-14",
|
||||
"block": "12.5.222",
|
||||
"database": "mm_accept_144_1791920508613",
|
||||
"script": "traffic-flow-ipv6-pipeline.test.ts",
|
||||
"passed": true,
|
||||
"workerMode": "source-bootstrap",
|
||||
"knownChecks": null,
|
||||
"udpSqlMetrics": {
|
||||
"udpDatagramsReceived": 2,
|
||||
"rawRows": 6,
|
||||
"allTrafficBytes": 25200,
|
||||
"allTrafficPackets": 42,
|
||||
"internetFactsBytes": 7200,
|
||||
"internetFactsPackets": 12,
|
||||
"workerShutdownAcknowledged": true,
|
||||
"minuteHourDayTotalsPassed": true
|
||||
},
|
||||
"ownedDatabaseAndRoleRemoved": true
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"date": "2026-10-14",
|
||||
"block": "12.5.222",
|
||||
"database": "mm_accept_149_1791919762284",
|
||||
"script": "traffic-flow-month.test.ts",
|
||||
"passed": true,
|
||||
"knownChecks": 5,
|
||||
"ownedDatabaseAndRoleRemoved": true
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"date": "2026-10-14",
|
||||
"block": "12.5.222",
|
||||
"database": "mm_accept_152_1791919749449",
|
||||
"script": "network-disabled-server.test.ts",
|
||||
"passed": true,
|
||||
"knownChecks": 33,
|
||||
"ownedDatabaseAndRoleRemoved": true
|
||||
}
|
||||
@@ -0,0 +1,191 @@
|
||||
{
|
||||
"date": "2026-10-14",
|
||||
"block": "12.5.222",
|
||||
"scope": "full backend profile list on owned isolated PostgreSQL; no production DSN",
|
||||
"database": "mm_accept_166_1791920873950",
|
||||
"profiles": [
|
||||
{
|
||||
"profile": "test:probes",
|
||||
"passed": true,
|
||||
"durationMs": 25206,
|
||||
"skippedLineCount": 1,
|
||||
"unavailableSqlBranches": []
|
||||
},
|
||||
{
|
||||
"profile": "test:exec",
|
||||
"passed": true,
|
||||
"durationMs": 6620,
|
||||
"skippedLineCount": 1,
|
||||
"unavailableSqlBranches": []
|
||||
},
|
||||
{
|
||||
"profile": "test:alert-engine",
|
||||
"passed": true,
|
||||
"durationMs": 22308,
|
||||
"skippedLineCount": 0,
|
||||
"unavailableSqlBranches": []
|
||||
},
|
||||
{
|
||||
"profile": "test:alerts-telegram",
|
||||
"passed": true,
|
||||
"durationMs": 15324,
|
||||
"skippedLineCount": 10,
|
||||
"unavailableSqlBranches": []
|
||||
},
|
||||
{
|
||||
"profile": "test:auth",
|
||||
"passed": true,
|
||||
"durationMs": 11329,
|
||||
"skippedLineCount": 0,
|
||||
"unavailableSqlBranches": []
|
||||
},
|
||||
{
|
||||
"profile": "test:wireguard",
|
||||
"passed": true,
|
||||
"durationMs": 12454,
|
||||
"skippedLineCount": 1,
|
||||
"unavailableSqlBranches": []
|
||||
},
|
||||
{
|
||||
"profile": "test:ipsec",
|
||||
"passed": true,
|
||||
"durationMs": 17164,
|
||||
"skippedLineCount": 0,
|
||||
"unavailableSqlBranches": []
|
||||
},
|
||||
{
|
||||
"profile": "test:traffic-rate",
|
||||
"passed": true,
|
||||
"durationMs": 49953,
|
||||
"skippedLineCount": 1,
|
||||
"unavailableSqlBranches": []
|
||||
},
|
||||
{
|
||||
"profile": "test:traffic-flow",
|
||||
"passed": true,
|
||||
"durationMs": 64980,
|
||||
"skippedLineCount": 2,
|
||||
"unavailableSqlBranches": [
|
||||
"Monthly SQL: skip (requires an owned isolated database)",
|
||||
"IPv6 UDP/worker/SQL: skip (requires an owned isolated database)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"profile": "test:users",
|
||||
"passed": true,
|
||||
"durationMs": 7994,
|
||||
"skippedLineCount": 0,
|
||||
"unavailableSqlBranches": []
|
||||
},
|
||||
{
|
||||
"profile": "test:pg",
|
||||
"passed": true,
|
||||
"durationMs": 10211,
|
||||
"skippedLineCount": 0,
|
||||
"unavailableSqlBranches": []
|
||||
},
|
||||
{
|
||||
"profile": "test:backups",
|
||||
"passed": true,
|
||||
"durationMs": 9910,
|
||||
"skippedLineCount": 8,
|
||||
"unavailableSqlBranches": []
|
||||
},
|
||||
{
|
||||
"profile": "test:scheduler",
|
||||
"passed": true,
|
||||
"durationMs": 6277,
|
||||
"skippedLineCount": 5,
|
||||
"unavailableSqlBranches": []
|
||||
},
|
||||
{
|
||||
"profile": "test:live-maps",
|
||||
"passed": true,
|
||||
"durationMs": 27466,
|
||||
"skippedLineCount": 0,
|
||||
"unavailableSqlBranches": []
|
||||
},
|
||||
{
|
||||
"profile": "test:ospf-optimizer",
|
||||
"passed": true,
|
||||
"durationMs": 7546,
|
||||
"skippedLineCount": 1,
|
||||
"unavailableSqlBranches": []
|
||||
},
|
||||
{
|
||||
"profile": "test:recursive-routes",
|
||||
"passed": true,
|
||||
"durationMs": 4080,
|
||||
"skippedLineCount": 0,
|
||||
"unavailableSqlBranches": []
|
||||
},
|
||||
{
|
||||
"profile": "test:config-sync",
|
||||
"passed": true,
|
||||
"durationMs": 17701,
|
||||
"skippedLineCount": 1,
|
||||
"unavailableSqlBranches": [
|
||||
"network-disabled-server.test.ts: invalid IDs passed; own SQL/disabled API checks skipped (MMAPP_OWN_TEST_DB required)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"profile": "test:ros-file",
|
||||
"passed": true,
|
||||
"durationMs": 1600,
|
||||
"skippedLineCount": 1,
|
||||
"unavailableSqlBranches": []
|
||||
},
|
||||
{
|
||||
"profile": "test:containers",
|
||||
"passed": true,
|
||||
"durationMs": 6582,
|
||||
"skippedLineCount": 0,
|
||||
"unavailableSqlBranches": []
|
||||
},
|
||||
{
|
||||
"profile": "test:certificates",
|
||||
"passed": true,
|
||||
"durationMs": 12248,
|
||||
"skippedLineCount": 3,
|
||||
"unavailableSqlBranches": []
|
||||
},
|
||||
{
|
||||
"profile": "test:netflow-settings",
|
||||
"passed": true,
|
||||
"durationMs": 4695,
|
||||
"skippedLineCount": 0,
|
||||
"unavailableSqlBranches": []
|
||||
},
|
||||
{
|
||||
"profile": "test:netflow-purge",
|
||||
"passed": true,
|
||||
"durationMs": 2613,
|
||||
"skippedLineCount": 0,
|
||||
"unavailableSqlBranches": []
|
||||
},
|
||||
{
|
||||
"profile": "test:evolution",
|
||||
"passed": true,
|
||||
"durationMs": 5168,
|
||||
"skippedLineCount": 1,
|
||||
"unavailableSqlBranches": []
|
||||
},
|
||||
{
|
||||
"profile": "test:system-database",
|
||||
"passed": true,
|
||||
"durationMs": 19916,
|
||||
"skippedLineCount": 9,
|
||||
"unavailableSqlBranches": []
|
||||
},
|
||||
{
|
||||
"profile": "test:server-privacy",
|
||||
"passed": true,
|
||||
"durationMs": 5873,
|
||||
"skippedLineCount": 0,
|
||||
"unavailableSqlBranches": []
|
||||
}
|
||||
],
|
||||
"passed": true,
|
||||
"ownedDatabaseAndRoleRemoved": true,
|
||||
"coverageNote": "Three special namespace SQL branches replayed separately; contention skip/release/recovery is a successful check"
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
{
|
||||
"date": "2026-10-14",
|
||||
"block": "12.5.222",
|
||||
"compiled": {
|
||||
"matched": 1056,
|
||||
"missing": 0,
|
||||
"different": 0
|
||||
},
|
||||
"source": [
|
||||
{
|
||||
"kind": "backend",
|
||||
"matched": 492
|
||||
}
|
||||
],
|
||||
"rootEnvExists": false,
|
||||
"backendEnvExists": false,
|
||||
"fullProfilesAfterFix": 25,
|
||||
"uiCases": 52,
|
||||
"workerShutdownChecks": 4,
|
||||
"specialSqlCases": {
|
||||
"networkDisabled": 33,
|
||||
"calendarMonths": 5,
|
||||
"ipv6PipelineModes": [
|
||||
"source-bootstrap",
|
||||
"compiled"
|
||||
]
|
||||
},
|
||||
"runnerPathFailure": "Repeat attempt initially mounted non-existent gre222-checks; owned DB/role trap cleaned up, corrected to regression222-checks and fresh full25 passed"
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
{
|
||||
"date": "2026-10-14",
|
||||
"block": "12.5.222",
|
||||
"backendSourceMatched": 492,
|
||||
"compiledMatched": 1056,
|
||||
"frontendChanged": false,
|
||||
"services": {
|
||||
"backend": {
|
||||
"image": "mmapp-test/backend:ux-regression222",
|
||||
"imageId": "sha256:13baf68195251a134286474aa86847d86d6dfc11ce4d90e6b8c7f0526abed285",
|
||||
"running": true,
|
||||
"health": "healthy"
|
||||
},
|
||||
"frontend": {
|
||||
"image": "mmapp-test/frontend:ux-routing218",
|
||||
"imageId": "sha256:ec658b9da88c19d60987be5bfc0c15fb339a0310d7a42dc761b40a70a3428c5a",
|
||||
"running": true,
|
||||
"health": null
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,67 @@
|
||||
{
|
||||
"date": "2026-10-14",
|
||||
"block": "12.5.222",
|
||||
"backend": "ux-regression222",
|
||||
"frontend": "ux-routing218",
|
||||
"apiCases": [
|
||||
{
|
||||
"path": "/api/servers",
|
||||
"status": 200,
|
||||
"failures": null
|
||||
},
|
||||
{
|
||||
"path": "/api/gre/tunnels",
|
||||
"status": 200,
|
||||
"failures": 0
|
||||
},
|
||||
{
|
||||
"path": "/api/bgp/catalog",
|
||||
"status": 200,
|
||||
"failures": 0
|
||||
},
|
||||
{
|
||||
"path": "/api/ospf/catalog",
|
||||
"status": 200,
|
||||
"failures": 0
|
||||
},
|
||||
{
|
||||
"path": "/api/traffic/flow/settings",
|
||||
"status": 200,
|
||||
"failures": null
|
||||
},
|
||||
{
|
||||
"path": "/api/scheduler/status",
|
||||
"status": 200,
|
||||
"failures": null
|
||||
}
|
||||
],
|
||||
"ui": [
|
||||
{
|
||||
"width": 1440,
|
||||
"path": "/traffic",
|
||||
"pageErrors": 0,
|
||||
"mutationRequests": 0
|
||||
},
|
||||
{
|
||||
"width": 1440,
|
||||
"path": "/data-collection",
|
||||
"pageErrors": 0,
|
||||
"mutationRequests": 0
|
||||
},
|
||||
{
|
||||
"width": 320,
|
||||
"path": "/traffic",
|
||||
"pageErrors": 0,
|
||||
"mutationRequests": 0
|
||||
},
|
||||
{
|
||||
"width": 320,
|
||||
"path": "/data-collection",
|
||||
"pageErrors": 0,
|
||||
"mutationRequests": 0
|
||||
}
|
||||
],
|
||||
"realPortalJWT": true,
|
||||
"apiMocks": false,
|
||||
"scope": "Healthy runtime API and UI smoke after worker fix; actual UDP worker SQL proof is isolated"
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
{
|
||||
"date": "2026-10-14",
|
||||
"block": "12.5.222",
|
||||
"scope": "20 GRE/Filters specs through live HTTP fixtures; user screenshots not rewritten",
|
||||
"stats": {
|
||||
"startTime": "2026-10-13T19:13:21.889Z",
|
||||
"duration": 128028.369,
|
||||
"expected": 52,
|
||||
"skipped": 0,
|
||||
"unexpected": 0,
|
||||
"flaky": 0
|
||||
},
|
||||
"uniqueCases": 52,
|
||||
"apiMocked": true
|
||||
}
|
||||
Reference in new issue
Block a user