# đ UnitĂ© de Temps Globale - SystĂšme UnifiĂ© ## đŻ Changement Majeur L'unitĂ© de temps (ms/s) est maintenant **globale** et **synchronisĂ©e dans toute l'application**! ## â Ce qui a Ă©tĂ© fait ### 1. **Store Zustand Global** Ajout de `timeUnit` dans le store principal: ```typescript // apps/web/src/store/simulationStore.ts export type TimeUnit = 'ms' | 's'; interface SimulationState { timeUnit: TimeUnit; // UnitĂ© globale pour toute l'UI setTimeUnit: (unit: TimeUnit) => void; // ... autres Ă©tats } ``` ### 2. **SĂ©lecteur Unique [ms] [s]** Le sĂ©lecteur en haut Ă droite du panneau de paramĂštres contrĂŽle **TOUTE** l'application: ``` ââââââââââââââââââââââââââââââââââââââââ â ParamĂštres du rĂ©seau [ms] s â â ContrĂŽle TOUT âââââââââââââââââââââââââââââââââââââââ†â λ: 6.0 req/s â â Suit le sĂ©lecteur â Temps simulation: 100 s â â A son propre sĂ©lecteur â ÎŒc: 0.010 s â â Suit le sĂ©lecteur â ÎŒ1: 0.120 s â â Suit le sĂ©lecteur ââââââââââââââââââââââââââââââââââââââââ ``` ### 3. **Synchronisation Automatique** Quand vous changez [ms] â [s], **TOUT** se met Ă jour: - â Champ λ (taux d'arrivĂ©e) - â Champs ÎŒ (temps de service) - â Labels et helper texts - â UnitĂ©s affichĂ©es (req/ms â req/s, ms â s) ### 4. **Fonctions Utilitaires** Nouveau fichier `apps/web/src/utils/timeFormat.ts`: ```typescript // Convertir temps selon l'unitĂ© convertTime(timeInMs, unit) â nombre affichĂ© // Convertir taux selon l'unitĂ© convertRate(rateInReqPerMs, unit) â nombre affichĂ© // Formater avec l'unitĂ© formatTime(100, 's') â "0.100 s" formatRate(0.008, 's') â "8.0 req/s" ``` ## đ Comment ça fonctionne ### Architecture ``` âââââââââââââââââââââââââââââââââââââââ â Store Zustand (Global) â â timeUnit: 'ms' | 's' â ââââââââââââââââŹâââââââââââââââââââââââ â âââș ParameterPanel (utilise timeUnit) âââș ResultsDisplay (utilise timeUnit) âââș MetricsCard (utilise timeUnit) âââș Tous les composants... ``` ### Avant (â ProblĂšme) ``` ParameterPanel: [local state] timeUnit = 'ms' ResultsDisplay: Affiche toujours en ms MetricsCard: Affiche toujours en ms â IncohĂ©rent et confus! ``` ### Maintenant (â Solution) ``` Store Global: timeUnit = 's' â ParameterPanel: Lit store â Affiche en 's' ResultsDisplay: Lit store â Affiche en 's' MetricsCard: Lit store â Affiche en 's' â CohĂ©rent partout! ``` ## đ Exemple Concret **Vous sĂ©lectionnez [s]:** ### Panneau de paramĂštres: ``` λ = 6.0 req/s (au lieu de 0.006 req/ms) ÎŒc = 0.010 s (au lieu de 10 ms) ÎŒ1 = 0.120 s (au lieu de 120 ms) ``` ### RĂ©sultats de simulation: ``` Temps moyen dans le systĂšme: 0.156 s (au lieu de 156 ms) Temps d'attente: 0.024 s (au lieu de 24 ms) Temps de service: 0.132 s (au lieu de 132 ms) ``` ### MĂ©triques analytiques: ``` W (temps moyen): 0.156 s (au lieu de 156 ms) Wq (attente): 0.024 s (au lieu de 24 ms) ``` **Tout est synchronisĂ©!** ## đŻ Deux SĂ©lecteurs Distincts ### 1. SĂ©lecteur Principal [ms] [s] **ContrĂŽle:** λ, ÎŒ, et TOUS les affichages de temps/taux **Position:** Haut Ă droite du panneau paramĂštres ### 2. SĂ©lecteur Temps Simulation (ms/s/min/h) **ContrĂŽle:** UNIQUEMENT le temps de simulation **Position:** Ă cĂŽtĂ© du champ "Temps de simulation" **IndĂ©pendant:** Ne change PAS l'unitĂ© globale ## đĄ Utilisation ### ScĂ©nario 1: Tout en secondes ``` 1. SĂ©lectionnez [s] en haut Ă droite 2. Entrez λ = 6 (req/s) 3. Entrez ÎŒc = 0.010 (s) 4. Entrez ÎŒ1 = 0.120 (s) 5. Temps simulation: 100 (avec son propre sĂ©lecteur en 's') â Tout affichĂ© en secondes dans l'application ``` ### ScĂ©nario 2: Tout en millisecondes ``` 1. SĂ©lectionnez [ms] en haut Ă droite 2. Entrez λ = 0.006 (req/ms) 3. Entrez ÎŒc = 10 (ms) 4. Entrez ÎŒ1 = 120 (ms) 5. Temps simulation: 100000 (avec son propre sĂ©lecteur en 'ms') â Tout affichĂ© en millisecondes dans l'application ``` ## đ§ Pour les DĂ©veloppeurs ### Utiliser l'unitĂ© globale dans un composant ```typescript import { useSimulationStore } from '../../store/simulationStore'; import { formatTime, formatRate } from '../../utils/timeFormat'; function MyComponent() { const { timeUnit } = useSimulationStore(); // Afficher un temps (stockĂ© en ms) const timeInMs = 156; const displayTime = formatTime(timeInMs, timeUnit); // timeUnit='s' â "0.156 s" // timeUnit='ms' â "156 ms" // Afficher un taux (stockĂ© en req/ms) const rateInReqPerMs = 0.008; const displayRate = formatRate(rateInReqPerMs, timeUnit); // timeUnit='s' â "8.0 req/s" // timeUnit='ms' â "0.008 req/ms" return (
Temps: {displayTime}
Taux: {displayRate}
Temps moyen: {formatTime(stats.average_system_time, timeUnit)}
Attente: {formatTime(stats.average_wait_time, timeUnit)}
Service: {formatTime(stats.average_service_time, timeUnit)}