Aller au contenu
TYPEDébloqué
ÉTAPEGain rapide
DIFFICULTÉSimple
MÉTIERSurveiller un service
POURÉquipes de devs
POURDevOps et infra
SERVICESPipe
POURQUOI HOODYHTTP-natif
POURQUOI HOODYMultijoueur par défaut
TYPEDébloqué
ÉTAPEGain rapide
DIFFICULTÉSimple
MÉTIERSurveiller un service
POURÉquipes de devs
POURDevOps et infra
SERVICESPipe
POURQUOI HOODYHTTP-natif
POURQUOI HOODYMultijoueur par défaut
TYPEDébloqué
ÉTAPEGain rapide
DIFFICULTÉSimple
MÉTIERSurveiller un service
POURÉquipes de devs
POURDevOps et infra
SERVICESPipe
POURQUOI HOODYHTTP-natif
POURQUOI HOODYMultijoueur par défaut
TYPEDébloqué
ÉTAPEGain rapide
DIFFICULTÉSimple
MÉTIERSurveiller un service
POURÉquipes de devs
POURDevOps et infra
SERVICESPipe
POURQUOI HOODYHTTP-natif
POURQUOI HOODYMultijoueur par défaut
PIPE · ?PROGRESS · SSE

Une barre de progression que votre boss peut regarder sans rejoindre

vous faites tourner une migration de huit heures. Cinq personnes veulent un statut sans consommer un slot receiver ni interrompre le stream. Ajoutez ?progress à l'URL pipe. Quiconque l'ouvre obtient un dashboard HTML live — octets transférés, vitesse courante, ETA, transitions d'état. La migration tourne à pleine vitesse, peu importe le nombre d'yeux qui regardent.

Comment le boss regarde sans toucher au stream

?progress est une lecture en side-channel. Il ne réclame jamais un slot receiver, ne crée jamais de backpressure, ne touche jamais aux octets. La migration tourne à pleine bande passante quel que soit le nombre de spectateurs.

TIMELINE SPECTATEURZÉRO SLOT RECEIVER
T+0 min
LE BOSS OUVRE L'URL

Elle colle l'URL pipe avec ?progress dans le navigateur de son téléphone. Le dashboard HTML apparaît instantanément — état : en attente, 0 % — pas d'install, pas de login, pas de slot receiver consommé.

T+22 min
STREAM EN COURS

SSE pousse un événement state: streaming. La barre saute à 22 %, les octets défilent, MB/s se stabilise à 118. Le dashboard se met à jour toutes les 250 ms sans un seul reload.

T+4 h
LE BOSS VA SE COUCHER

Elle ferme l'onglet. Sa connexion spectateur saute. La migration ne s'en aperçoit pas — elle n'a jamais été dans le data path. Le sender et son receiver réel continuent.

T+8 h
RÉVEIL À 100 %

Elle rouvre l'URL au lever du jour. Le dashboard montre un événement done : 7.6 GB transférés, 8 h 02, zéro erreur. L'état serveur survit au refresh — les retardataires voient toujours la dernière ligne.

T+8 h 4 m
ENVOYEZ L'ACK

Elle transmet l'URL au Slack équipe. Trois ingés l'ouvrent et voient le même état done. Pas de fil de statut à clore, pas de panel Grafana à dé-favoriser. Une URL, cinq témoins, zéro interruption.

spectate.sh
# 1. Sender — migration de huit heures. Comme d'habitude.
tar czf - /var/lib/postgres | curl -T - "$PIPE/api/v1/pipe/migration"

# 2. Receiver — le seul client qui compte pour le backpressure.
curl "$PIPE/api/v1/pipe/migration" | tar xzf - -C /restore

# 3. Le boss ouvre l'URL sur son téléphone. Dashboard HTML. Zéro setup.
# => https://pipe.hoody.com/api/v1/pipe/migration?progress

# 4. vous voulez du SSE pour un bot Slack ? Même URL, autre 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 toutes les 250 ms pendant le flux (bytesTransferred, speed, ETA), done une fois à la fin avec les stats finales. Jusqu'à cinquante spectateurs par path, chacun avec une fenêtre de connexion de cinq minutes.

Tous les stakeholders, une URL en lecture seule

?progress est un side-channel. Le boss, le collègue, le client externe, l'astreinte — ils ouvrent tous la même URL. Aucun n'affecte le transfert. Tous voient le même état live.

Regarder la migration est sa propre URL. La migration ne s'en rend pas compte.

0 SLOT RECEIVER UTILISÉJUSQU'À 50 SPECTATEURS PAR PATH
MIGRATION1 sender, 1 receiver, pleine bande passante
SPECTATEURS12 yeux du boss sur le dashboard, 0 backpressure
  • pas de canal Slack à entretenir
  • pas de dashboard Grafana à câbler
  • pas d'endpoint progress à coder

Ce que ça remplace

Chaque équipe a sa façon de répondre à « ça en est où ? ». La plupart coûtent un service à faire tourner, un dashboard à câbler, ou un canal de chat à entretenir. Un paramètre d'URL ne coûte rien de tout ça.

  • Updates Slack #migrationsUn humain qui tape des pourcentages toutes les cinq minutes
  • Dashboards GrafanaUn exporter, un scrape Prometheus, un panel à maintenir
  • Endpoints progress maisonRoute ad hoc, schéma ad hoc, bug de rétention ad hoc
  • Tmux-share via SSHAccès bastion juste pour regarder un nombre monter
  • Panels métriques DatadogAgent par host et tarif par métrique pour un transfert
  • Pings « c'est fini ? »Cinq collègues qui posent la même question sur des fils différents

Envoyez l'URL. Arrêtez d'envoyer des updates.

Lire le guide API pipe

Lis les autres