Ir al contenido
use-cases / a-progress-bar-your-boss-can-spectate / hero
PIPE · ?PROGRESS · SSE

Una barra de progreso que tu jefe puede observar sin unirse

Estás corriendo una migración de ocho horas. Cinco personas quieren ver el estado sin consumir un slot de receptor ni interrumpir el stream. Añade ?progress a la URL del pipe. Cualquiera que la abra obtiene un dashboard HTML en vivo — bytes transferidos, velocidad actual, ETA, transiciones de estado. La migración corre a velocidad máxima sin importar cuántos ojos estén mirando.

use-cases / a-progress-bar-your-boss-can-spectate / mechanism

Cómo el jefe observa sin tocar el stream

?progress es una lectura de canal lateral. Nunca reclama un slot de receptor, nunca crea backpressure, nunca toca los bytes. La migración corre a ancho de banda completo sin importar cuántos estén mirando.

LÍNEA DE TIEMPO DE ESPECTADORCERO SLOTS DE RECEPTOR
T+0 min
EL JEFE ABRE LA URL

Ella pega la URL del pipe con ?progress en su navegador del móvil. El dashboard HTML aparece al instante — estado: esperando, 0% — sin instalar, sin login, sin slot de receptor consumido.

T+22 min
EL STREAM ESTÁ EN VIVO

SSE impulsa un evento state: streaming. La barra de progreso salta al 22%, los bytes suben, MB/s se estabiliza en 118. El dashboard se actualiza cada 250 ms sin un solo recargo de página.

T+4 h
EL JEFE SE VA A LA CAMA

Ella cierra la pestaña. Su conexión de espectador cae. La migración no se entera — nunca estuvo en el camino de los datos. El emisor y su único receptor real siguen adelante.

T+8 h
DESPIERTA AL 100%

Ella reabre la URL al amanecer. El dashboard muestra un evento done: 7.6 GB transferidos, 8h 2m, sin errores. El estado del lado del servidor sobrevive al refresh — los rezagados siempre ven la línea final.

T+8h 4m
ENVÍA EL ACK

Ella reenvía la URL al Slack del equipo. Tres ingenieros la abren y ven el mismo estado done. Sin hilo de status que cerrar, sin panel de Grafana que desmarcar. Una URL, cinco testigos, cero interrupciones.

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'}'

Tres tipos de evento SSE. state para transiciones (idle → waiting → streaming → complete), progress cada 250 ms mientras fluyen los bytes (bytesTransferred, velocidad, ETA), done una vez al final con stats finales. Hasta cincuenta espectadores por ruta, cada uno con una ventana de conexión de cinco minutos.

use-cases / a-progress-bar-your-boss-can-spectate / audience

Cada stakeholder, una URL de solo lectura

?progress es un canal lateral. Jefe, compañero, cliente externo, on-call — todos abren la misma URL. Ninguno afecta la transferencia. Todos ven el mismo estado en vivo.

use-cases / a-progress-bar-your-boss-can-spectate / punchline

Mirar la migración tiene su propia URL. La migración no se entera.

0 SLOTS DE RECEPTOR USADOSHASTA 50 ESPECTADORES POR RUTA
MIGRACIÓN1 emisor, 1 receptor, ancho de banda completo
ESPECTADORES12 ojos del jefe en el dashboard, 0 backpressure
  • sin canal de Slack que cuidar
  • sin dashboard de Grafana que conectar
  • sin endpoint de progreso que escribir
use-cases / a-progress-bar-your-boss-can-spectate / replaces

Qué reemplaza esto

Cada equipo tiene una forma de responder '¿cuánto falta?'. La mayoría de esas formas cuestan un servicio que correr, un dashboard que conectar o un canal de chat que cuidar. Un parámetro de query sobre la URL del pipe no cuesta nada de eso.

  • Updates en el canal #migrations de SlackUn humano escribiendo porcentajes cada cinco minutos
  • Dashboards de GrafanaUn exporter, un scrape de Prometheus, un panel que mantener
  • Endpoints de progreso a medidaRuta a medida, esquema a medida, bug de retención a medida
  • Tmux-share por SSHAcceso al bastión solo para mirar cómo sube un número
  • Paneles de métricas de DatadogAgente por host y precio por métrica para una sola transferencia
  • Pings de '¿ya está?'Cinco compañeros preguntando lo mismo en hilos distintos
use-cases / a-progress-bar-your-boss-can-spectate / cta

Envía la URL. Deja de enviar actualizaciones.

use-cases / a-progress-bar-your-boss-can-spectate / related

Lee los otros