Aller au contenu principal

appcore-ops

Paquet publié

Stable 1.0.0 · MSRV Rust 1.89 · crates.io · docs.rs · code source

Guide et exemples maintenus par le crate

Le dépôt Runtime maintient le guide détaillé, exemple débutant et exemple intermédiaire. Le wiki résume la frontière publique ; les détails d’API et d’exécution restent avec le code du crate.

Responsabilité : health, logs, métriques, observations, heartbeat et availability sans vendor.

Dépendances internes : appcore-core, appcore-supervisor.

API principale : health status/report/checks, heartbeat sources, loggers, metric counters, ObservationEvent/ObservationSink, file sink borné, availability report et reexports de compatibilité pour appcore-supervisor::managed_services.

Le sink d'observations local au processus retient au plus 65 536 événements et 16 Mio ; le registre de métriques retient au plus 4 096 noms, 128 octets par nom et 1 Mio agrégé. Tous deux exposent pression de comptage/octets et snapshots immuables partagés tout en conservant les API de snapshot owned. Une observation trop grande n'est pas retenue mais atteint toujours les 32 drains configurés au maximum. Le logger mémoire retient aussi au plus 4 096 enregistrements et 8 Mio et expose shared_records. La beta actuelle du Runtime stocke la configuration des drains dans une génération immuable copy-on-write. Chaque observation partage un pointeur de génération au lieu de cloner jusqu'à 32 handles de drain, et les callbacks s'exécutent toujours après la libération du lock de configuration. SharedObservationEvent::new applique l'expurgation et les limites de champs une seule fois. Le hub mémoire transmet ce payload immuable via ObservationSink::emit_shared ; les sinks internes mémoire, fichier et métriques évitent les copies profondes, tandis que les implémentations existantes owned utilisent automatiquement le comportement compatible par défaut. Les noms d'attributs sensibles sont examinés par un parcours des octets ASCII insensible à la casse et sans allocation. La politique conservatrice sur les sous-chaînes reste inchangée, sans allouer une String en minuscules pour chaque attribut.

Dans la beta Runtime actuelle, FileObservationSink::flush utilise un seul deadline de 30 secondes pour l'admission dans la file bornée et l'acknowledgement durable du worker. flush_timeout accepte un délai positif plus court. Une file pleine ou un worker bloqué renvoie TimedOut ; un flush déjà en file peut finir sans risque après le deadline du caller.

À utiliser pour signaux génériques. Le nouveau code lifecycle utilise appcore-supervisor directement. Ne pas ajouter de SDK vendor ni métriques métier applicatives au crate.

Maturité : primitives stables; export/collection production appartient au déploiement.