Flux d'état
Reprenez dans l'ordre les changements de condition des hubs, clients, ACL et runtimes à partir d'un curseur SSE durable.
Utilisez GET /v1/events/conditions quand un client authentifié du plan de contrôle a besoin des changements de condition entre deux actualisations d’instantanés d’état. Le flux est une optimisation par-dessus les lectures d’instantanés, et non leur remplacement.
Se connecter
Section intitulée « Se connecter »curl --no-buffer --fail-with-body \ -H "Authorization: Bearer $THALOVANT_TOKEN" \ -H "Accept: text/event-stream" \ https://api.thalovant.com/v1/events/conditionsLe point de terminaison accepte les filtres uids, kinds, namespaces, statuses, reasons et types, séparés par des virgules. L’appelant a besoin d’au moins une portée de lecture prise en charge pour les hubs, les clients ou les ACL.
Chaque événement de condition conserve les champs de condition existants et ajoute une enveloppe de flux ordonnée :
id: 1842event: conditiondata: {"version":1,"sequence":1842,"event_type":"upsert","resource":{"kind":"Hub","uid":"hub-uid","name":"primary","namespace":"tenant-a"},"resource_kind":"Hub","resource_uid":"hub-uid","type":"Ready","status":"True"}| Champ | Signification |
|---|---|
id SSE | Un numéro d’événement ordonné, encodé en chaîne décimale. |
version | Version de l’enveloppe publique des événements d’état. La version actuelle est 1. |
sequence | La même valeur numérique que l’id SSE. |
event_type | upsert pour une observation, ou delete pour l’observation d’une suppression durable. |
resource | Le type (kind) et l’UID stables, plus le nom et l’espace de noms observés. |
| Champs de condition existants | La charge utile rétrocompatible utilisée par les clients plus anciens. |
Reprendre sans risque
Section intitulée « Reprendre sans risque »- Stockez la dernière séquence numérique entièrement traitée. Enregistrez-la seulement après que votre gestionnaire a accepté l’événement.
- Reconnectez-vous avec le curseur. Envoyez
Last-Event-ID: 1842, ou utilisez?last_event_id=1842quand le client de flux ne peut pas définir cet en-tête. - Traitez les événements dans l’ordre croissant des séquences. Ignorez toute séquence égale ou inférieure à la dernière valeur traitée.
- Actualisez un instantané d’état après la réinitialisation du curseur. Reconnectez-vous sans le curseur refusé seulement après avoir lancé la récupération par instantané.
La relecture se fait dans l’ordre et se limite à 1 000 événements. L’API renvoie 409 avec detail.code: status_cursor_expired quand la récupération dépasserait cette fenêtre. Un curseur en avance sur le flux enregistré renvoie 409 avec detail.code: invalid_status_cursor. Ces échecs sont explicites pour qu’un client ne saute jamais d’état en silence.
Les SDK officiels Python, Node, Go et Rust n’encapsulent pas encore ce point de terminaison SSE du plan de contrôle. Utilisez un client de flux HTTP qui prend en charge l’autorisation bearer, le découpage SSE, l’annulation de la reconnexion et un délai d’attente croissant et plafonné (backoff).
Règles de livraison
Section intitulée « Règles de livraison »- Un événement relu garde son numéro de séquence d’origine; ignorez les événements que vous avez déjà traités.
- Les signaux de vie (heartbeats) sont des commentaires SSE et ne font pas avancer le curseur.
- Reconnectez-vous avec le dernier curseur traité pour demander les événements manqués.
- Les lectures périodiques d’instantanés restent le chemin de récupération en cas de curseur refusé, de longue période hors ligne ou d’échec d’analyse du côté client.