# Provoz a výkon

Práci s poštou dělá **worker** — proces, který postupně prochází schránky,
volá modely a píše koncepty. Stránka **Provoz** (provozovatel, Instalace →
Provoz) ukazuje, jestli jich běží dost. Obnovuje se každých 30 sekund.

## Co stránka ukazuje

**Kapacita** — verdikt jedním slovem:

| Verdikt | Co znamená | Co udělat |
|---|---|---|
| kapacita stačí | žádný asistent nezaostává za svým rytmem o víc než pět minut | nic |
| přidejte worker | některý asistent zaostává o víc než pět minut | zvednout souběžnost, nebo spustit další proces |
| žádný worker neběží | za poslední minutu se žádný worker neozval | `docker compose ps` a logy služby `worker` |

**Workery** — běžící procesy, jejich souběžnost, jaké poštovní systémy
obsluhují, kterou schránku právě drží a kdy se naposledy ozvaly.

**Zpožděné kontroly pošty** — asistenti, kteří jsou po svém termínu déle než
minutu (podle organizace a asistenta, nikdy podle adresy schránky).

**Fronta úloh** — kolik čeká, běží, a kolik jich za posledních 24 hodin doběhlo
nebo selhalo. **Chyby za 24 hodin** — co se kde pokazilo.

## Jak přidat výkon

1. **Nejdřív zvedněte souběžnost** — v kartě **Nastavení workerů** pole
   „Kontrol pošty najednou na proces“ (1–50). Kontrola pošty je hlavně čekání
   na poštu a model, takže i malý kontejner unese víc než výchozí 3. Změnu si
   workery vezmou do několika sekund, bez restartu.
2. **Další proces na stejném stroji**: do `.env` napište, kolik procesů má
   běžet celkem (`WORKER_REPLICAS=2`), a spusťte `docker compose up -d`. Číslo
   v `.env` přežije i aktualizaci; `--scale worker=N` by platilo jen do
   příštího `docker compose up`.
3. **Další stroj**: klon repozitáře, stejný `.env` a v něm `DATABASE_URL` na
   sdílenou databázi (port 3306 služby `db` musí být z toho stroje dostupný),
   pak `docker compose up -d --no-deps worker`.

Nový worker se na stránce objeví do několika sekund. Workery si práci dělí
přes databázi samy: každou schránku drží vždy jen jeden, takže se dvě kontroly
nikdy nepotkají. Proces, který spadne, zdrží jen tu jednu schránku, dokud jeho
zámek nevyprší.

V téže kartě nastavíte i **výchozí interval kontrol pošty** (60–86 400 s) pro
asistenty bez vlastního intervalu.

## Pokročilé

- `WORKER_PROVIDERS=google` (seznam `graph`, `google`) omezí proces jen na
  některé poštovní systémy — třeba aby pomalejší poskytovatel nezdržoval
  ostatní.
- `WORKER_ID` pojmenuje proces v logu (výchozí je hostname:pid).
- Kontrola pošty, která nechala práci na později (limit za kontrolu, víc než
  200 nových zpráv), zařadí asistenta hned znovu, takže zahlcená schránka se
  dožene po kolech.

O škálování rozhoduje člověk; draften sám žádné workery nespouští.
