Pular para o conteúdo
TipoDesbloqueado
EstágioGanho rápido
DificuldadeSimples
TarefaMonitorar serviço
ParaEquipes de desenvolvimento
ParaDevOps e infra
ServiçosPipe
Por que HoodyHTTP-nativo
Por que HoodyMultiplayer por padrão
TipoDesbloqueado
EstágioGanho rápido
DificuldadeSimples
TarefaMonitorar serviço
ParaEquipes de desenvolvimento
ParaDevOps e infra
ServiçosPipe
Por que HoodyHTTP-nativo
Por que HoodyMultiplayer por padrão
TipoDesbloqueado
EstágioGanho rápido
DificuldadeSimples
TarefaMonitorar serviço
ParaEquipes de desenvolvimento
ParaDevOps e infra
ServiçosPipe
Por que HoodyHTTP-nativo
Por que HoodyMultiplayer por padrão
TipoDesbloqueado
EstágioGanho rápido
DificuldadeSimples
TarefaMonitorar serviço
ParaEquipes de desenvolvimento
ParaDevOps e infra
ServiçosPipe
Por que HoodyHTTP-nativo
Por que HoodyMultiplayer por padrão
PIPE · ?PROGRESS · SSE

Uma barra de progresso que seu chefe pode acompanhar sem entrar

Você está rodando uma migração de oito horas. Cinco pessoas querem ver o status sem consumir um slot de receiver nem interromper o stream. Anexe ?progress à URL do pipe. Quem abrir recebe um dashboard HTML ao vivo — bytes transferidos, velocidade atual, ETA, transições de estado. A migração roda à velocidade total, independente de quantos olhos estiverem assistindo.

Como um query parameter vira um dashboard ao vivo

?progress é uma leitura separada no caminho do pipe que escuta o estado da transferência sem reivindicar um slot de receiver. A migração não percebe. O navegador vê um dashboard HTML; o curl vê um feed SSE limpo.

TIMELINE DE ESPECTADORESZERO SLOTS DE RECEIVER
T+0 min
BOSS OPENS URL

Ela cola a URL do pipe com ?progress no navegador do celular. O dashboard HTML aparece na hora — state: waiting, 0% — sem instalação, sem login, sem consumir um slot de receiver.

T+22 min
STREAM IS LIVE

O SSE envia um evento state: streaming. A barra de progresso salta para 22%, os bytes sobem, o MB/s estabiliza em 118. O dashboard se atualiza sozinho a cada 250 ms sem um único reload da página.

T+4 h
BOSS GOES TO BED

Ela fecha a aba. A conexão de espectador dela cai. A migração nem percebe — ela nunca esteve no caminho dos dados. O sender e seu único receiver de verdade seguem em frente.

T+8 h
WAKES TO 100%

Ela reabre a URL ao amanhecer. O dashboard mostra um evento done: 7,6 GB transferidos, 8h 2m, sem erros. O estado no servidor sobrevive ao refresh — quem chega atrasado sempre vê a linha final.

T+8h 4m
SENDS THE ACK

Ela encaminha a URL para o Slack do time. Três engenheiros abrem e veem o mesmo estado done. Sem thread de status para fechar, sem painel do Grafana para desfavoritar. Uma URL, cinco testemunhas, zero interrupções.

spectate.sh
# 1. Sender — eight-hour migration. Same as always.
tar czf - /var/lib/postgres | curl -T - "$PIPE/api/v1/pipe/migration"

# 2. Receiver — the only client that matters for backpressure.
curl "$PIPE/api/v1/pipe/migration" | tar xzf - -C /restore

# 3. Boss opens the URL on her phone. HTML dashboard. No setup.
# => https://pipe.hoody.com/api/v1/pipe/migration?progress

# 4. You want SSE for a Slack bot? Same URL, different Accept.
curl -N -H "Accept: text/event-stream" \
  "$PIPE/api/v1/pipe/migration?progress" \
  | grep -E '^event: (progress|state|done)'
# event: state    \n data: ["state":"streaming","receivers":1]
# event: progress \n data: ["bytes":5046464512,"mbps":118,"etaSec":840]
# event: done     \n data: ["bytes":8160000000,"durationSec":28800]

Três tipos de evento SSE. state para transições (idle → waiting → streaming → complete), progress a cada 250ms enquanto bytes fluem (bytesTransferred, velocidade, ETA), done uma vez no final com estatísticas finais. Até cinquenta espectadores por caminho, TTL de conexão de trinta minutos, linger de trinta segundos pós-transferência para que retardatários vejam a linha de sucesso.

Três audiências, uma URL

O mesmo endpoint ?progress serve uma aba de navegador, um pipeline curl e uma página de status que faz polling em segundo plano. Nenhum deles desacelera a transferência.

Assistir à migração tem URL própria. A migração não percebe.

0 SLOTS DE RECEIVER USADOSATÉ 50 ESPECTADORES POR CAMINHO
MIGRAÇÃO1 sender, 1 receiver, banda total
ESPECTADORES12 olhos do chefe no dashboard, 0 de backpressure
  • sem canal de Slack para babá
  • sem dashboard de Grafana para ligar
  • sem endpoint de progresso para escrever

O que isso substitui

Todo time tem um jeito de responder 'a quantas anda?'. A maioria desses jeitos custa um serviço para rodar, um dashboard para ligar ou um canal de chat para vigiar. Um query parameter na URL do pipe não custa nada disso.

  • Updates no canal #migrations do SlackUm humano digitando porcentagens a cada cinco minutos
  • Dashboards do GrafanaUm exporter, um scrape do Prometheus, um painel para manter
  • Endpoints de progresso customizadosRota sob medida, schema sob medida, bug de retenção sob medida
  • Tmux-share por SSHAcesso ao bastion só para ver um número subir
  • Painéis de métrica do DatadogAgente por host e cobrança por métrica para uma transferência
  • Pings de 'já chegou?'Cinco colegas fazendo a mesma pergunta em threads diferentes

Mande a URL. Pare de mandar updates.

Leia os outros