4.7 KiB
Sonnet 4.6 — Полный анализ: параметризованные операции инстанса + поиск багов
Дата: 2026-07-30 Версия: v1.1.36
Контекст
Flask 3.0 + gunicorn + vanilla JS. Тестирует Nubes REST API.
PostgreSQL создался успешно. Но при попытке create_user — ошибка: параметры не были запрошены у пользователя, отправлен пустой {}.
🔴 Проблема 1: runOp() не показывает форму параметров для не-modify операций
Файл: /home/naeel/nubes/autotest/app-autotest/site/static/app.js, функция runOp(), строка 127:
function runOp(opName,opId){
if(busy) return;
stopPoll();
selectedOp={opId,opName,svcId:currentSvcId};
if(opName==='modify'){
showParams(opId,opName); // ← только modify показывает форму
}else{
// confirm and execute immediately
if(!confirm(`Запустить ${opName} для ${findInstName()}?`)) return;
executeOp({}); // ← пустые params → API ругается "Missing required parameter"
}
}
Проблема: PostgreSQL имеет много операций с параметрами:
create_user— нужен usernamedelete_user— нужен usernamecreate_database— нужны параметры БДdelete_database— нужны параметрыrestart— может иметь параметрыrecovery— параметры восстановленияcreate_backup— параметры бэкапа
Все они сейчас идут с executeOp({}) — пустые params.
Операции БЕЗ параметров (можно confirm → execute):
deletesuspendresumeredeployreconcile
Вопрос: Как универсально определить, нужны ли параметры для операции?
- Вариант А: проверять
cfsParamsв/api/operations/{svcId}— если есть params → показать форму - Вариант Б: список известных "безпараметровых" операций (delete/suspend/resume/redeploy/reconcile) — для них confirm, для остальных — showParams
- Вариант В: всегда показывать форму (showParams сам разберётся если params пустые)
🔴 Проблема 2: refreshInstances() ДОЛЖЕН обновлять список инстансов после create_user и подобных
После create_user инстанс не меняется, но список инстансов всё равно надо обновить (в UI могут быть связанные изменения). Сейчас refreshInstances() вызывается только при sd.status === 'OK'.
Файл: /home/naeel/nubes/autotest/app-autotest/site/static/app.js, executeOp polling (строка ~357):
if(sd.status==='OK'){
await refreshInstances(); // только при OK
}
Вопрос: Нужно ли вызывать refreshInstances при любом завершении (OK или FAIL)?
Полный аудит всех оставшихся проблем
Пожалуйста, прочитай ВСЕ файлы и найди ЛЮБЫЕ оставшиеся баги или неустойчивости:
Файлы для проверки:
/home/naeel/nubes/autotest/app-autotest/site/static/app.js— весь фронтенд/home/naeel/nubes/autotest/app-autotest/site/routes/api_test.py— бэкенд/home/naeel/nubes/autotest/app-autotest/site/routes/main.py— главная + /api/operations/home/naeel/nubes/autotest/app-autotest/site/api/http_client.py— HTTP-клиент/home/naeel/nubes/autotest/app-autotest/site/operations/get_params.py— параметры/home/naeel/nubes/autotest/app-autotest/site/templates/index.html— HTML шаблон
Что искать:
- Все места где параметры операций не запрашиваются у пользователя
- Все места где busy lock может застрять
- Необработанные ошибки (пустые catch, пропущенные исключения)
- Несоответствия между JS и бэкендом (разные имена полей, форматы)
- Проблемы с
currentSvcShort— где объявлена, где используется - Любые другие баги которые мы пропустили за 35+ версий