corrige temperature
This commit is contained in:
307
gnome-pilot-extension/STRUCTURE.md
Normal file
307
gnome-pilot-extension/STRUCTURE.md
Normal file
@@ -0,0 +1,307 @@
|
||||
# Structure de l'extension Pilot Control
|
||||
|
||||
## Arborescence des fichiers
|
||||
|
||||
```
|
||||
gnome-pilot-extension/
|
||||
│
|
||||
├── metadata.json # Métadonnées de l'extension (UUID, version, etc.)
|
||||
├── extension.js # Point d'entrée principal (bouton panel + menu)
|
||||
├── prefs.js # Fenêtre de préférences (optionnel V1)
|
||||
├── yamlConfig.js # Module de lecture/écriture YAML
|
||||
├── serviceManager.js # Gestion du service systemd
|
||||
├── stylesheet.css # Styles CSS personnalisés
|
||||
│
|
||||
├── ui/ # Composants d'interface utilisateur
|
||||
│ ├── pilotWindow.js # Fenêtre principale (3 sections)
|
||||
│ ├── metricEditDialog.js # Dialogue d'édition des métriques
|
||||
│ └── commandEditDialog.js # Dialogue d'édition des commandes
|
||||
│
|
||||
├── schemas/ # GSettings schema (optionnel, vide pour V1)
|
||||
│
|
||||
├── install.sh # Script d'installation automatique
|
||||
├── README.md # Documentation complète
|
||||
├── GUIDE_DEBUTANT.md # Guide pour débutants
|
||||
└── STRUCTURE.md # Ce fichier (vue d'ensemble)
|
||||
```
|
||||
|
||||
## Diagramme de flux
|
||||
|
||||
```
|
||||
┌─────────────────────────────────────────────────────────────┐
|
||||
│ GNOME Shell Panel │
|
||||
│ │
|
||||
│ [Icon] Pilot Control ▼ │
|
||||
│ ├─ Status: 🟢 Running │
|
||||
│ ├─ Start Service │
|
||||
│ ├─ Stop Service │
|
||||
│ ├─ Restart Service │
|
||||
│ ├─ Open Control Panel ──────────┐ │
|
||||
│ └─ Reload Config │ │
|
||||
└──────────────────────────────────────────┼──────────────────┘
|
||||
│
|
||||
▼
|
||||
┌──────────────────────────────────────────────────────────────┐
|
||||
│ Pilot Control Panel │
|
||||
│ ┌────────────────────────────────────────────────────────┐ │
|
||||
│ │ [Refresh] [Save] │ │
|
||||
│ └────────────────────────────────────────────────────────┘ │
|
||||
│ │
|
||||
│ ┌─ Service Control ──────────────────────────────────────┐ │
|
||||
│ │ Service Status [Switch ON/OFF] │ │
|
||||
│ │ Auto-start Service [Switch ON/OFF] │ │
|
||||
│ │ Restart Service [Button: Restart] │ │
|
||||
│ └─────────────────────────────────────────────────────────┘ │
|
||||
│ │
|
||||
│ ┌─ Telemetry Metrics ────────────────────────────────────┐ │
|
||||
│ │ Enable Telemetry [Switch ON/OFF] │ │
|
||||
│ │ │ │
|
||||
│ │ CPU Usage [Switch] [Edit...] │ │
|
||||
│ │ Memory Usage [Switch] [Edit...] │ │
|
||||
│ │ Battery [Switch] [Edit...] │ │
|
||||
│ │ Temperature [Switch] [Edit...] │ │
|
||||
│ │ IP Address [Switch] [Edit...] │ │
|
||||
│ └─────────────────────────────────────────────────────────┘ │
|
||||
│ │
|
||||
│ ┌─ Commands ─────────────────────────────────────────────┐ │
|
||||
│ │ Enable Commands [Switch ON/OFF] │ │
|
||||
│ │ Allowed Commands [Edit...] │ │
|
||||
│ │ → shutdown, reboot, sleep, hibernate, screen │ │
|
||||
│ └─────────────────────────────────────────────────────────┘ │
|
||||
└──────────────────────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
## Flux de données
|
||||
|
||||
```
|
||||
┌──────────────┐
|
||||
│ User │
|
||||
│ Action │
|
||||
└──────┬───────┘
|
||||
│
|
||||
▼
|
||||
┌──────────────────────────────────────────┐
|
||||
│ extension.js │
|
||||
│ (PilotIndicator: Panel Button + Menu) │
|
||||
└──────┬───────────────────────────────────┘
|
||||
│
|
||||
├─────────────────────┐
|
||||
│ │
|
||||
▼ ▼
|
||||
┌──────────────┐ ┌──────────────┐
|
||||
│ Service │ │ ui/ │
|
||||
│ Manager │ │ pilotWindow │
|
||||
└──────┬───────┘ └──────┬───────┘
|
||||
│ │
|
||||
│ ▼
|
||||
│ ┌──────────────┐
|
||||
│ │ yamlConfig │
|
||||
│ │ (Parser) │
|
||||
│ └──────┬───────┘
|
||||
│ │
|
||||
▼ ▼
|
||||
┌──────────────┐ ┌──────────────┐
|
||||
│ systemctl │ │ config.yaml │
|
||||
│ commands │ │ (Pilot V2) │
|
||||
└──────────────┘ └──────────────┘
|
||||
│ │
|
||||
└─────────┬───────────┘
|
||||
│
|
||||
▼
|
||||
┌──────────────┐
|
||||
│ mqtt_pilot │
|
||||
│ .service │
|
||||
│ (Pilot V2) │
|
||||
└──────────────┘
|
||||
```
|
||||
|
||||
## Interactions entre modules
|
||||
|
||||
### 1. extension.js → serviceManager.js
|
||||
```javascript
|
||||
// Contrôle du service systemd
|
||||
serviceManager.startService()
|
||||
serviceManager.stopService()
|
||||
serviceManager.restartService()
|
||||
serviceManager.isServiceActive()
|
||||
```
|
||||
|
||||
### 2. extension.js → ui/pilotWindow.js
|
||||
```javascript
|
||||
// Ouvre la fenêtre principale
|
||||
new PilotWindow(extension, yamlConfig, serviceManager)
|
||||
window.show()
|
||||
```
|
||||
|
||||
### 3. ui/pilotWindow.js → yamlConfig.js
|
||||
```javascript
|
||||
// Lecture de la config
|
||||
yamlConfig.load()
|
||||
yamlConfig.getTelemetryMetrics()
|
||||
yamlConfig.getCommandsAllowlist()
|
||||
|
||||
// Modification de la config
|
||||
yamlConfig.updateTelemetryMetric(name, updates)
|
||||
yamlConfig.setTelemetryEnabled(enabled)
|
||||
yamlConfig.updateCommandsAllowlist(newList)
|
||||
|
||||
// Sauvegarde
|
||||
yamlConfig.save()
|
||||
```
|
||||
|
||||
### 4. ui/pilotWindow.js → ui/metricEditDialog.js
|
||||
```javascript
|
||||
// Édition d'une métrique
|
||||
const dialog = new MetricEditDialog(parent, metricName, config)
|
||||
dialog.connect('response', (dlg, responseId) => {
|
||||
const updates = dialog.getUpdates()
|
||||
// Appliquer les modifications
|
||||
})
|
||||
```
|
||||
|
||||
### 5. ui/pilotWindow.js → ui/commandEditDialog.js
|
||||
```javascript
|
||||
// Édition de la allowlist
|
||||
const dialog = new CommandEditDialog(parent, currentAllowlist)
|
||||
dialog.connect('response', (dlg, responseId) => {
|
||||
const newAllowlist = dialog.getAllowlist()
|
||||
// Appliquer les modifications
|
||||
})
|
||||
```
|
||||
|
||||
## Cycle de vie de l'extension
|
||||
|
||||
```
|
||||
1. GNOME Shell démarre
|
||||
↓
|
||||
2. Extension activée (enable())
|
||||
↓
|
||||
3. PilotIndicator créé
|
||||
↓
|
||||
4. Icône ajoutée au panel
|
||||
↓
|
||||
5. Menu construit
|
||||
↓
|
||||
6. Config chargée (yamlConfig.load())
|
||||
↓
|
||||
7. Status du service vérifié
|
||||
↓
|
||||
8. Extension prête
|
||||
|
||||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
|
||||
User clique sur "Open Control Panel"
|
||||
↓
|
||||
PilotWindow créée
|
||||
↓
|
||||
Sections construites (Service, Telemetry, Commands)
|
||||
↓
|
||||
Données chargées depuis config.yaml
|
||||
↓
|
||||
Interface affichée
|
||||
|
||||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
|
||||
User modifie un paramètre
|
||||
↓
|
||||
Config marquée comme "dirty"
|
||||
↓
|
||||
User clique "Save"
|
||||
↓
|
||||
Backup créé (config.yaml.backup_timestamp)
|
||||
↓
|
||||
Nouveau config.yaml écrit
|
||||
↓
|
||||
Service redémarré (systemctl restart)
|
||||
↓
|
||||
Interface mise à jour
|
||||
|
||||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
|
||||
Extension désactivée (disable())
|
||||
↓
|
||||
Fenêtre détruite
|
||||
↓
|
||||
Indicateur supprimé du panel
|
||||
↓
|
||||
Extension arrêtée
|
||||
```
|
||||
|
||||
## Technologies utilisées
|
||||
|
||||
| Technologie | Version | Usage |
|
||||
|-------------|---------|-------|
|
||||
| **GJS** | - | JavaScript runtime pour GNOME |
|
||||
| **GTK4** | 4.x | Toolkit d'interface graphique |
|
||||
| **Libadwaita** | 1.x | Composants UI modernes GNOME |
|
||||
| **GLib** | 2.x | Utilitaires système (fichiers, processus) |
|
||||
| **Gio** | 2.x | I/O (lecture/écriture fichiers) |
|
||||
| **GNOME Shell** | 45+ | Environnement de bureau |
|
||||
|
||||
## Dépendances externes
|
||||
|
||||
L'extension **n'a pas** de dépendances externes npm/node. Tout est fourni par :
|
||||
|
||||
- GNOME Shell
|
||||
- GJS (inclus avec GNOME)
|
||||
- GTK4 et Libadwaita (librairies système)
|
||||
|
||||
## Permissions requises
|
||||
|
||||
L'extension nécessite :
|
||||
|
||||
1. **Accès fichiers** :
|
||||
- Lecture : `~/app/pilot/pilot-v2/config.yaml`
|
||||
- Écriture : `~/app/pilot/pilot-v2/config.yaml`
|
||||
- Création de backups : `~/app/pilot/pilot-v2/config.yaml.backup_*`
|
||||
|
||||
2. **Commandes systemctl** :
|
||||
- `systemctl --user start mqtt_pilot.service`
|
||||
- `systemctl --user stop mqtt_pilot.service`
|
||||
- `systemctl --user restart mqtt_pilot.service`
|
||||
- `systemctl --user status mqtt_pilot.service`
|
||||
- `systemctl --user is-active mqtt_pilot.service`
|
||||
- `systemctl --user enable mqtt_pilot.service`
|
||||
- `systemctl --user disable mqtt_pilot.service`
|
||||
|
||||
3. **Logs** :
|
||||
- `journalctl --user -u mqtt_pilot.service`
|
||||
|
||||
## Sécurité
|
||||
|
||||
### Ce que l'extension PEUT faire :
|
||||
- ✅ Lire et modifier le fichier config.yaml de l'utilisateur
|
||||
- ✅ Contrôler le service systemd de l'utilisateur (--user)
|
||||
- ✅ Créer des sauvegardes des fichiers de configuration
|
||||
|
||||
### Ce que l'extension NE PEUT PAS faire :
|
||||
- ❌ Accéder aux services système (nécessite sudo)
|
||||
- ❌ Modifier des fichiers en dehors du home directory
|
||||
- ❌ Exécuter des commandes arbitraires non validées
|
||||
- ❌ Accéder au réseau (pas d'API MQTT directe)
|
||||
|
||||
## Limites de V1
|
||||
|
||||
1. **Parser YAML simple** : Ne gère que la structure de config.yaml de Pilot V2
|
||||
2. **Pas de validation avancée** : Entrées utilisateur validées basiquement
|
||||
3. **Rechargement par redémarrage** : Nécessite un restart du service (pas de reload à chaud)
|
||||
4. **Une seule instance** : Gère uniquement un service Pilot à la fois
|
||||
5. **Pas de logs temps réel** : Pas d'affichage des logs dans l'interface
|
||||
|
||||
## Extensions futures possibles
|
||||
|
||||
- Support de plusieurs instances de Pilot
|
||||
- Visualisation des logs en temps réel
|
||||
- Notifications pour événements importants
|
||||
- Graphiques de métriques (historique)
|
||||
- Export/import de configurations
|
||||
- Validation avancée des entrées (regex, ranges)
|
||||
- Thèmes sombres/clairs personnalisés
|
||||
- Support de configurations complexes (YAML avancé)
|
||||
|
||||
## Ressources
|
||||
|
||||
- [Documentation GNOME Extensions](https://gjs.guide/extensions/)
|
||||
- [GTK4 Documentation](https://docs.gtk.org/gtk4/)
|
||||
- [Libadwaita Documentation](https://gnome.pages.gitlab.gnome.org/libadwaita/)
|
||||
- [GJS Examples](https://gitlab.gnome.org/GNOME/gjs/-/tree/master/examples)
|
||||
Reference in New Issue
Block a user