# Linux BenchTools - Contexte du Projet ## Aperçu du Projet **Linux BenchTools** est une application auto-hébergée de benchmarking et de gestion d'inventaire matériel pour les machines Linux (physiques, VM, SBC comme Raspberry Pi). Elle permet aux utilisateurs de : * Collecter les spécifications matérielles (CPU, RAM, Stockage, Réseau, GPU). * Exécuter des benchmarks standardisés. * Calculer des scores comparables et afficher des classements. * Gérer l'inventaire matériel (machines et périphériques comme les clés USB, câbles, etc.). * Générer des QR codes pour le suivi physique des actifs. * Stocker la documentation associée (PDF, factures). ## Stack Technique * **Backend :** Python 3.11+, FastAPI, SQLAlchemy, Pydantic. * **Frontend :** HTML5, CSS3, JavaScript Vanilla (servi via Nginx). * **Base de données :** SQLite (Bases de données séparées pour les Benchmarks et les Périphériques). * **Script Client :** Bash (`bench.sh`) pour la collecte de données sur les machines cibles. * **Infrastructure :** Docker & Docker Compose. * **Autre :** Go (placeholder dans `bench_go`, potentiellement pour un futur client). ## Structure des Répertoires * `backend/` : Code source de l'application FastAPI. * `app/` : Paquet principal de l'application. * `api/` : Points d'entrée (endpoints) de l'API. * `core/` : Paramètres de configuration et de sécurité. * `models/` : Modèles de base de données SQLAlchemy. * `schemas/` : Schémas de données Pydantic. * `utils/` : Fonctions utilitaires (ex: logique de calcul des scores). * `data/` : Stockage des bases de données SQLite (`data.db`, `peripherals.db`). * `uploads/` : Stockage des documents et images téléchargés. * `frontend/` : Actifs statiques du frontend (HTML, CSS, JS). * `bench_go/` : Implémentation Go du client de benchmark (en cours de développement). * `config/` : Fichiers de configuration YAML pour divers modules (types de périphériques, emplacements). * `docs/` : Documentation complète du projet. * `scripts/` : Scripts utilitaires. * `docker-compose.yml` : Définition des services (backend, frontend/nginx). * `.env.example` : Modèle pour les variables d'environnement. ## Composants Clés ### Backend (FastAPI) Le backend expose une API REST pour : * Recevoir les données de benchmark via un payload JSON. * Servir les données au tableau de bord frontend. * Gérer l'inventaire des périphériques. * Gérer les téléchargements de fichiers (images, docs). Il utilise **deux bases de données SQLite** : 1. `data.db` : Pour les benchmarks, les appareils et les documents associés. 2. `peripherals.db` : Spécifiquement pour le module d'inventaire des périphériques. ### Frontend (JS Vanilla) Un tableau de bord léger stylisé avec le thème **Monokai Dark**. Il interagit avec l'API backend pour afficher des tableaux, des détails et des formulaires. Aucun build n'est requis ; il est servi directement par Nginx. ### Client de Bench (Bash) Le script `bench.sh` est exécuté sur la machine cible. Il lance des outils comme `sysbench`, `fio`, `iperf3` et `glmark2`, puis envoie les résultats à l'API backend. ### Module Périphériques Un ensemble de fonctionnalités distinctes pour la gestion des articles en inventaire. Il comprend : * Gestion hiérarchique des emplacements. * Génération de QR codes (librairie `qrcode`). * Traitement d'images (librairie `Pillow`) pour les vignettes (thumbnails). * Importation automatisée depuis `lsusb`. ## Développement & Utilisation ### Installation 1. **Cloner :** `git clone ...` 2. **Installer :** Lancer `./install.sh` (automatise la création du `.env` et la configuration) OU configuration manuelle via Docker Compose. 3. **Lancer :** `docker compose up -d` ### Variables d'Environnement Variables clés dans le `.env` : * `API_TOKEN` : Jeton secret pour authentifier les clients de benchmark. * `DATABASE_URL` : Chemin vers la base de données SQLite principale. * `PERIPHERALS_DB_URL` : Chemin vers la base de données SQLite des périphériques. * `UPLOAD_DIR` : Chemin pour le stockage des fichiers. ### Exécuter un Benchmark Exécuter sur la machine cible : ```bash curl -s /scripts/bench.sh | bash -s -- --server /api/benchmark --token --device ``` ### Documentation Une documentation exhaustive est disponible dans `docs/`, notamment : * `06_backend_architecture.md` : Détails sur l'architecture backend. * `README_PERIPHERALS.md` : Guide pour le module périphériques. * `02_model_donnees.md` : Schéma de la base de données. ## Conventions de Codage * **Python :** Les "type hints" sont largement utilisés (modèles Pydantic). * **Style :** Respecte le standard PEP 8. * **Commits :** Messages descriptifs.