v1.1.14: serviceId filter, svcShort displayName, descr, remove duplicate endpoint
This commit is contained in:
@@ -1,41 +1,39 @@
|
||||
# ⚠️ LEGACY — НЕАКТУАЛЬНО. Исторический документ.
|
||||
# Sonnet 4.6 — Round 2 Response
|
||||
|
||||
# Sonnet — ответ 27.07.2026 (v1.0.49, раунд 2)
|
||||
Дата: 2026-07-29
|
||||
|
||||
## Найденные баги
|
||||
## Ответы
|
||||
|
||||
### Баг #1: showStages() — ❌ для этапов в процессе
|
||||
Файл: `site/templates/index.html`
|
||||
Nubes возвращает `isSuccessful: false` для этапов «в процессе». Код:
|
||||
```javascript
|
||||
const icon=ok===true?'✅':ok===false?'❌':'⏳';
|
||||
```
|
||||
`false === false` → ❌. Должно быть ⏳.
|
||||
### 1. Фильтр serviceId ✅
|
||||
Добавить `if i.get("serviceId") != svc_id: continue` — безопасно.
|
||||
Tracker-fallback уже отфильтрован по svc_id, не сломается.
|
||||
Даже улучшит дедупликацию cloud_names.
|
||||
|
||||
Исправление: проверять `s.dtFinish`. Если нет → ⏳, если есть и `true` → ✅, если есть и `false` → ❌.
|
||||
### 2. Генерация 3 символов
|
||||
Надёжнее: `(Math.random() * 46656 | 0).toString(36).padStart(3, '0')`
|
||||
Ровно 3 символа, равномерно по 46 656 комбинациям.
|
||||
|
||||
### Баг #2: api_operations() — фильтр теряет новые инстансы
|
||||
Файлы: `site/routes/api_test.py` + `site/routes/main.py`
|
||||
После `tracker_add` (мгновенно in-memory) инстанс есть в трекере, но Nubes API ещё не обновил `explainedStatus` — инстанс имеет статус `"not created"`. Фильтр:
|
||||
```python
|
||||
and i.get("explainedStatus") not in ("deleted", "not created")
|
||||
```
|
||||
отбрасывает его. Инстанс есть в трекере, есть в ответе API — но статус "not created" → фильтр удаляет.
|
||||
### 3. descr
|
||||
Не нужно тащить через JS! `app_version` уже есть в той же функции.
|
||||
Одна строка: `"descr": f"created by autotest v{app_version}"`
|
||||
|
||||
Исправление: для tracked UID не применять фильтр `"not created"`. Добавлять отсутствующие из трекера напрямую.
|
||||
### 4. Пропущенный баг: stand-ключ трекера
|
||||
main.py → `stand_name(endpoint)`
|
||||
api_test.py → `get_stand()`
|
||||
Могут разойтись → tracker_add и tracker_list под разными ключами → creating инстансы не видны.
|
||||
|
||||
### Баг #3: Дублирующийся route
|
||||
`main_bp` зарегистрирован ПЕРВЫМ, `api_test_bp` — ВТОРЫМ. Оба определяют `GET /api/operations/<int:svc_id>`. Flask использует первое совпадение → `main.api_operations` вызывается, `api_test.api_operations` — никогда.
|
||||
### 5. Дубликат эндпоинта
|
||||
Удалить `/api/operations/{svc_id}` из api_test.py (строки 108-148).
|
||||
Недостижим, старый код, техдолг.
|
||||
|
||||
### Потенциальная проблема #4: Multi-worker gunicorn
|
||||
In-memory dict НЕ работает при >1 gunicorn worker. Один worker добавляет в свой `_data`, другой читает из своего. Если pythonk8s запускает >1 worker — ни одно решение не сработает.
|
||||
## Итоговый план исправлений
|
||||
|
||||
Нужно проверить логи пода на `Booting worker with pid`.
|
||||
|
||||
---
|
||||
|
||||
## Исправления (v1.0.50)
|
||||
|
||||
1. `showStages()`: использовать `dtFinish` этапа
|
||||
2. `api_operations()`: не фильтровать "not created" для tracked UID, добавлять сирот из трекера
|
||||
3. Убрать дублирующийся route
|
||||
| # | Файл | Что |
|
||||
|---|------|-----|
|
||||
| 1 | main.py:194 | `if i.get("serviceId") != svc_id: continue` |
|
||||
| 2 | main.py:227 | `"svcShort": detail.get("svcShort", "")` |
|
||||
| 3 | app.js:53 | `currentSvcShort = d.svcShort\|\|''` |
|
||||
| 4 | app.js:113-116 | Переписать `makeCreateDisplayName()` |
|
||||
| 5 | api_test.py:212 | `f"created by autotest v{app_version}"` |
|
||||
| 6 | api_test.py:108-148 | Удалить дубликат эндпоинта |
|
||||
| 7 | main.py + api_test.py | Унифицировать stand |
|
||||
|
||||
Reference in New Issue
Block a user