# 01 – Vision fonctionnelle et objectifs

## Nom de l’application

Nom provisoire : **Linux BenchTools**

Objectif : application self-hosted permettant de :
- Recenser les machines (physiques, VM, SBC type Raspberry Pi).
- Collecter des informations matérielles (CPU, RAM, GPU, stockage, réseau, carte mère, OS).
- Lancer des benchmarks standardisés via un **script client** exécuté sur les machines.
- Recevoir et stocker les résultats de bench sur un **serveur central**.
- Calculer une **note globale** et des sous-scores (CPU, mémoire, disque, réseau, GPU).
- Afficher un **dashboard** triant les machines par performance globale.
- Associer des liens constructeurs et des documents (PDF / images) à chaque machine.
- tu verifiera bien sur la coherence entre tous les fichier de consigne de prompt et si le choix des outils est cohérent

L’application doit être :
- **Self-hosted** sur une machine Linux (Debian) au format Docker.
- Légère (SQLite, pas de dépendance à une grosse base).
- Accessible sur le réseau local (via reverse proxy existant).
- Exploitable autant pour des serveurs que des PC ou des VMs.

---

## Rôles et usages

### Rôle principal : utilisateur/admin unique (Gilles)

Actions possibles :
- Ajouter/modifier une machine (device) et ses métadonnées (description, localisation, tags).
- Visualiser les informations hardware associées à une machine.
- Lancer un bench sur une machine en copiant une commande fournie par l’interface.
- Visualiser l’historique des benchmarks d’une machine.
- Consulter les notes globales et par catégorie (CPU, RAM, disque, réseau, GPU).
- Ajouter/éditer des liens vers les sites constructeurs.
- Uploader des notices PDF, factures, schémas, photos.

---

## Fonctionnalités principales (MVP)

1. **Gestion des machines (devices)**
   - CRUD basique :
     - Créer un device (ou auto-création à la réception d’un bench).
     - Lire les infos d’un device.
     - Modifier la description, la localisation, les tags.
   - Un device représente une machine logique (hostname ou nom choisi).

2. **Snapshots hardware**
   - À chaque bench, un snapshot de l’état matériel et OS est enregistré :
     - CPU (modèle, cœurs, threads, fréquences, cache, vendor).
     - RAM (total, slots, type, capacités).
     - GPU (modèle, mémoire, vendor).
     - Disques (liste, type, taille, interface, SMART résumé).
     - Réseau (interfaces, vitesses, IPs).
     - Carte mère (vendor, modèle, BIOS).
     - OS (nom, version, kernel, architecture, type machine : bare metal / VM).
   - Ces infos sont liées à un `hardware_snapshot` et référencées par un `benchmark`.

3. **Benchmarks**
   - Réception d’un JSON produit par un script Bash exécuté sur la machine.
   - Enregistrement d’un `benchmark` avec :
     - Date/heure du run.
     - Version du script client.
     - Scores par catégorie : `cpu_score`, `memory_score`, `disk_score`, `network_score`, `gpu_score`.
     - `global_score` calculé selon une formule configurable (par ex. moyenne pondérée).
     - Détails bruts en JSON (`details_json`) pour audit.

4. **Liens constructeur**
   - Attacher à un device des liens HTTP :
     - Fiche produit constructeur.
     - Page support / BIOS / drivers.
     - Documentation technique.

5. **Documents**
   - Upload de fichiers (surtout PDF) associés à un device :
     - Notices / manuels.
     - Factures.
     - Photos / schémas.
   - Stockage sur disque, références dans SQLite.

6. **Dashboard Web**
   - Page d’accueil :
     - Statistiques globales (nombre de devices, nombre total de benchmarks, date dernier bench, score moyen).
     - Tableau trié par `global_score` décroissant.
   - Indicateur compact par ligne :
     - Hostname + description.
     - Dernier `global_score`.
     - Détail CPU/Mem/Disk/Net/GPU du dernier bench.
   - Section "Quick bench script" :
     - Affichage de la commande shell à copier/coller pour exécuter le script client.

---

## Non-objectifs (MVP)

- Pas de multi-tenant ni de gestion avancée de droits utilisateurs.
- Pas de monitoring temps réel (ce n’est pas un outil de supervision).
- Pas de support Windows/macOS dans la première version (Linux seulement).
- Pas d’agent resident/daemon permanent sur les clients (simple script à exécuter ponctuellement).

---

## Contraintes techniques

- Backend en **Python** (FastAPI recommandé).
- Base de données : **SQLite** (fichier sur disque).
- WebUI simple (HTML/CSS/JS minimal, éventuellement HTMX).
- Déploiement via **Docker** + `docker-compose`.
- Script client en **Bash** (priorité Debian/Ubuntu, extensible ensuite).

---

## Critères de réussite (MVP)

- Être capable de :
  - Déployer l’app via `docker-compose up -d`.
  - Copier une commande depuis le Dashboard, l’exécuter sur une machine Linux, et voir :
    - Le device apparaître (ou se mettre à jour).
    - Un nouveau benchmark visible dans l’interface.
  - Voir la machine triée correctement dans le dashboard par `global_score`.
- Pouvoir attacher au moins un PDF à un device et le télécharger depuis l’interface.
