Projet : Nano-Telemetry - Directives de Développement (CONSIGNE.md) Rôle et Contexte tu pourra faire un brainstorming, tu me parlera en francais, l app et les commentaire en francais, tu realisera un plan de devellopement. n hesite pas a utiliser internet pour tes recherches et verifier les deniere version et pour le debuggage Tu es un agent de développement IA chargé de créer "Nano-Telemetry", un système client-serveur de surveillance matérielle. L'objectif absolu de ce projet est de concevoir un agent de collecte de métriques (CPU, RAM, Espace Disque) ayant une empreinte système la plus proche possible de zéro sur des machines Debian, et de transmettre ces données sur un réseau local vers un serveur d'agrégation. Ligne de Conduite 1 : L'Agent de Télémétrie (Rust) Langage et Empreinte : L'agent doit être écrit en Rust. L'objectif est d'éviter tout ramasse-miettes (Garbage Collector) pour garantir une utilisation mémoire déterministe et une consommation CPU résiduelle. Optimisation de Compilation : Configure le fichier Cargo.toml avec un profil de type "release" strict. Utilise les options strip = true pour supprimer les symboles de débogage, opt-level = "z" pour optimiser la taille du binaire, et lto = true pour l'optimisation à l'édition des liens. Collecte des données : Utilise la bibliothèque sysinfo, mais tu dois impérativement désactiver ses fonctionnalités par défaut (default-features = false) pour empêcher le lancement de multiples threads en arrière-plan, ce qui augmenterait inutilement l'empreinte mémoire. Orchestration Temporelle : N'inclus aucun moteur asynchrone (comme Tokio). Les fréquences d'actualisation différenciées (ex: CPU toutes les 2s, Disque toutes les 60s) doivent être gérées via une boucle mono-thread utilisant des pauses natives std::thread::sleep pour suspendre complètement le processus. Configuration : Implémente la lecture d'un fichier config.toml externe via la bibliothèque serde pour paramétrer dynamiquement l'adresse IP du serveur cible (10.0.0.50) et les métriques à activer. Transport : Utilise le protocole UDP pour expédier les charges utiles (payloads) en JSON, privilégiant la vitesse sans état (modèle fire-and-forget) sur un réseau local. Ligne de Conduite 2 : Le Serveur d'Ingestion (Go) Langage : Le serveur central doit être écrit en Go (Golang) pour profiter de son modèle de concurrence ultra-performant sur les opérations réseau. Traitement Réseau : Crée un écouteur UDP. Dès la réception d'un datagramme, déclenche une nouvelle goroutine asynchrone pour traiter la désérialisation JSON afin d'éviter tout goulot d'étranglement lors de réceptions simultanées massives. Observabilité : Utilise le paquet standard github.com/prometheus/client_golang pour convertir les données reçues en jauges (Gauges) Prometheus en mémoire vive, et expose ces métriques sur un endpoint HTTP standard /metrics. Ligne de Conduite 3 : Déploiement et Sécurité (Systemd sous Debian) Confinement : Fournis un fichier unitaire de service systemd pour déployer l'agent Rust sur les machines cibles. Moindre Privilège : Intègre la directive DynamicUser=yes, qui génère un utilisateur éphémère et applique automatiquement des sécurités matérielles telles que ProtectSystem=strict et ProtectHome=read-only pour verrouiller l'accès au disque. Accès Configuration : Utilise la directive ConfigurationDirectory= afin que ce service confiné puisse lire son fichier TOML de manière sécurisée. Ligne de Conduite 4 : Intégration du Design Graphique (UI/UX) Ressources Graphiques : Le répertoire du projet contient un dossier nommé design_system. Application Stricte : Pour toute interface visuelle, tableau de bord, ou composant web (éventuellement servi par l'application Go pour visualiser l'état du serveur), tu dois strictement et obligatoirement te baser sur les fichiers contenus dans ce dossier design_system. Tu dois respecter la charte graphique, les palettes de couleurs, les polices de caractères et la structure des composants (CSS/Assets) qui s'y trouvent.