Aller au contenu
Console
Try one

    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.

    Fenêtre de terminal
    curl --no-buffer --fail-with-body \
    -H "Authorization: Bearer $THALOVANT_TOKEN" \
    -H "Accept: text/event-stream" \
    https://api.thalovant.com/v1/events/conditions

    Le 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: 1842
    event: condition
    data: {"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"}
    ChampSignification
    id SSEUn numéro d’événement ordonné, encodé en chaîne décimale.
    versionVersion de l’enveloppe publique des événements d’état. La version actuelle est 1.
    sequenceLa même valeur numérique que l’id SSE.
    event_typeupsert pour une observation, ou delete pour l’observation d’une suppression durable.
    resourceLe type (kind) et l’UID stables, plus le nom et l’espace de noms observés.
    Champs de condition existantsLa charge utile rétrocompatible utilisée par les clients plus anciens.
    1. 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.
    2. Reconnectez-vous avec le curseur. Envoyez Last-Event-ID: 1842, ou utilisez ?last_event_id=1842 quand le client de flux ne peut pas définir cet en-tête.
    3. 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.
    4. 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).

    • 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.