# Operação e capacidade

O trabalho com os e-mails é feito pelo **worker** – um processo que percorre
as caixas de e-mail uma após a outra, chama os modelos e escreve os rascunhos. A
página **Operação** (operador, Instalação → Operação) mostra se há workers
suficientes em execução. Ela se atualiza a cada 30 segundos.

## O que a página mostra

**Capacidade** – um veredito em poucas palavras:

| Veredito | O que significa | O que fazer |
|---|---|---|
| a capacidade é suficiente | nenhum assistente está mais de cinco minutos atrasado em relação ao ritmo dele | nada |
| adicione um worker | algum assistente está mais de cinco minutos atrasado | aumente a simultaneidade ou inicie outro processo |
| nenhum worker em execução | nenhum worker deu sinal no último minuto | `docker compose ps` e os logs do serviço `worker` |

**Workers** – os processos em execução, a simultaneidade deles, quais sistemas
de e-mail atendem, qual caixa de e-mail estão atendendo agora e quando deram
sinal pela última vez.

**Verificações de e-mails atrasadas** – assistentes que passaram mais de um
minuto do horário previsto (identificados pela organização e pelo assistente,
nunca pelo endereço da caixa de e-mail).

**Fila de jobs** – quantos estão esperando e em andamento, e quantos foram
concluídos ou falharam nas últimas 24 horas. **Erros das últimas 24 horas** – o
que deu errado e onde.

## Como aumentar a capacidade

1. **Primeiro, aumente a simultaneidade** – no cartão **Configurações dos
   workers**, o campo “Verificações de e-mails simultâneas por processo” (1–50).
   Uma verificação de e-mails é, na maior parte, espera pelos e-mails e pelo
   modelo, então até um contêiner pequeno aguenta mais do que o padrão de 3. Os
   workers aplicam a alteração em segundos, sem reinício.
2. **Outro processo na mesma máquina**: quando o updater está rodando, informe o
   novo número em **Instalação → Instalação**, no cartão **Processos de
   worker** – sem precisar de terminal. Caso contrário, execute
   `./draften scale 2` no diretório da instalação (o número total, 1–16). As duas
   formas gravam o número no `.env` como `WORKER_REPLICAS`, então ele sobrevive
   também a uma atualização; `docker compose up --scale worker=N` duraria só até
   a próxima atualização.

Todos os processos de worker rodam na mesma máquina que a instalação; o banco de
dados não é acessível de fora.

Um novo worker aparece na página em segundos. Os workers dividem o trabalho
entre si pelo banco de dados: cada caixa de e-mail é atendida por um só, então
duas verificações nunca se encontram. Um processo que cai só atrasa aquela
caixa de e-mail até o bloqueio dela expirar.

O mesmo cartão define o **intervalo padrão de verificação de e-mails**
(60–86.400 s) para os assistentes sem intervalo próprio.

## Avançado

- `WORKER_PROVIDERS=google` (uma lista de `graph`, `google`) limita um processo a
  apenas alguns sistemas de e-mail – por exemplo, para que um provedor mais lento
  não atrase os outros.
- `WORKER_ID` dá nome a um processo no log (por padrão, hostname:pid).
- Uma verificação de e-mails que deixou trabalho para depois (o limite por
  verificação, mais de 200 mensagens novas) coloca o assistente de novo na fila
  na hora, então uma caixa de e-mail inundada se atualiza em rodadas.

Escalar é uma decisão humana; o draften nunca inicia workers sozinho.
