feat(admin): честная длительность прогона + добор эмбеддингов
Разбор итогов массовой заливки показал в отладке «среднюю длительность прогона» в 2.8 часа там, где парсинг занимал 50 секунд: started_at пишется в момент постановки в очередь, а очередь из 173 источников разбирается часами. Теперь момент реального старта пишется отдельно (run_started_at, миграция 006), а схема отдаёт обе величины — сколько ждал очереди и сколько работал. Плюс scripts/ops/reembed_missing.py: документ попадает в корпус сразу, а вектор для L3 считает отдельная задача; когда worker-gpu или Ollama недоступны, эти задачи теряются и документ остаётся невидимым для семантического поиска. Скрипт находит faiss_id IS NULL и переотправляет пачками (dry-run по умолчанию) — сейчас таких 23 101 из 177 147. Документация: актуальные цифры корпуса, дубли при повторном прогоне, лимит OpenAlex, и главное — гипервизор .254 зафиксирован в DR-HA как самая широкая единая точка отказа (брокер, эмбеддинги, секреты и прокси на одном железе; подтверждено аварией 28.08). Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -625,7 +625,15 @@ def run_parser(self, source_id: int, run_id: int | None = None) -> dict[str, Any
|
||||
prog.stage = "fetch"
|
||||
prog.log("info", f"старт: {cfg['source_type']} q={cfg.get('query') or '—'} limit={cfg['limit']}")
|
||||
_write_run(
|
||||
run_id, status="running", celery_task_id=self.request.id, error=None, **prog.snapshot()
|
||||
run_id,
|
||||
status="running",
|
||||
celery_task_id=self.request.id,
|
||||
error=None,
|
||||
# Отдельно от started_at (постановка в очередь): при массовом запуске
|
||||
# между ними часы ожидания, и без этой отметки «длительность прогона»
|
||||
# в отладке показывала очередь, а не работу
|
||||
run_started_at=datetime.now(UTC),
|
||||
**prog.snapshot(),
|
||||
)
|
||||
|
||||
cancelled = False
|
||||
|
||||
Reference in New Issue
Block a user