Aller au contenu
use-cases / a-progress-bar-your-boss-can-spectate / hero
PIPE · ?PROGRESS · SSE

Une barre de progression que votre patron peut regarder sans rejoindre

Vous exécutez une migration de huit heures. Cinq personnes veulent un statut sans consommer de slot de récepteur ni interrompre le flux. Ajoutez ?progress à l'URL du pipe. Quiconque l'ouvre obtient un tableau de bord HTML en direct — octets transférés, vitesse actuelle, ETA, transitions d'état. La migration tourne à pleine vitesse, peu importe combien d'yeux regardent.

Lire la doc pipe progress
use-cases / a-progress-bar-your-boss-can-spectate / mechanism

Comment le boss regarde sans toucher au flux

?progress est une lecture en side-channel. Elle ne réclame jamais de slot de récepteur, ne crée jamais de backpressure, ne touche jamais aux octets. La migration s'exécute à pleine bande passante peu importe combien de personnes regardent.

CHRONO DU SPECTATEURZÉRO SLOT DE RÉCEPTEUR
T+0 min
BOSS OUVRE L'URL

Elle colle l'URL du pipe avec ?progress dans le navigateur de son téléphone. Le tableau de bord HTML s'affiche instantanément — état : waiting, 0 % — pas d'installation, pas de login, pas de slot de récepteur consommé.

T+22 min
LE FLUX EST EN DIRECT

SSE envoie un événement state: streaming. La barre de progression saute à 22 %, les octets montent, MB/s se stabilise à 118. Le tableau de bord se met à jour tous les 250 ms sans recharger la page.

T+4 h
BOSS VA AU LIT

Elle ferme l'onglet. Sa connexion de spectateur tombe. La migration ne le remarque pas — elle ne s'est jamais trouvée dans le chemin des données. L'expéditeur et son seul véritable récepteur continuent.

T+8 h
SE RÉVEILLE À 100 %

Elle rouvre l'URL à l'aube. Le tableau de bord affiche un événement done : 7,6 GB transférés, 8h 2m, sans erreurs. L'état côté serveur survit au rafraîchissement — les retardataires voient toujours la dernière ligne.

T+8h 4m
ENVOIE L'ACK

Elle transfère l'URL au Slack de l'équipe. Trois ingénieurs l'ouvrent et voient le même état done. Pas de thread de statut à fermer, pas de panel Grafana à retirer des favoris. Une URL, cinq témoins, zéro interruptions.

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

Trois types d'événements SSE. state pour les transitions (idle → waiting → streaming → complete), progress tous les 250 ms tant que les octets circulent (bytesTransferred, vitesse, ETA), done une seule fois à la fin avec les statistiques finales. Jusqu'à cinquante spectateurs par chemin, chacun avec une fenêtre de connexion de cinq minutes.

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

Chaque partie prenante, une URL en lecture seule

?progress est un side-channel. Boss, collègue, client externe, on-call — ils ouvrent tous la même URL. Aucun d'eux n'affecte le transfert. Tous voient le même état en direct.

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

Regarder la migration est sa propre URL. La migration ne le remarque pas.

0 SLOT DE RÉCEPTEUR UTILISÉJUSQU'À 50 SPECTATEURS PAR CHEMIN
MIGRATION1 expéditeur, 1 récepteur, bande passante complète
SPECTATEURS12 paires d'yeux du patron sur le tableau de bord, 0 backpressure
  • pas de canal Slack à surveiller
  • pas de tableau de bord Grafana à câbler
  • pas d'endpoint de progression à écrire
use-cases / a-progress-bar-your-boss-can-spectate / replaces

Ce que cela remplace

Chaque équipe a un moyen de répondre à « où en est-on ? ». La plupart de ces moyens coûtent un service à exécuter, un tableau de bord à câbler, ou un canal de chat à surveiller. Un paramètre de requête sur l'URL du pipe ne coûte rien de tout cela.

  • Mises à jour du canal Slack #migrationsUn humain qui tape des pourcentages toutes les cinq minutes
  • Tableaux de bord GrafanaUn exporteur, un scrape Prometheus, un panneau à maintenir
  • Endpoints de progression personnalisésRoute sur mesure, schéma sur mesure, bug de rétention sur mesure
  • Tmux-share via SSHAccès bastion juste pour regarder un nombre monter
  • Panneaux de métriques DatadogAgent par hôte et tarification par métrique pour un seul transfert
  • Pings « on est arrivé ? »Cinq coéquipiers qui posent la même question sur des fils différents
use-cases / a-progress-bar-your-boss-can-spectate / cta

Envoyez l'URL. Arrêtez d'envoyer des mises à jour.

Lire le guide de l'API pipe
use-cases / a-progress-bar-your-boss-can-spectate / related

Découvrez les autres