statuses update

This commit is contained in:
sanek5g
2026-06-24 18:58:35 +03:00
parent fdddacf534
commit 0a9bfd0799
39 changed files with 2099 additions and 12 deletions

View File

@@ -225,6 +225,8 @@ exchange: transcription_done (fanout)
└── queue: tagging
queue: final (default exchange, без binding)
queue: pipeline.status (default exchange — события стадий для фронта)
```
### Очереди
@@ -235,6 +237,55 @@ queue: final (default exchange, без binding)
| `analyse` | transcribe | analyse | Результат транскрипции |
| `tagging` | transcribe | tagging | Результат транскрипции |
| `final` | analyse/tagging | — | Итоговый результат |
| `pipeline.status` | все воркеры | backend | Стадии обработки (см. ниже) |
### Очередь `pipeline.status` (стадии)
Каждый воркер публикует JSON-события в очередь `pipeline.status` (переменная `STATUS_QUEUE`).
**Формат сообщения:**
```json
{
"task_id": "01KTN...",
"filename": "recording.wav",
"status": "pending",
"stage": "queued",
"error": "",
"timestamp": 1717843200
}
```
**Значения `status`:**
| status | Описание |
|----------------|-----------------|
| `pending` | ожидает |
| `in_progress` | в процессе |
| `done` | готово |
| `error` | ошибка |
**Значения `stage`:**
| stage | Кто публикует | Когда |
|-----------------|---------------|--------------------------------|
| `queued` | watcher | Задача отправлена в RabbitMQ |
| `transcribing` | transcribe | STT начат / ошибка Nexara |
| `analysing` | analyse | LLM-анализ начат / ошибка |
| `tagging` | tagging | Классификация начата / ошибка |
| `completed` | analyse/tagging | Оба воркера завершились |
**Типичная последовательность:**
```
pending/queued
→ in_progress/transcribing
→ in_progress/analysing (параллельно)
→ in_progress/tagging (параллельно)
→ done/completed
```
> Браузер не может подписаться на RabbitMQ напрямую. Нужен backend-consumer, который читает `pipeline.status` и отдаёт события через REST или WebSocket.
### Dead Letter
@@ -254,7 +305,7 @@ CREATE TABLE results (
analysis JSONB, -- результат analyse (Yandex LLM)
tagging JSONB, -- результат tagging (Yandex LLM)
metadata JSONB, -- file_path, segments, prompts, language, transcribed_at
status TEXT DEFAULT 'pending', -- pending | done
status TEXT NOT NULL DEFAULT 'pending', -- pending | in_progress | done | error
created_at TIMESTAMPTZ,
updated_at TIMESTAMPTZ
);
@@ -269,7 +320,7 @@ CREATE TABLE results (
| `filename` | оба | При сохранении своей части |
| `transcription` | analyse | При сохранении analysis |
| `metadata` | analyse | file_path, segments, prompts… |
| `status` | оба | `done` когда оба поля заполнены|
| `status` | оба | `in_progress` при старте; `done` когда оба поля заполнены; `error` при сбое |
### Просмотр данных
@@ -484,6 +535,7 @@ OUTPUT_EXCHANGE=transcription_done
ANALYSE_QUEUE=analyse
TAGGING_QUEUE=tagging
FINAL_QUEUE=final
STATUS_QUEUE=pipeline.status
PREFETCH=1
# Nexara (STT)
@@ -560,6 +612,35 @@ docker compose logs -f watcher transcribe analyse tagging
UI: http://localhost:15672 → Queues → `final`
### Развёртывание в k3s
Полная инструкция: **[k8s/README.md](k8s/README.md)**
Кратко:
```bash
# 1. секреты из .env
./k8s/prepare-secret.sh
# 2. каталог хранилища на ноде k3s
sudo mkdir -p /var/lib/audio-pipeline/storage/{incoming,processing,failed}
# 3. сборка образов и импорт в k3s
./k8s/build-images.sh
# 4. деплой
kubectl apply -k k8s/
# 5. проверка
kubectl -n audio-pipeline get pods
```
Загрузка файла на ноду:
```bash
sudo cp recording.wav /var/lib/audio-pipeline/storage/incoming/
```
---
## Логирование