docs: review Monitor documentation in all seven translations

This commit is contained in:
Jonatan
2026-10-17 15:08:53 +02:00
parent ce1a3de719
commit dace78214a
209 changed files with 43788 additions and 1942 deletions
@@ -0,0 +1,174 @@
{
"meta": {
"title": "Tableau de bord Apps : un lanceur pour tous les liens web | ProxMenux",
"description": "Utilisez le tableau de bord Apps pour ouvrir les Liens Web LXC enregistrés et les liens personnalisés, les organiser par catégorie et revenir à l'invité qui possède chaque service."
},
"header": {
"title": "Tableau de bord : onglet Apps",
"description": "Un seul lanceur pour les interfaces web du nœud, qu'elles proviennent d'une application LXC enregistrée ou d'un lien personnalisé.",
"section": "ProxMenux Monitor · Tableau de bord"
},
"intro": {
"title": "Un lanceur, pas un installateur d'applications",
"body": "L'onglet <strong>Apps</strong> n'installe pas de logiciel et ne découvre pas lui-même les services. Il regroupe les liens sauvegardés dans une grille de recherche. Les liens LXC se configurent dans l'<appTabLink>onglet App</appTabLink> de l'invité ; les liens personnalisés ajoutent services VM, proxies inverses et tableaux de bord externes."
},
"sources": {
"heading": "Ce qui apparaît dans Apps",
"intro": "Chaque URL de lancement devient sa propre carte. La source détermine où cette carte est éditée, mais pas comment elle semble pendant l'utilisation normale.",
"colSource": "Source",
"colAppears": "Ce qui apparaît",
"colManagedFrom": "Où elle est gérée",
"rows": [
{
"source": "Application de LXC enregistrée",
"appears": "Une carte pour chaque lien Web enregistré sur l'enregistrement de l'application.",
"managedFrom": "VMs & LXCs → modale LXC → App"
},
{
"source": "Lien personnalisé lié à un invité",
"appears": "URL de service associée à un VM ou LXC.",
"managedFrom": "Apps → Modifier"
},
{
"source": "Lien personnalisé sans association",
"appears": "Toute destination HTTP(S), y compris un service externe ou derrière un proxy inverse.",
"managedFrom": "Apps → Modifier"
}
],
"relationshipTitle": "Les applications et l'onglet LXC App ont des tâches différentes",
"relationshipBody": "L'<appTabLink>onglet App</appTabLink> du LXC gère l'identité, les liens web et le suivi facultatif des versions. <strong>Apps</strong> utilise ces liens pour les ouvrir rapidement. Modifier une carte LXC renvoie donc à la fiche de l'invité sans dupliquer la configuration."
},
"cards": {
"heading": "Comment utiliser une carte",
"intro": "La carte entière est la cible de lancement, tandis que ses petites commandes fournissent le contexte sans ouvrir le service.",
"items": [
"Cliquez sur la carte pour ouvrir son URL dans un nouvel onglet de navigateur.",
"Le logo utilise le logo Web Link d'abord et revient au logo de l'application le cas échéant.",
"La puce de catégorie utilise la même couleur et la même étiquette que le lien Web correspondant dans l'onglet LXC App.",
"L'étiquette de l'invité identifie la VM ou le LXC associé. Un clic ouvre sa fenêtre : les liens LXC ouvrent <strong>App</strong>, ceux des VM <strong>État</strong>.",
"Une flèche vers le haut violet signifie que l'application spécifique ou l'image Docker a une mise à jour disponible. Ce n'est pas une mise à jour générale pour tout l'invité."
]
},
"toolbar": {
"heading": "Recherche, filtre et tri",
"intro": "La barre d'outils rétrécit une grande collection d'applications sans changer les enregistrements enregistrés.",
"items": [
"La recherche correspond au nom de l'application, au nom de l'invité, au VMID et à la catégorie.",
"Le filtre de catégorie montre une catégorie à la fois ou toutes les applications.",
"Triez par <strong>Nom</strong>, <strong>ID</strong> ou <strong>Catégorie</strong>. Le tri par catégorie ajoute des titres entre les groupes de cartes.",
"L'ordre est mémorisé dans ce navigateur. Le texte de recherche et le filtre de catégorie sont réinitialisés à la prochaine visite.",
"L'onglet Apps reste disponible lorsque la grille est vide, de sorte que le premier lien personnalisé peut être ajouté sans enregistrer d'abord une application LXC."
]
},
"customLinks": {
"heading": "Ajout et édition de liens Web personnalisés",
"intro": "Utilisez un lien personnalisé lorsque le service n'est pas représenté par une application LXC enregistrée.",
"steps": [
"Appuyez sur <strong>Ajouter le lien</strong> depuis la barre d'outils ou l'état vide.",
"Saisissez un nom et une URL complète <code>http://</code> ou <code>https://</code>.",
"Ajouter un logo, choisir ou créer une catégorie et lier le lien à un VM ou LXC.",
"Enregistrez le lien. Sa carte apparaît immédiatement dans la grille.",
"Pour modifier ou supprimer un lien personnalisé, cliquez sur <strong>Modifier</strong> puis sur le crayon de sa carte."
],
"colField": "Champ",
"colRequired": "Requis",
"colPurpose": "Objet",
"fields": [
{
"field": "Nom",
"required": "Oui",
"purpose": "Titre de la carte et terme de recherche."
},
{
"field": "URL",
"required": "Oui",
"purpose": "La destination complète HTTP(S) ouverte par la carte."
},
{
"field": "URL du logo",
"required": "Non",
"purpose": "Une image à distance affichée sur la carte."
},
{
"field": "Catégorie",
"required": "Non",
"purpose": "Ajoute un badge partagé et permet le filtrage de catégorie."
},
{
"field": "Association à l'invité",
"required": "Non",
"purpose": "Associé le lien avec un VM ou LXC et permet le raccourci invité."
}
],
"editTitle": "Modifier la source de la vérité",
"editBody": "Le mode édition affiche des crayons uniquement pour les liens personnalisés. Pour une carte LXC, ouvrez l'<appTabLink>onglet App</appTabLink> de l'invité et modifiez le lien sauvegardé."
},
"categories": {
"heading": "Catégories et signaux de mise à jour",
"intro": "Les catégories organisent les liens ; les indicateurs de mise à jour décrivent le logiciel. Ces fonctions sont volontairement séparées.",
"items": [
"L'enregistrement LXC assisté par catalogue peut préremplir une catégorie, mais il reste modifiable.",
"Les noms de catégorie personnalisés peuvent être créés à partir du même sélecteur, puis réutilisés par le filtre.",
"Les couleurs de catégorie sont déterministes et s'adaptent au thème clair ou sombre. Les gammes violet et rouge sont réservées aux états de mise à jour et de danger.",
"Pour Docker, ProxMenux associe la carte à son conteneur ou son image et indique les mises à jour de cette image. Celles de Docker Engine restent dans l'<updatesLink>onglet Mises à jour</updatesLink> du LXC."
]
},
"persistence": {
"heading": "Persistance et comportement de cache",
"intro": "Le tableau de bord utilise les données déjà disponibles dans Monitor sans analyser à nouveau chaque invité.",
"items": [
"Les liens personnalisés sont enregistrés de manière atomique dans <code>/etc/proxmenux/custom_links.json</code> et chargés en mémoire au démarrage de Monitor.",
"Les liens LXC restent dans la fiche de leur application enregistrée dans Monitor ; le tableau de bord Apps ne les duplique pas dans le fichier des liens personnalisés.",
"Création, édition ou suppression d'un lien personnalisé rafraîchit immédiatement la liste in-memory.",
"La préférence de tri est locale au navigateur, sans synchronisation entre appareils ou utilisateurs.",
"La position supérieure des applications est contrôlée séparément par <settingsLink>Paramètres → Ordre de navigation</settingsLink>."
]
},
"troubleshooting": {
"heading": "Situations communes",
"colProblem": "Situation actuelle",
"colResolution": "Résolution",
"rows": [
{
"problem": "Une application LXC est enregistrée mais aucune carte n'apparaît",
"resolution": "Ouvrez son onglet App et ajoutez au moins un lien Web. Le suivi des versions ne crée pas à lui seul une carte de lanceur."
},
{
"problem": "L'URL ou le logo est faux",
"resolution": "Modifier le lien personnalisé dans les applications, ou modifier le lien Web dans l'onglet propriétaire de l'application LXC."
},
{
"problem": "Il manque un service Docker",
"resolution": "Modifiez l'application Docker enregistrée et enregistrez le port web publié du service en tant que lien Web."
},
{
"problem": "La flèche pourpre se réfère à la mauvaise mise à jour Docker",
"resolution": "Consultez le nom et la description du lien Web afin qu'ils puissent être adaptés au conteneur ou à l'image prévu."
},
{
"problem": "Les applications s'ouvrent en premier lieu au lieu de Aperçu du système",
"resolution": "Le premier élément enregistré dans Paramètres → L'ordre de navigation devient l'onglet d'atterrissage. Restaurer l'ordre par défaut ou déplacer Aperçu d'abord."
}
]
},
"whereNext": {
"heading": "Où aller ensuite",
"items": [
{
"label": "Onglet de l'application LXC",
"href": "/docs/monitor/dashboard/vms-lxcs/app",
"tail": "— enregistrer les applications, les liens Web et le suivi facultatif des versions."
},
{
"label": "Onglet Mises à jour LXC",
"href": "/docs/monitor/dashboard/vms-lxcs/updates",
"tail": " — configurer et lancer les mises à jour des applications, de Docker Engine et des images."
},
{
"label": "Onglet Paramètres",
"href": "/docs/monitor/dashboard/settings#navigation-order",
"tail": "— modifier l'ordre de navigation et l'onglet d'atterrissage."
}
]
}
}
@@ -0,0 +1,248 @@
{
"meta": {
"title": "ProxMenux Monitor — Tableau de bord : Matériel | Documentation ProxMenux",
"description": "L'onglet Matériel inventorie la machine physique : CPU, carte mère, modules mémoire, capteurs thermiques, GPU avec surveillance par emplacement et installation du pilote en un clic, accélérateurs Coral TPU, résumé du stockage avec vitesses de liaison, listes PCI et USB, consommation, alimentations, ventilateurs et état de l'onduleur."
},
"header": {
"title": "Tableau de bord : onglet matériel",
"description": "La machine physique en un seul écran — CPU et identité carte mère, chaque module de mémoire, capteurs thermiques dans tous les sous-systèmes, GPU avec utilisation en direct et un installateur de pilote intégré, Coral TPU, chaque PCI et périphérique USB avec son pilote de noyau, l'inventaire du disque complet avec des vitesses de liaison négociées, plus la puissance, le refroidissement et l'UPS.",
"section": "ProxMenux Monitor · Tableau de bord"
},
"intro": {
"title": "Construit à partir d'outils standard",
"body": "La plupart de cet onglet est analysé à partir de <code>lscpu</code>, <code>dmidecode</code>, <code>lspci</code>, <code>lsusb</code>, <code>lsblk</code>, <code>smartctl</code>, <code>nvme</code>, <code>sensors</code>, <code>nvidia-smi</code>, <code>intel_gpu_top</code>, <code>amdgpu_top</code>, <code>ipmitool</code> et <code>upsc</code>. Les sections ne rendent que lorsque l'outil concerné renvoie des données, de sorte qu'un hôte sans UPS n'affiche pas la carte UPS et qu'un hôte sans IPMI n'affiche pas de chiffres de puissance hors bande."
},
"thresholds": {
"title": "Couleurs et seuils appliqués ici",
"intro": "Chaque indicateur et mesure de température suit la même échelle : <green/> <strong>vert</strong> sous Avertissement, <amber/> <strong>ambre</strong> entre Avertissement et Critique, <red/> <strong>rouge</strong> à partir de Critique. Valeurs recommandées fournies avec ProxMenux :",
"items": [
"<strong>Température CPU</strong> — avertissement 80 °C, critique 90 °C.",
"<strong>Température du disque</strong> — HDD 60/65 °C · SSD 70/75 °C · NVMe 80/85 °C · SAS 55/65 °C (avertissement / critique)."
],
"outro": "Les valeurs sont configurables par hôte. <link>Paramètres → Seuils du moniteur de santé</link> centralise leur réglage et explique comment les adapter."
},
"sections": {
"heading": "Sections",
"intro": "Les sections apparaissent dans cet ordre, de haut en bas. Certaines exigent le matériel ou l'outil correspondant et sont indiquées <em>(conditionnel)</em> ci-dessous.",
"systemInfoTitle": "Informations système",
"systemInfoIntro": "Deux blocs côte à côte, toujours présents:",
"systemInfoItems": [
"<strong>CPU</strong> — modèle, microarchitecture, sockets/cœurs/threads, fréquences de base et boost, capacités de virtualisation (VT-x / AMD-V) et topologie du cache.",
"<strong>Carte mère</strong> — fabricant, modèle, version et date du BIOS, UUID SMBIOS. Permet de trouver la bonne page de téléchargement du fabricant pour le firmware."
],
"memoryTitle": "Modules de mémoire",
"memoryBody": "Une ligne par emplacement occupé selon <code>dmidecode</code> : étiquette, capacité du module, type (DDR4 / DDR5 / variantes ECC), vitesse configurée et nominale, fabricant, référence et numéro de série. Les emplacements vides sont grisés pour montrer les possibilités d'extension.",
"thermalTitle": "Surveillance thermique",
"thermalIntro": "Sept blocs alimentés par <code>lm-sensors</code>, <code>sysfs</code> et des collecteurs propres à chaque outil. Les capteurs hwmon de stockage sont associés au périphérique bloc physique, avec son modèle et son chemin <code>/dev/...</code>. Un bloc est masqué si sa catégorie ne contient aucun capteur.",
"thermalItems": [
"<strong>CPU</strong> — température du boîtier du processeur et de chaque cœur.",
"<strong>GPU</strong> — capteurs de GPU dédié via <code>nvidia-smi</code> / <code>amdgpu_top</code> et d'iGPU Intel. Inclut le point chaud et la température de jonction mémoire si le pilote les fournit.",
"<strong>NVME</strong> — température composite du contrôleur associée à son espace de noms NVMe exact.",
"<strong>HDD</strong> — <code>drivetemp</code> lectures pour les dispositifs de blocs rotatifs.",
"<strong>SSD</strong> — lectures <code>drivetemp</code> pour les dispositifs de blocs SATA/SAS non rotatifs.",
"<strong>PCI</strong> — capteurs qui se présentent comme des dispositifs fixés par PCI (HBA, cartes réseau avec capteurs internes).",
"<strong>OTHER</strong> — chipset, VRM, capteurs ambiants qui ne s'adaptent pas ailleurs."
]
},
"graphics": {
"heading": "Cartes graphiques",
"intro": "Chaque contrôleur vidéo apparaît dans une carte avec fabricant, modèle, type (<em>Intégré</em> / <em>PCI</em> / BMC), adresse PCI (BDF), pilote noyau et modules. <strong>Changer de mode</strong> bascule entre partage LXC avec pilote natif et passthrough VM (<code>vfio-pci</code>). <link>Changer le mode GPU (VM ↔ LXC)</link> explique les effets sur l'hôte.",
"vfioImageAlt": "Section des cartes graphiques montrant un GPU intégré à Matrox G200EH lié à mgag200 (Ready pour LXC) et un NVIDIA Quadro P400 lié à vfio-pci (Ready pour VM passthrough)",
"vfioImageCaption": "Deux GPU détectés : la puce Matrox BMC est sur le pilote natif et prête pour LXC ; le NVIDIA Quadro P400 est lié à <code>vfio-pci</code>, prêt pour le passage VM.",
"lxcImageAlt": "Cartes graphiques : iGPU Intel UHD Graphics avec i915 et NVIDIA Quadro P1000 avec nvidia, toutes deux prêtes pour les conteneurs LXC",
"lxcImageCaption": "Même noeud après avoir retourné la carte NVIDIA au pilote natif — les deux GPU sont maintenant prêts pour les conteneurs LXC.",
"realtimeTitle": "Fenêtre de surveillance en temps réel",
"realtimeBody": "Un clic ouvre la surveillance du GPU par emplacement, avec une requête à l'outil du fabricant toutes les trois secondes. Elle affiche fabricant, type, emplacement PCI, pilote, modules noyau, utilisation des moteurs (Render/3D, Video, Blitter, VideoEnhance), fréquences graphique et mémoire, température, consommation si disponible, VRAM et processus actifs avec leur charge moteur. Données de <code>/api/gpu/&lt;slot&gt;/realtime</code>.",
"toolsIntro": "L'outil fournisseur utilisé par GPU:",
"headerVendor": "Fournisseur",
"headerTool": "Outil",
"headerProject": "Projet",
"tools": [
{
"vendor": "NVIDIA",
"tool": "nvidia-smi",
"projectLabel": "developer.nvidia.com",
"projectHref": "https://developer.nvidia.com/nvidia-system-management-interface"
},
{
"vendor": "Intel iGPU",
"tool": "intel_gpu_top (igt-gpu-tools)",
"projectLabel": "gitlab.freedesktop.org",
"projectHref": "https://gitlab.freedesktop.org/drm/igt-gpu-tools"
},
{
"vendor": "AMD",
"tool": "amdgpu_top",
"projectLabel": "github.com/Umio-Yasuno/amdgpu_top",
"projectHref": "https://github.com/Umio-Yasuno/amdgpu_top"
},
{
"vendor": "Matrox / ASPEED (BMC)",
"tool": "— (affichage uniquement)",
"projectLabel": "Détecté et étiqueté comme BMC; aucun bloc en temps réel."
}
],
"nvidiaImageAlt": "Surveillance NVIDIA Quadro P1000 : fabricant NVIDIA, pilote nvidia chargé, fréquence graphique 1.26 GHz, mémoire 2.50 GHz, température 50 °C, moteurs à 0 %, aucun processus actif, mémoire totale 4096 MiB",
"nvidiaImageCaption": "NVIDIA Quadro P1000 avec pilote propriétaire : fréquences, température, barres d'utilisation des moteurs et processus actifs.",
"intelImageAlt": "Surveillance d'une iGPU Intel UHD Graphics avec i915 : consommation 11.31 W, charge vidéo 1 % et processus ffmpeg utilisant 8 MB",
"intelImageCaption": "Intel iGPU avec <code>i915</code> actif. La table Active Processes reprend un travail ffmpeg en utilisant le moteur vidéo.",
"amdImageAlt": "Surveillance du GPU intégré AMD Lucienne avec amdgpu : moteurs à 0 % et amdgpu_top comme processus actif",
"amdImageCaption": "iGPU AMD surveillée avec <code>amdgpu_top</code>. L'outil apparaît lui-même comme processus actif car il collecte les données en direct.",
"installTitle": "Installer le pilote NVIDIA depuis la fenêtre",
"installBody": "Avec <code>nouveau</code>/<code>nvidiafb</code> sans pilote propriétaire NVIDIA, les fréquences, la consommation et la charge par processus ne sont pas disponibles. La fenêtre propose <strong>Installer les pilotes NVIDIA</strong>, qui lance le script décrit dans <link>Installer les pilotes NVIDIA (hôte)</link>.",
"noDriverAlt": "Surveillance NVIDIA Quadro P620 avec nvidiafb et nouveau chargés, avertissement Surveillance étendue indisponible et bouton bleu Installer les pilotes NVIDIA",
"noDriverCaption": "Aucun pilote propriétaire installé : la fenêtre propose un installateur en un clic.",
"promptAlt": "Confirmation d'installation du pilote NVIDIA, avec GPU détectés, conteneurs LXC utilisant le passthrough NVIDIA et boutons Oui/Annuler",
"promptCaption": "Résumé avant installation : GPU détectés, conteneurs LXC avec passthrough NVIDIA et actions prévues. Aucune modification avant confirmation.",
"successAlt": "Sortie terminale montrant le pilote NVIDIA 580.105.08 installé avec succès et nvidia-smi signalant un Quadro P620",
"successCaption": "Installation réussie — le NVIDIA <code>.run</code> construit via DKMS, le service de persistance est en place, et <code>nvidia-smi</code> rapporte le GPU.",
"warningTitle": "Choisissez une version de pilote que votre GPU prend en charge",
"warningBody": "Les nouvelles branches NVIDIA abandonnent certaines anciennes familles GPU, comme Maxwell ou Kepler. Si <code>nvidia-smi</code> affiche <em>\"No devices were found\"</em> après l'installation ou si DKMS échoue, la branche peut être incompatible. Relancez avec une branche plus ancienne, comme legacy 470.x pour Kepler. Vérifiez la compatibilité sur la <a>page officielle de recherche des pilotes</a>.",
"whereGoIntro": "Où aller d'ici :",
"whereGoItems": [
"<link1>Installer les pilotes NVIDIA (hôte)</link1> — guide complet, matrice de compatibilité du noyau, correctif NVENC facultatif et propagation aux LXC.",
"<link2>Changer le mode GPU (VM ↔ LXC)</link2> — effets de la commande <em>Changer de mode</em> de la carte.",
"<link3>Ajouter un GPU à une VM (passthrough)</link3> et <link4>Ajouter un GPU à un LXC</link4> — première affectation d'un GPU non associé."
]
},
"coral": {
"heading": "Accélérateurs Coral TPU / AI",
"subHeading": "(conditionnel)",
"intro": "Apparaît avec des appareils Google Coral ou d'autres accélérateurs IA connectés. La fenêtre affiche connexion (M.2 / mini-PCIe / USB), largeur PCIe, ID fabricant/produit, support logiciel (<code>apex</code> dans le noyau pour PCIe, <code>libedgetpu</code> en espace utilisateur pour USB), modules (<code>gasket</code> + <code>apex</code>), nœuds (<code>/dev/apex_*</code>), état du runtime Edge TPU, température en direct et seuils d'alerte du firmware.",
"imageAlt": "Coral Edge TPU détail modal : connexion PCIe / M.2, PCIe 5.0 lien GT/s x1, fournisseur 1ac1:089a, pilote noyau apex, gasket et apex modules chargés, /dev/apex_0 présents, Edge TPU Runtime non installé, température 53.5 °C avec seuils d'avertissement matériels",
"imageCaption": "M.2 Coral avec les modules du noyau hôte chargés, le nœud du périphérique activé et les avertissements de température du micrologiciel exposés. La ligne d'exécution devient verte une fois que le runtime Edge TPU correspondant est installé.",
"pathsIntro": "Deux chemins d'installation existent selon le facteur de forme :",
"pathsItems": [
"<strong>M.2 / Mini-PCIe</strong> — l'hôte a besoin des modules du noyau <code>gasket</code> + <code>apex</code> construits via DKMS afin que le noeud du périphérique <code>/dev/apex_0</code> apparaisse au démarrage.",
"<strong>USB Accélérateur</strong> — l'hôte n'a besoin que de l'espace utilisateur Edge TPU (<code>libedgetpu1-std</code>) du dépôt APT de Google."
],
"outro": "<installLink>Installer Coral TPU sur l'hôte</installLink> détecte et gère les deux variantes. Contexte et runtime officiel sur <a>coral.ai/docs</a>. Ensuite, affectez l'appareil à un conteneur avec <lxcLink>Ajouter Coral TPU à un LXC</lxcLink>."
},
"storage": {
"heading": "Résumé du stockage",
"intro": "Tous les périphériques bloc connus du noyau, regroupés par type. Chaque disque montre son nom (<code>sda</code>, <code>nvme0n1</code>, <code>zram0</code>…), type (<em>SSD</em>, <em>HDD</em>, <em>NVMe SSD</em>), modèle et lien négocié. Un clic ouvre modèle, numéro de série, capacité, interface et vitesse de liaison actuelle et maximale.",
"imageAlt": "Résumé du stockage avec onze périphériques bloc (SSD SATA, HDD SATA, SSD NVMe et zram), modèles et liens négociés ; deux NVMe en 3.0 x4 avec vitesse actuelle surlignée",
"imageCaption": "Onze appareils sur ce nœud. Les liens SATA sont affichés sous la forme <em>SATA &lt;version&gt;, &lt;Gb/s&gt; (current: ...)</em> ; les NVMe sous la forme <em>&lt;PCIe gen&gt; x&lt;width&gt;</em>.",
"nvmeBody": "Pour chaque NVMe, la ligne compare le lien négocié au maximum pris en charge. S'ils diffèrent, par exemple un SSD Gen3 x4 à <strong>3.0 x1</strong> dans un emplacement câblé sur une voie, la valeur actuelle apparaît en ambre. Utile pour diagnostiquer un disque lent ou une réaffectation des voies après une mise à jour BIOS.",
"nvmeModalAlt": "NVMe drive detail modal pour nvme0n1: NVMe type SSD, 953.9 capacité GB, vitesse de liaison actuelle 3.0 x1 mis en évidence en ambre, vitesse de liaison maximale 3.0 x4, modèle WDC CL SN720, numéro de série, interface PCIe/NVMe",
"nvmeModalCaption": "Détails NVMe avec lien réduit : le disque prend en charge x4, mais l'emplacement est câblé en x1.",
"outro": "Données SMART, autotests, historique et rapport PDF sont dans <storageLink>Tableau de bord : Stockage</storageLink>. Les mêmes données alimentent <smartLink>Santé et tests SMART des disques</smartLink>. Un test long lancé par le script écrit le JSON affiché dans <em>Stockage → Historique</em>."
},
"pci": {
"heading": "Périphériques PCI",
"intro": "Appareils PCI identifiés par leur <strong>BDF PCI</strong> (Bus:Device.Function, par exemple <code>03:00.0</code>) et classe (<em>Contrôleur de stockage</em>, <em>Contrôleur USB</em>, <em>Carte graphique</em>, <em>Contrôleur réseau</em>, <em>Contrôleur audio</em>…). Chaque carte montre fabricant, nom et <strong>pilote noyau associé</strong>, utiles pour diagnostiquer passthrough, groupes IOMMU ou mauvais pilote.",
"imageAlt": "PCI Devices section énumérant quinze périphériques regroupés par classe: contrôleurs de stockage sur ahci/nvme, contrôleurs USB, cartes graphiques (un sur vfio-pci, un sur le pilote natif), contrôleurs réseau sur igb / tg3, un contrôleur audio à côté d'un GPU passé",
"imageCaption": "Quinze appareils sur ce nœud. Notez que le GPU et sa fonction audio associée sont liés au <code>vfio-pci</code> — c'est-à-dire une carte préparée pour la transmission du VM.",
"bdfTitle": "Lecture du BDF",
"bdfBody": "<code>03:00.0</code> signifie bus PCI <code>03</code>, périphérique <code>00</code>, fonction <code>0</code>. Les GPU dédiés utilisent généralement <code>.0</code> pour le GPU et <code>.1</code> pour l'audio HDMI. Les deux fonctions sont transmises ensemble à la VM ; <link>Changer le mode GPU</link> nettoie donc aussi les associations audio orphelines en quittant le mode VM."
},
"usb": {
"heading": "Périphériques USB",
"intro": "Appareils USB avec fabricant et produit, version USB, adresse <code>bus:device</code>, ID <code>vendor:product</code> et pilote noyau. Classement par rôle : <em>Communications</em> (adaptateurs Z-Wave / Zigbee), <em>Onduleur</em>, stockage ou HID. Les appareils sont ainsi identifiables sans comparer leurs ID.",
"imageAlt": "Appareils USB : Aeotec Z-Wave Z-Stick, coordinateur Zigbee ConBee II et onduleur Ellipse ECO, avec version USB, adresse, ID vendor:product et pilote associé",
"imageCaption": "Trois appareils USB – deux radios d'automation sur <code>usbfs</code> et un UPS sur <code>usbfs</code> (NUT lui parle par libusb)."
},
"power": {
"heading": "Consommation d'énergie",
"subHeading": "(conditionnel)",
"intro": "Apparaît si l'hôte fournit des mesures de puissance. Deux sources indépendantes sont affichées lorsqu'elles sont disponibles :",
"items": [
"<strong>Consommation totale ACPI / IPMI</strong> — puissance de tout le système mesurée par un capteur de carte mère ou le BMC. Courant sur les cartes serveur.",
"<strong>Puissance du processeur</strong> — compteurs Intel RAPL ou équivalent AMD. Distingue la consommation CPU du reste sur les cartes grand public sans mesure globale."
],
"supplyImageAlt": "Consommation : 198 W au total via ACPI et deux alimentations à l'état OK, délivrant 185 W et 5 W",
"supplyImageCaption": "Carte serveur avec un capteur de puissance ACPI unique et deux PSU signalés par IPMI — le deuxième PSU est le redondant, au ralenti à 5 W.",
"cpuImageAlt": "Consommation sur une carte grand public : seulement 8.7 W de CPU via Intel RAPL",
"cpuImageCaption": "Carte grand public sans capteur global : seule la consommation CPU via RAPL est affichée."
},
"psu": {
"heading": "Alimentations",
"subHeading": "(conditionnel)",
"body": "Sur les machines serveur à double alimentation, IPMI montre présence (PSU 1 / PSU 2 / …), tension d'entrée, puissance de sortie et état OK/défaillant. À vérifier après une coupure électrique sur un nœud à alimentations redondantes."
},
"fans": {
"heading": "Ventilateurs système",
"subHeading": "(conditionnel)",
"body": "Vitesse de chaque ventilateur en tr/min avec mini-courbe si disponible. Sans mesures individuelles, une seule valeur de ventilateur du châssis est affichée."
},
"ups": {
"heading": "Statut UPS",
"subHeading": "(conditionnel)",
"body": "Apparaît avec un serveur NUT (Network UPS Tools) configuré et joignable. Affiche état (secteur / batterie / charge / batterie faible), niveau de batterie, autonomie estimée, taux de charge de l'onduleur, tension d'entrée, modèle et firmware. Les données alimentent aussi <em>Sécurité et certificats</em> du moniteur de santé : le passage sur batterie est immédiatement signalé."
},
"dataCollected": {
"heading": "Comment les données sont collectées",
"headerSection": "Section de l'onglet",
"headerEndpoint": "Point de terminaison",
"headerSource": "Source",
"rows": [
{
"section": "Inventaire statique (PCI, CPU, BIOS)",
"endpoint": "/api/hardware",
"source": "<code>lspci -vmm</code>, <code>/proc/cpuinfo</code>, <code>dmidecode</code>; mis en cache pendant toute la durée du processus."
},
{
"section": "Valeurs réelles du capteur",
"endpoint": "/api/hardware/live",
"source": "<code>sensors</code> (lm-sensors), <code>/sys/class/hwmon</code> et <code>/sys/block</code> identifient les périphériques de stockage. Les températures restent en direct ; seule la correspondance hwmon-appareil est mise en cache 60 secondes."
},
{
"section": "Historique de température CPU",
"endpoint": "/api/temperature/history",
"source": "Série temporelle enregistrée toutes les 60 secondes par le collecteur de température et stockée dans SQLite."
},
{
"section": "GPU métriques vivantes",
"endpoint": "/api/gpu/<slot>/realtime",
"source": "NVIDIA: <code>nvidia-smi --query-gpu=...</code>. Intel: <code>intel_gpu_top</code>. AMD: sysfs <code>/sys/class/drm/cardN</code>."
}
],
"codeComment1": "# Comparer l'inventaire à la vue du système d'exploitation",
"codeComment2": "# Confirmer la carte GPU que le tableau de bord voit"
},
"whereNext": {
"heading": "Où aller ensuite",
"items": [
{
"label": "Installer les pilotes NVIDIA (host)",
"href": "/docs/hardware/nvidia-host",
"tail": " — script lancé par le bouton d'installation de la fenêtre GPU."
},
{
"label": "Changer le mode GPU (VM ↔ LXC)",
"href": "/docs/hardware/switch-gpu-mode",
"tail": " — effets sur l'hôte du changement de mode dans chaque carte GPU."
},
{
"label": "Installez Coral TPU sur l'hôte",
"href": "/docs/hardware/install-coral-tpu-host",
"tail": " — installation du module noyau et du runtime Coral."
},
{
"label": "Santé et test du disque SMART",
"href": "/docs/disk-manager/smart-disk-test",
"tail": " — script qui produit les données SMART affichées dans les détails du disque sous Stockage."
},
{
"label": "Tableau de bord : onglet de stockage",
"href": "/docs/monitor/dashboard/storage",
"tail": "— tableau complet des attributs SMART, historique d'auto-test et rapport PDF."
},
{
"label": "Moniteur de santé",
"href": "/docs/monitor/health-monitor",
"tail": " — catégorie CPU et température, qui utilise les mêmes capteurs."
},
{
"label": "Référence de l’API",
"href": "/docs/monitor/api",
"tail": " — points de terminaison matériel et GPU."
},
{
"label": "Index du tableau de bord",
"href": "/docs/monitor/dashboard",
"tail": "— les autres onglets."
}
]
}
}
@@ -0,0 +1,101 @@
{
"meta": {
"title": "ProxMenux Monitor — Tableau de bord | Documentation ProxMenux",
"description": "Le tableau de bord est l'interface principale de ProxMenux Monitor : dix onglets, dont le lanceur Apps, un en-tête global et un ordre de navigation configurable."
},
"header": {
"title": "Tableau de bord",
"description": "La vue quotidienne de ProxMenux Monitor : dix onglets, dont le lanceur Apps, un en-tête global et un ordre de navigation configurable.",
"section": "ProxMenux Monitor"
},
"oneHeader": {
"title": "Un en-tête, dix onglets",
"body": "L'en-tête (logo, nom du nœud, indicateur d'état, durée de fonctionnement, actualisation et thème) reste visible. L'onglet actif change toute la zone de contenu. La couleur de l'indicateur reflète la catégorie la plus grave du <link>moniteur d'état</link> : la même donnée est affichée sur le tableau de bord."
},
"tabs": {
"heading": "Les dix onglets",
"intro": "Chaque onglet a sa propre page dédiée. Les pages sont ajoutées progressivement à mesure que la documentation est remplie; ci-dessous est la liste complète et la responsabilité de chacun.",
"headerTab": "onglet",
"headerOwns": "Ce que cet onglet couvre",
"rows": [
{
"name": "Présentation du système",
"linksTo": "/docs/monitor/dashboard/system-overview",
"owns": "CPU / mémoire / widgets de température, nombre de VM et LXC actifs, graphiques historiques, stockage et résumés réseau. Onglet d'atterrissage par défaut jusqu'à ce que l'ordre de navigation soit personnalisé."
},
{
"name": "Applications",
"linksTo": "/docs/monitor/dashboard/apps",
"owns": "Lanceur unifié de liens web LXC enregistrés et de liens personnalisés, avec catégories, recherche, raccourcis vers les invités et indicateurs de mise à jour par application."
},
{
"name": "Stockage",
"owns": "Pools Proxmox, disques physiques, données SMART, état ZFS, usure et durée de vie, historique d'observation."
},
{
"name": "Réseau",
"owns": "Interfaces physiques, bonds, bridges et OVS, adresses IP/MAC, graphiques RX/TX et historique RRD par interface."
},
{
"name": "VM et LXC",
"owns": "Inventaire des invités, détails de configuration, métriques et journaux, actions de démarrage, arrêt, redémarrage et extinction."
},
{
"name": "Matériel",
"owns": "Modèle et topologie CPU, mise en page de mémoire, topologie PCIe, GPUs avec surveillance en temps réel per-slot."
},
{
"name": "Journaux système",
"owns": "Live <code>journalctl</code> avec filtres, historique des tâches Proxmox, journal de notification, paquets de journaux téléchargeables."
},
{
"name": "Terminal",
"owns": "Shell vers l'hôte ou toute VM/CT dans le navigateur, avec <code>xterm.js</code> via WebSockets."
},
{
"name": "Sécurité",
"owns": "Configuration auth, mot de passe / 2FA / API jetons, journal d'audit, panneau Fail2Ban optionnel, déploiement Secure Gateway."
},
{
"name": "Paramètres",
"owns": "Langue de Monitor, ordre de navigation, canaux de notification, fournisseur IA, seuils de surveillance, exclusions et inventaire des optimisations après installation."
}
]
},
"headerAnatomy": {
"heading": "Anatomie en-tête",
"items": [
"<strong>Logo + nom du produit</strong> sur la gauche. Le logo se transforme en une variante \"mise à jour disponible\" quand une nouvelle version de Monitor est détectée.",
"<strong>Identité du nœud</strong> : nom obtenu par <code>pvesh get /nodes</code>, avec <code>hostname</code> en solution de repli.",
"<strong>Indicateur d'état</strong> : Sain (vert), Avertissement (jaune), Critique (rouge). Un clic ouvre le moniteur d'état. Un badge bleu <em>info</em> apparaît si des éléments ignorés restent dans leur période de suppression.",
"<strong>Durée de fonctionnement</strong> : temps d'activité de l'hôte dans un format lisible.",
"<strong>Bouton Actualiser</strong> : relance les appels API des données en direct sans recharger toute la page.",
"<strong>Sélecteur de thème</strong> : clair, sombre ou système. Enregistré dans <code>localStorage</code>."
]
},
"whereNext": {
"heading": "Où aller ensuite",
"items": [
{
"label": "onglet Apps",
"href": "/docs/monitor/dashboard/apps",
"tail": " — lanceur unifié de liens web et relation avec les applications LXC enregistrées."
},
{
"label": "Onglet Aperçu du système",
"href": "/docs/monitor/dashboard/system-overview",
"tail": "— l'onglet d'atterrissage, entièrement documenté."
},
{
"label": "Moniteur de santé",
"href": "/docs/monitor/health-monitor",
"tail": " — fenêtre de l'indicateur d'état, avec le détail des dix catégories."
},
{
"label": "Architecture",
"href": "/docs/monitor/architecture",
"tail": "— comment le tableau de bord parle au moteur de Flask."
}
]
}
}
@@ -0,0 +1,251 @@
{
"meta": {
"title": "ProxMenux Monitor — Tableau de bord : onglet Réseau | Documentation ProxMenux",
"description": "L’onglet Réseau répertorie les interfaces de l’hôte : cartes physiques, ponts, agrégats, VLAN et interfaces virtuelles VM/LXC. Le détail affiche IP, MAC, état, membres de l’agrégat, trafic depuis le démarrage et historique RRD."
},
"header": {
"title": "Tableau de bord : onglet réseau",
"description": "Les interfaces signalées par le noyau — cartes physiques, ponts, agrégats, VLAN et ports virtuels VM/LXC — sont regroupées en trois cartes. Cliquez sur une ligne pour voir les adresses, compteurs de trafic et données historiques RRD.",
"section": "ProxMenux Monitor · Tableau de bord"
},
"intro": {
"title": "Données actuelles et historiques",
"body": "L’état actuel provient de <code>psutil.net_if_stats()</code> et d’<code>ip</code>, l’historique de bande passante du stockage RRD Proxmox via <code>/api/network/&lt;interface&gt;/metrics</code>. Les compteurs sont actualisés environ toutes les 5 secondes et les données RRD du graphique sont chargées à la demande."
},
"topRow": {
"heading": "Rangée supérieure : quatre cartes statistiques",
"headerCard": "Carte",
"headerWhat": "Ce qu'il montre",
"rows": [
{
"card": "Trafic réseau",
"what": "Taux agrégé RX / TX sur toutes les interfaces, formaté dans la bonne unité (bps / Kbps / Mbps / Gbps)."
},
{
"card": "Interfaces actives",
"what": "Deux compteurs : <em>Physical X / Y</em> et <em>Bridges X / Y</em>, actifs par rapport au total. Un premier point à vérifier en cas de panne."
},
{
"card": "État du réseau",
"what": "État rapide : Sain / Avertissement / Critique selon la liaison, l’accessibilité de la passerelle et l’intégrité du pont. Reprend la catégorie <em>Interfaces réseau</em> de Health Monitor."
},
{
"card": "Latence du réseau",
"what": "Temps aller-retour vers la passerelle avec un petit graphique. Un clic ouvre le <strong>dialogue Latence réseau</strong> décrit plus bas : historique et test ping à la demande vers la passerelle, Cloudflare ou Google, avec rapport PDF téléchargeable."
}
]
},
"flow": {
"heading": "Diagramme de flux réseau",
"intro": "Entre la rangée supérieure et les trois cartes, <strong>Network Flow</strong> affiche la topologie en direct. Les chemins des paquets relient les cartes physiques, les ponts au centre, puis les VM et conteneurs. Les impulsions animées représentent le trafic rx/tx actuel sur chaque liaison.",
"imageAlt": "Schéma de flux réseau — NIC à gauche, hôte et ponts au milieu, VM et LXC à droite, avec impulsions animées sur chaque connexion",
"imageCaption": "Flux réseau — nœuds codés en couleurs plus comètes animées dont la direction et l'épaisseur reflètent le trafic en direct.",
"elementsTitle": "Ce que montre le diagramme",
"elementsIntro": "Chaque nœud représente une entrée du même inventaire que les cartes ci-dessous. La disposition en topologie rend leurs relations immédiatement visibles :",
"elements": [
"<strong>Cartes réseau</strong> (orange) — interfaces physiques avec liaison active ; les inactives sont estompées.",
"<strong>Hôte</strong> (orange) — l’hôte Proxmox entre les cartes réseau et les ponts. Un point fixe non cliquable.",
"<strong>Ponts</strong> (cyan) — ponts Linux et OVS avec au moins une machine invitée active. Les ponts inutilisés sont masqués pour centrer le diagramme sur le trafic réel.",
"<strong>LXC</strong> (cyan) — conteneurs en cours d’exécution reliés à un pont.",
"<strong>VM</strong> (violet) — machines virtuelles en cours d’exécution reliées à un pont.",
"Les VM et conteneurs arrêtés sont masqués."
],
"pulsesTitle": "Ce que l'animation encode",
"pulsesBody": "Les comètes animées qui voyagent sur chaque bord représentent un trafic en direct :",
"pulses": [
"<strong>Direction</strong> — vers la carte réseau signifie <em>tx</em> de la machine invitée ; vers la machine, <em>rx</em>.",
"L’<strong>épaisseur du trait</strong> augmente avec le débit rx+tx de la machine invitée. Une ligne animée faible reste visible sans trafic ; elle s’épaissit lorsque le trafic augmente.",
"<strong>Lueur de la tête de comète</strong> — teinte chaude vers 1 MB/s, intense à partir de 30 MB/s. Permet de repérer la machine invitée qui utilise le plus une carte réseau.",
"<strong>Clic</strong> — tous les nœuds sauf l’hôte ouvrent le dialogue de détail d’interface décrit plus bas. Cliquer sur l’hôte n’a aucun effet ; aucun dialogue ne lui est associé ici."
],
"useTitle": "Quand c'est utile",
"useBody": "Les cartes montrent <em>ce qui</em> existe ; le diagramme montre <em>les connexions</em> et le trafic. Il permet de repérer des machines sur un même pont, deux machines très actives partageant une carte réseau — un possible goulot d’étranglement — ou une VM saturant une liaison alors que les autres restent peu actives."
},
"groups": {
"heading": "Trois groupes d'interface",
"intro": "Trois cartes regroupent les interfaces par rôle. Chaque en-tête indique le nombre d’interfaces actives. Une étiquette colorée identifie le <strong>type</strong> de chaque interface :",
"badges": [
"Bleu <strong>Physical</strong> — réel NIC.",
"Vert <strong>Bridge</strong> — Pont Linux ou pont OVS (<code>vmbr*</code>).",
"Violet <strong>Bond</strong> — agrégat bond / LACP / active-backup.",
"Cyan <strong>VLAN</strong> — sous-interface VLAN (<code>vmbr0.10</code>, <code>eno1.42</code>, …)."
],
"clickable": "<strong>Chaque ligne est cliquable</strong> : interfaces physiques, virtuelles, ponts et agrégats. Le détail décrit plus bas affiche informations de base, IP, compteurs et historique RX/TX du stockage RRD Proxmox.",
"physicalTitle": "Interfaces physiques",
"physicalBody": "Interfaces physiques reconnues par le noyau : <code>eno1</code>, <code>enp4s0</code>, <code>eth0</code>, <code>wlp3s0</code>, etc. Chaque appareil a une ligne avec l’étiquette bleue <strong>Physical</strong> et l’état de liaison. Les <em>membres d’un agrégat</em> apparaissent aussi avec une référence à leur bond.",
"bridgeTitle": "Interfaces de pont",
"bridgeBody": "Ponts Linux (<code>vmbr0</code>, <code>vmbr1</code>, …) et OVS gérés par Proxmox. Chaque ligne affiche l’étiquette verte <strong>Bridge</strong>, l’interface physique si le pont n’a qu’un port et son état. Les agrégats portent l’étiquette violette <strong>Bond</strong>, les sous-interfaces VLAN l’étiquette cyan <strong>VLAN</strong>.",
"vmTitle": "Interfaces VM / LXC",
"vmBody": "Interfaces <code>tap*</code> et <code>veth*</code> créées au démarrage des machines invitées, une par carte virtuelle. L’en-tête affiche <em>X / Y Active</em> et les lignes renvoient à leur VM/CT dans l’onglet VMs et LXCs. Après un arrêt, les entrées inactives disparaissent au cycle d’actualisation suivant."
},
"drillIn": {
"heading": "Détail par interface",
"intro": "Un clic sur une ligne ouvre un dialogue avec cinq blocs :",
"headerBlock": "Bloc",
"headerContents": "Contenu",
"rows": [
{
"block": "Informations de base",
"contents": "Nom, type (physique / pont / bond / VLAN / vm), adresse MAC, état (actif / inactif), MTU et interface physique sous-jacente pour les types virtuels."
},
{
"block": "Membres du bond",
"contents": "Pour les bonds uniquement : chaque carte membre avec son état actif ou défaillant, le mode (active-backup / 802.3ad / balance-alb / …) et l’interface principale si elle est définie."
},
{
"block": "Adresses IP",
"contents": "Chaque adresse IPv4 / IPv6 avec la longueur du préfixe. Les adresses link-local configurées automatiquement sont listées mais grisées."
},
{
"block": "Graphique historique",
"contents": "Bande passante RX/TX sur la période choisie (1 heure / 24 heures / 7 jours / 30 jours / 1 an), obtenue via <code>/api/network/&lt;interface&gt;/metrics</code> (RRD Proxmox)."
},
{
"block": "Trafic depuis le dernier démarrage",
"contents": "Total des octets et paquets RX/TX depuis le dernier démarrage de l’hôte, avec compteurs d’erreurs et de paquets abandonnés."
}
],
"inactiveTitle": "Le détail des interfaces inactives reste accessible",
"inactiveBody": "Si l’interface est <em>inactive</em>, le dialogue affiche un avis « Interface inactive » sans compteurs actuels. La configuration — adresses et membres du bond — et l’historique restent visibles pour déterminer la cause et le moment de la panne."
},
"latency": {
"heading": "Dialogue Latence réseau",
"intro": "Cliquez sur <em>Latence réseau</em> dans la rangée supérieure pour ouvrir son dialogue : historique, test à la demande, trois cibles et rapport PDF téléchargeable.",
"targetsTitle": "Cibles",
"targetsIntro": "La liste en haut sélectionne la cible du ping :",
"targets": [
"<strong>Passerelle</strong> — votre routeur LAN. Teste uniquement le trajet local pour examiner les problèmes de commutateur ou de câblage sans inclure le WAN.",
"<strong>Cloudflare (1.1.1.1)</strong> — résolveur DNS public sur un réseau anycast. Teste le trajet WAN.",
"<strong>Google (8.8.8.8)</strong> — cible publique alternative pour vérifier les résultats ou en cas de problèmes régionaux de Cloudflare."
],
"mode1Title": "Mode 1 — Vue historique",
"mode1Alt": "Dialogue de latence en mode historique, cible Passerelle, période d’une heure et mesures précédentes tracées",
"mode1Caption": "Historique de la passerelle sur la dernière heure. Le collecteur de température et de latence enregistre les mesures en base toutes les 60 secondes.",
"mode1Body1": "Mode initial du dialogue. Une seconde liste choisit la période (<em>1 heure / 6 heures / 24 heures / 3 jours / 7 jours</em>). Au-dessus figurent Actuel / Minimum / Moyenne / Maximum et un état Excellent / Bon / Moyen / Mauvais selon les seuils ci-dessous.",
"mode1Body2": "Source : les mesures utilisées par Health Monitor pour détecter les ralentissements persistants. Le thread <code>_temperature_collector_loop</code> mesure la passerelle toutes les 60 secondes et conserve l’historique localement dans SQLite.",
"mode2Title": "Mode 2 — Essai en temps réel",
"mode2Alt": "Dialogue de latence exécutant un ping en temps réel vers Cloudflare, progression à 50 % et nouvelles mesures sur le graphique",
"mode2Caption": "Test de deux minutes vers Cloudflare avec une mesure toutes les cinq secondes, tracée dès son arrivée. <em>Arrêter</em> termine le test plus tôt ; <em>Tester à nouveau</em> ajoute des mesures aux mêmes données.",
"mode2Intro": "Changer la cible en Cloudflare ou Google commence un test de ping sur demande. Comportement:",
"mode2Items": [
"<strong>Durée</strong> — deux minutes par test avec barre de progression et secondes restantes.",
"<strong>Fréquence</strong> — une mesure toutes les cinq secondes, 24 par test.",
"<strong>Méthode</strong> — ICMP Echo Request (<code>ping</code>), trois pings consécutifs par mesure avec latence moyenne.",
"<strong>Stop</strong> – termine immédiatement le test ; des données partielles sont conservées.",
"<strong>Tester à nouveau</strong> — ajoute des mesures aux données existantes pour constituer un historique plus long sur plusieurs tests.",
"<strong>Indicateur d’état actuel</strong> — réévalué après chaque mesure selon les mêmes seuils Excellent / Bon / Moyen / Mauvais."
],
"thresholdsTitle": "Seuils de performance",
"headerStatus": "État",
"headerRange": "Intervalle",
"headerImpact": "Impact pratique",
"thresholdRows": [
{
"status": "Excellent",
"range": "< 50 ms",
"impact": "Optimisé pour les applications en temps réel, les jeux et les appels vidéo."
},
{
"status": "Bon",
"range": "50 – 100 ms",
"impact": "Acceptable pour la plupart des applications avec un impact minimal."
},
{
"status": "Moyen",
"range": "100 – 200 ms",
"impact": "Un retard notable. Peut affecter les applications VoIP et interactives."
},
{
"status": "Mauvais",
"range": "> 200 ms",
"impact": "Latence importante. Enquête recommandée."
}
],
"reportTitle": "Rapport de latence réseau (PDF)",
"reportIntro": "Les deux modes ont un bouton <strong>Rapport</strong> près du sélecteur de cible. Il génère un PDF des mesures que vous pouvez joindre à une demande d’assistance auprès de votre FAI.",
"reportPreviewAlt": "Première page PDF du rapport de latence : synthèse, jauge, statistiques, graphique et guide des seuils",
"reportPreviewCaption": "La première page contient la synthèse, la jauge, les statistiques principales, l’évolution de la latence et le guide des seuils. À partir de la page 2 figurent le tableau des mesures et la méthodologie.",
"downloadLabel": "Télécharger un exemple de rapport de latence (PDF)",
"sectionsIntro": "Le rapport comporte six sections :",
"sections": [
"<strong>Synthèse</strong> — jauge de 0 à plus de 300 ms avec zones verte, jaune et rouge ; état Excellent / Bon / Moyen / Mauvais ; cible, mode, nombre de mesures et résumé des pertes de paquets.",
"<strong>Statistiques de latence</strong> — quatre indicateurs : actuel, minimum, moyenne et maximum ; plus le nombre de mesures, la perte moyenne de paquets et la période du test.",
"<strong>Graphique de latence</strong> — graphique en aires des mesures du test, avec repères minimum, moyenne et maximum sur l’axe vertical.",
"<strong>Seuils de performance</strong> — la même échelle à quatre niveaux, avec un point coloré par niveau.",
"<strong>Résultats détaillés</strong> — tableau numéroté avec horodatage, latence, perte de paquets et état de chaque mesure. Permet de repérer les pics brefs masqués par les moyennes.",
"<strong>Méthodologie</strong> — ICMP Echo Request, trois pings consécutifs par mesure, nom et IP de la cible et évaluation finale issue de l’état."
],
"useCaseTitle": "Cas d’utilisation : assistance de votre FAI",
"useCaseBody": "Lancez deux minutes de test Cloudflare lorsque la connexion ralentit, prolongez avec <em>Tester à nouveau</em>, puis choisissez <em>Rapport</em>. Le PDF contient toutes les mesures et la méthodologie. Vous pouvez le joindre à une demande d’assistance avec les heures de l’incident ; le FAI décide des justificatifs nécessaires."
},
"excluding": {
"heading": "Exclure des interfaces de la surveillance",
"body1": "Vous pouvez exclure des interfaces de la surveillance : ponts volontairement désactivés, interfaces de test ou cartes retirées encore configurées. Le réglage est conservé dans <code>excluded_interfaces</code> : Health Monitor ne génère ni avertissements ni notifications et ne les inclut pas dans l’état global.",
"body2": "Dans le menu contextuel, choisissez <em>Exclure de la surveillance</em>. L’interface reste visible avec une étiquette violette <strong>exclue</strong>. Le même menu permet de réactiver la surveillance."
},
"dataCollected": {
"heading": "Comment les données sont collectées",
"headerSection": "Section de l'onglet",
"headerEndpoint": "Point de terminaison",
"headerSource": "Source",
"rows": [
{
"section": "Inventaire des interfaces",
"endpoint": "/api/network",
"source": "<code>ip -j addr</code> + <code>ip -j link</code> et inspection des bonds et ponts."
},
{
"section": "Cartes sommaires",
"endpoint": "/api/network/summary",
"source": "Synthèse de l’inventaire et nombre d’interfaces actives et inactives."
},
{
"section": "Historique RX/TX par interface",
"endpoint": "/api/network/<iface>/metrics",
"source": "Les compteurs actuels utilisent <code>/proc/net/dev</code> ; l’historique vient de RRD Proxmox via pvesh. Les interfaces VM/LXC utilisent les données de la machine invitée ; les interfaces physiques et ponts, celles du nœud."
},
{
"section": "Latence: actuelle",
"endpoint": "/api/network/latency/current",
"source": "Courte série de <code>ping</code> vers la passerelle ou la cible configurée."
},
{
"section": "Latence : historique",
"endpoint": "/api/network/latency/history",
"source": "Mesures enregistrées environ toutes les 60 secondes par le collecteur de température et de latence en arrière-plan."
}
],
"codeComment1": "# Vérifier l’état des interfaces affiché dans le tableau de bord",
"codeComment2": "# Vérifier une mesure actuelle de latence de bout en bout"
},
"whereNext": {
"heading": "Où aller ensuite",
"items": [
{
"label": "Moniteur de santé",
"href": "/docs/monitor/health-monitor",
"tail": " — catégorie Réseau et seuils de l’historique de latence."
},
{
"label": "Référence de l’API",
"href": "/docs/monitor/api",
"tail": " — points de terminaison réseau et latence."
},
{
"label": "Intégrations",
"href": "/docs/monitor/integrations",
"tail": " — la collecte Prometheus expose les mêmes métriques réseau."
},
{
"label": "Indice du tableau de bord",
"href": "/docs/monitor/dashboard",
"tail": "— les autres onglets."
},
{
"label": "ProxMenux → Réseau",
"href": "/docs/network",
"tail": "— le côté actions: analyse de pont, noms d'interface persistants, sauvegarde & redémarrage, iperf3."
}
]
}
}
@@ -0,0 +1,246 @@
{
"meta": {
"title": "ProxMenux Monitor — Tableau de bord : onglet Sécurité | Documentation ProxMenux",
"description": "L’onglet Sécurité regroupe les protections en deux colonnes : ProxMenux Monitor (authentification, SSL/HTTPS, jetons d’API, Secure Gateway) et Proxmox VE (pare-feu, Fail2Ban, audit Lynis). Découvrez l’assistant Secure Gateway, l’audit Lynis et l’installation et le réglage des règles Fail2Ban."
},
"header": {
"title": "Tableau de bord : onglet Sécurité",
"description": "Les contrôles de sécurité sont répartis en deux blocs : la configuration de Monitor (authentification, SSL, jetons, Secure Gateway) et celle de l’hôte Proxmox surveillé (pare-feu, Fail2Ban, Lynis).",
"section": "ProxMenux Monitor · Tableau de bord"
},
"intro": {
"title": "Deux périmètres, un onglet",
"body": "L’onglet Sécurité comporte deux sections : <strong>ProxMenux Monitor</strong> (paramètres du tableau de bord) et <strong>Proxmox VE</strong> (paramètres de l’hôte). Les cartes Fail2Ban et Lynis proposent d’installer ces outils s’ils sont absents, puis affichent leurs commandes une fois installés."
},
"monitor": {
"heading": "ProxMenux Monitor",
"intro": "Quatre cartes permettent de gérer l’accès au tableau de bord et l’authentification."
},
"auth": {
"heading": "Authentification",
"imageAlt": "Carte d’authentification avec l’état Activée, les boutons Déconnexion et Modifier le mot de passe, des informations sur l’authentification à deux facteurs et des boutons pour l’activer ou désactiver l’authentification",
"imageCaption": "Carte avec l’authentification activée : indicateur d’état, Modifier le mot de passe, Activer la 2FA et l’action destructive Désactiver l’authentification.",
"intro": "Cette carte gère la connexion au tableau de bord. Le premier lancement, la politique de mots de passe, la configuration TOTP et la récupération après perte de l’authentificateur sont décrits dans <link>Accès et authentification</link>. Cette carte permet de gérer ces paramètres au quotidien :",
"items": [
"<strong>État de l’authentification</strong> — indicateur <em>Activée</em> / <em>Désactivée</em> / <em>Refusée</em>.",
"<strong>Modifier le mot de passe</strong> — mot de passe actuel + nouveau mot de passe + confirmation.",
"<strong>Activer / Désactiver l’authentification à deux facteurs</strong> — ouvre le dialogue de configuration avec code QR à l’activation et demande le mot de passe actuel à la désactivation.",
"<strong>Désactiver l’authentification</strong> — action destructive qui réaffiche le dialogue initial <em>Protéger votre tableau de bord ?</em> lors de la prochaine visite."
]
},
"ssl": {
"heading": "SSL/HTTPS",
"imageAlt": "Carte SSL/HTTPS avec l’état HTTP sans SSL, le certificat Proxmox détecté avec son sujet, son émetteur et son expiration, et les options pour utiliser ce certificat ou un certificat personnalisé",
"imageCaption": "Carte SSL/HTTPS avec HTTPS désactivé. Monitor détecte le certificat installé sur l’hôte Proxmox et permet de l’utiliser en un clic. L’option <em>Utiliser un certificat personnalisé</em> permet de choisir vos propres fichiers stockés ailleurs.",
"intro": "Permet d’accéder au tableau de bord par HTTPS sans proxy inverse. La carte détecte le certificat utilisé par Proxmox dans <code>/etc/pve/local/</code> et affiche son sujet, son émetteur et sa date d’expiration pour vérification avant activation. Deux méthodes sont proposées :",
"items": [
"<strong>Utiliser le certificat Proxmox</strong> — Monitor réutilise le certificat de l’hôte en un clic. Adapté si PVE et le tableau de bord utilisent déjà le même nom DNS.",
"<strong>Utiliser un certificat personnalisé</strong> — collez les chemins absolus du certificat <code>.pem</code> et de la clé privée <code>.key</code>. Ils sont validés avant le redémarrage du service. Si le chargement échoue, le tableau de bord repasse automatiquement en HTTP et reste accessible."
],
"enabledAlt": "Carte SSL/HTTPS avec HTTPS activé, certificat actif avec les chemins pve-ssl.pem et pve-ssl.key et bouton Désactiver HTTPS",
"enabledCaption": "HTTPS actif — la carte affiche le certificat utilisé, ses chemins et l’action <em>Désactiver HTTPS</em>, qui rétablit HTTP sur le même port.",
"acmeTitle": "ACME / Let's Encrypt via Proxmox",
"acmeBody": "Si Let’s Encrypt est déjà configuré sur votre nœud Proxmox dans <em>Datacenter → Certificats → ACME</em>, le tableau de bord réutilise le certificat présenté aux navigateurs lorsque vous cliquez sur <em>Utiliser le certificat Proxmox</em>. Aucune configuration ACME distincte n’est nécessaire pour Monitor.",
"walkthroughLink": "Consultez <link>HTTPS pour ProxMenux Monitor</link> pour découvrir la détection du certificat ACME, les données écrites sur disque et l’utilisation d’une paire <code>.pem</code> / <code>.key</code> personnalisée."
},
"apiTokens": {
"heading": "Jetons d’accès à l’API",
"emptyAlt": "Carte de jetons d’accès à l’API vide, avec des informations sur les jetons et le bouton Générer un nouveau jeton d’API",
"emptyCaption": "Carte des jetons après une nouvelle installation. L’encadré <em>À propos des jetons d’API</em> résume leur durée de validité, leur utilisation et leur insertion dans les en-têtes <code>Authorization: Bearer</code>.",
"intro": "Jetons valables un an pour les intégrations automatisées : widgets Homepage, capteurs REST Home Assistant, collecteurs Grafana, flux n8n et scripts personnalisés. La carte passe par trois états : vide → formulaire → jeton généré.",
"generateBody": "<strong>Générer un jeton.</strong> Cliquez sur <em>Générer un nouveau jeton d’API</em>. Saisissez un <em>nom de jeton</em> descriptif pour l’identifier ensuite et votre <em>mot de passe</em> comme confirmation supplémentaire. Si la 2FA est activée, le code TOTP actuel est également demandé.",
"generateAlt": "Formulaire de génération d’un jeton d’API avec les champs Nom du jeton et Mot de passe et les boutons Générer et Annuler",
"generateCaption": "Formulaire de génération d’un jeton d’API : saisissez un nom et confirmez avec votre mot de passe et le code TOTP si la 2FA est activée.",
"saveBody": "<strong>Enregistrez immédiatement le jeton.</strong> Sa valeur complète s’affiche <strong>une seule fois</strong> après sa création. La carte le signale par un avis orange et un bouton de copie. Vous ne pourrez pas la récupérer ensuite : seul le préfixe restera visible dans la liste des jetons actifs.",
"generatedAlt": "Jeton d’API généré avec valeur masquée, bouton de copie, instructions pour l’en-tête Authorization: Bearer et liste des jetons actifs avec leur préfixe",
"generatedCaption": "Jeton généré : la valeur s’affiche une seule fois, avec un bouton de copie et l’extrait exact <code>Authorization: Bearer</code>. La liste des jetons actifs conserve le nom, le préfixe et la date de création pour permettre leur révocation individuelle.",
"outro": "Chaque jeton actif possède un bouton <em>Révoquer</em>. La révocation l’invalide immédiatement et interrompt les intégrations qui l’utilisent. Des exemples pour Homepage, Home Assistant, n8n et Prometheus figurent dans <link>Intégrations</link>."
},
"gateway": {
"heading": "Secure Gateway",
"cardAlt": "Carte Secure Gateway avant tout déploiement, avec le bouton Déployer Secure Gateway",
"cardCaption": "Carte Secure Gateway sur une nouvelle installation : un bouton lance l’assistant.",
"intro": "Accédez au tableau de bord, à l’interface web Proxmox et aux machines invitées depuis votre réseau <a>Tailscale</a>, sans exposer de port sur Internet. Monitor déploie sur l’hôte un conteneur LXC Alpine exécutant <code>tailscaled</code> comme routeur de sous-réseau. Après approbation dans la console Tailscale, vos appareils distants peuvent joindre l’adresse IP LAN de l’hôte depuis n’importe où.",
"wizardTitle": "Assistant étape par étape",
"wizardIntro": "Avant de cliquer sur <em>Deploy Secure Gateway</em>, générez une clé d’authentification dans la console Tailscale. L’assistant la demandera à l’étape 2.",
"step0Title": "0. Générer la clé d’authentification Tailscale",
"step0Body": "Connectez-vous à <a>login.tailscale.com/admin/settings/keys</a> et cliquez sur <em>Generate auth key…</em>. Choisissez une clé <em>préauthentifiée</em> pour éviter une connexion interactive depuis la passerelle. Copiez la valeur : elle ne s’affiche qu’une seule fois.",
"step0Alt": "Page Settings → Keys de la console Tailscale, avec le bouton Generate auth key mis en évidence",
"step0Caption": "Console d'administration Tailscale — <em>Paramètres → Clés → Générer la clé auth...</em>. Utilisez un compte Tailscale gratuit si vous n'en avez pas encore (lien à l'intérieur de l'assistant).",
"step1Title": "1. Ouvrez l'assistant",
"step1Body": "Revenez à l’onglet Sécurité et cliquez sur <em>Deploy Secure Gateway</em>. La première étape présente les fonctions et les prérequis.",
"step1Alt": "Introduction de l’assistant Secure Gateway : accès VPN sans redirection de ports et avec chiffrement de bout en bout",
"step1Caption": "Étape 1 — aperçu de ce que fournit la passerelle sécurisée et un rappel que vous aurez besoin d'un compte Tailscale gratuit.",
"step2Title": "2. Authentification Tailscale",
"step2Body": "Collez la clé d’authentification de l’étape 0 et choisissez un nom d’hôte. La passerelle apparaîtra sous ce nom dans la console Tailscale, généralement <code>proxmox-gateway</code> ou le nom de votre nœud.",
"step2Alt": "Étape de l’assistant Secure Gateway demandant la clé d’authentification Tailscale et le nom d’hôte de l’appareil, avec un lien pour générer la clé",
"step2Caption": "Étape 2 : collez la clé préauthentifiée et choisissez le nom d’hôte. Si vous avez sauté l’étape 0, le lien sous le champ ouvre la page Tailscale correspondante.",
"step3Title": "3. Portée de l'accès",
"step3Intro": "Choisissez les ressources accessibles depuis votre réseau Tailscale via la passerelle :",
"step3Items": [
"<strong>Proxmox Only</strong> — seulement l'interface utilisateur Proxmox et le moniteur. La plus petite surface d'attaque.",
"<strong>Réseau local complet</strong> — tout le sous-réseau LAN (détecté automatiquement depuis l'interface principale de l'hôte). Permet d'atteindre le NAS, les imprimantes, les VM et tout autre périphérique LAN.",
"<strong>Sous-réseaux personnalisés</strong> — indiquez les CIDR souhaités. Pour les configurations à plusieurs VLAN où seuls certains segments doivent être accessibles."
],
"step3Alt": "Étape Périmètre d’accès de l’assistant Secure Gateway avec les options Proxmox uniquement, Réseau local complet et Sous-réseaux personnalisés",
"step3Caption": "Étape 3 : choisissez le périmètre d’accès. <em>Réseau local complet</em> renseigne automatiquement le sous-réseau LAN détecté.",
"step4Title": "4. Options avancées (facultatif)",
"step4Intro": "Deux options, toutes deux <strong>désactivées par défaut</strong> :",
"step4Items": [
"<strong>Exit Node</strong> — une fois activé et sélectionné sur un appareil distant, tout le trafic Internet de cet appareil passe par la connexion WAN de l’hôte Proxmox. En voyage, le trafic de votre téléphone utilise ainsi votre connexion domestique.",
"<strong>Accepter les routes</strong> — permet à cette passerelle de joindre les réseaux annoncés par les <em>autres</em> routeurs de sous-réseau Tailscale, pour les installations multisites."
],
"step4Alt": "Étape Options avancées de Secure Gateway avec les cases Exit Node et Accept Routes",
"step4Caption": "Étape 4 : Exit Node et Accept Routes. Laissez ces deux options désactivées si vous souhaitez simplement accéder au tableau de bord depuis votre téléphone ou ordinateur portable.",
"step5Title": "5. Vérifier et déployer",
"step5Body": "Résumé final avant le déploiement. L’assistant rappelle l’étape manuelle à effectuer ensuite dans la console Tailscale : <strong>approuver la route de sous-réseau</strong>.",
"step5Alt": "Étape Vérifier et déployer de Secure Gateway avec le résumé du nom d’hôte, du mode d’accès, des réseaux, d’Exit Node et d’Accept Routes et le bouton Déployer la passerelle",
"step5Caption": "Étape 5 — examiner la configuration et le déploiement. L'avis bleu au bas annonce l'approbation de route en attente.",
"approvalTitle": "Une dernière étape manuelle dans Tailscale admin",
"approvalBody": "Après le déploiement, ouvrez <a>login.tailscale.com/admin/machines</a> et approuvez la route de sous-réseau annoncée par la passerelle. Sans cette approbation, les appareils distants du réseau Tailscale ne peuvent pas joindre les IP LAN via la passerelle. Tailscale signale les routes en attente en jaune sur la ligne de l’appareil : cliquez sur <em>Edit route settings</em> et cochez la route."
},
"pve": {
"heading": "Proxmox VE",
"intro": "Les protections de l’hôte : pare-feu, prévention des intrusions et audit de sécurité. Les cartes Fail2Ban et Lynis proposent leur installation si nécessaire, puis affichent leurs commandes de gestion."
},
"firewall": {
"heading": "Proxmox Firewall",
"imageAlt": "Carte du pare-feu Proxmox avec états du cluster et de l’hôte, règles d’accès rapide pour Monitor et l’interface web Proxmox, compteurs, liste des règles et bouton Ajouter une règle",
"imageCaption": "Carte du pare-feu Proxmox : interrupteurs pour le cluster et l’hôte, ports courants dans <em>Règles d’accès rapide</em>, compteurs dans <em>Aperçu des règles</em> et liste complète avec <em>+ Ajouter une règle</em>.",
"intro": "La carte gère la configuration du pare-feu Proxmox VE. Le moteur classique utilise <code>iptables</code>, l’alternative utilise <code>nftables</code>. Elle ne gère pas les règles créées hors de Proxmox. Trois blocs :",
"items": [
"<strong>Pare-feu du cluster + pare-feu de l’hôte</strong> — interrupteurs globaux. Le pare-feu du cluster doit être actif pour que les règles de l’hôte s’appliquent. La carte indique cette dépendance près du réglage.",
"<strong>Règles d’accès rapide</strong> — lignes prédéfinies pour <code>8008/TCP</code> (Monitor) et <code>8006/TCP</code> (interface web Proxmox), avec l’état autorisé, bloqué ou non protégé. L’interface Proxmox est autorisée par une macro de pare-feu <em>intégrée</em> qui ne peut pas être supprimée par erreur.",
"<strong>Aperçu des règles</strong> — compteurs du total des règles, des règles accept, des règles drop/reject et des ports distincts protégés. Les valeurs proviennent de <code>/etc/pve/firewall/cluster.fw</code> et <code>/etc/pve/nodes/&lt;node&gt;/host.fw</code>.",
"<strong>Règles du pare-feu</strong> — liste avec action, protocole, port, source et niveau. <em>+ Ajouter une règle</em> ouvre l’éditeur dans la carte ; la corbeille supprime la règle. Les modifications sont enregistrées dans les fichiers Proxmox et apparaissent aussi dans son interface (Datacenter / Node → Firewall)."
]
},
"fail2ban": {
"heading": "Fail2Ban",
"subHeading": "(selon l’état)",
"whatIs": "<strong>De quoi s’agit-il ?</strong> Fail2Ban est un service libre qui détecte les échecs de connexion répétés dans les journaux et bloque l’IP au niveau du pare-feu. Il protège SSH et les formulaires web contre les attaques par force brute continues. ProxMenux configure trois jails : SSH, connexion web Proxmox (port 8006) et connexion ProxMenux Monitor (port 8008).",
"notBundled": "Fail2Ban <strong>n’est pas fourni</strong>. La carte détecte sa présence et s’adapte : s’il manque, elle propose de l’installer en un clic. Une fois installé, elle affiche l’état des jails et les IP bloquées, et permet de régler le nombre de tentatives et la durée de blocage pour chaque jail.",
"notInstalledAlt": "Carte Fail2Ban non installé avec la protection prévue pour SSH, l’interface web Proxmox et Monitor via nftables et le bouton Installer et configurer Fail2Ban",
"notInstalledCaption": "La carte Fail2Ban avant l'installation — la boîte bleue prévisualise ce que l'installation va configurer.",
"clickBody": "Cliquez sur <em>Installer et configurer Fail2Ban</em> pour ouvrir un dialogue de confirmation répertoriant toutes les modifications du script sur l’hôte :",
"confirmAlt": "Confirmation Fail2Ban avec mode SSH agressif, protection Proxmox sur le port 8006 et Monitor sur le port 8008, détection de nftables, réglage des journaux journald et renforcement de SSH MaxAuthTries",
"confirmCaption": "Confirmation d’installation : liste des jails, réglage de la journalisation journald pour lire les événements SSH et renforcement supplémentaire de SSH (<code>MaxAuthTries=3</code>).",
"confirmIntro": "Après confirmation, un panneau affiche l’installation en direct : apt, configuration des jails et tests. Le mécanisme est le même que celui de l’installateur CLI ProxMenux.",
"progressAlt": "Panneau avec journal d’installation Fail2Ban : paquet, journald MaxLevelStore pour l’authentification, jails, détection de nftables, renforcement MaxAuthTries, test fail2ban-client et message de fin",
"progressCaption": "Installation en cours : chaque étape est consignée dans le panneau. Le message Connection closed en bas marque la fin de la transmission.",
"afterInstall": "Après l’installation, la carte affiche l’état en direct : jails configurés, IP bloquées et blocages récents. Les onglets séparent <em>Jails et IP bloquées</em> de l’<em>Activité récente</em>, les N dernières entrées du journal Fail2Ban.",
"activeAlt": "Carte Fail2Ban active avec trois jails (proxmenux, proxmox, sshd), compteurs des IP bloquées, du total des blocages et des tentatives échouées et lignes avec tentatives, durée de blocage, période et roue dentée",
"activeCaption": "Fail2Ban actif : les trois jails par défaut (<code>proxmenux</code>, <code>proxmox</code>, <code>sshd</code>) avec leurs réglages de tentatives, durée de blocage et période de détection.",
"tuneBody": "<strong>Régler les règles du jail.</strong> Cliquez sur sa roue dentée pour modifier <em>Max Retries</em>, <em>Ban Time</em> et <em>Find Time</em>, la période glissante de comptage des tentatives. Un blocage permanent dure jusqu’à sa levée manuelle. Le formulaire explique les valeurs courantes.",
"configAlt": "Formulaire du jail sshd avec Max Retries, Ban Time en secondes, option Permanent Ban, Find Time, aide sur les valeurs courantes et bouton Enregistrer la configuration",
"configCaption": "Modification du jail sshd : réduisez <em>Max Retries</em> si vous utilisez SSH uniquement depuis votre sous-réseau, ou augmentez <em>Ban Time</em> pour un tableau de bord exposé sur Internet.",
"outro": "Le guide <em>Installation, configuration et désinstallation</em> couvre aussi l’installation manuelle, la modification de SSH MaxAuthTries et le journal <code>proxmenux-auth.log</code>. Consultez <link>ProxMenux → Sécurité → Fail2Ban</link>.",
"calloutTitle": "Sans Fail2Ban, ce mécanisme ne bloque pas les IP",
"calloutBody": "ProxMenux Monitor vérifie les IP bloquées par Fail2Ban au <em>niveau applicatif</em> avant de traiter les requêtes Flask. Il interroge fail2ban-client et conserve le résultat en cache pendant 30 secondes ; il ne lit pas de table SQL de blocages. Sans Fail2Ban, les échecs sont consignés dans <code>proxmenux-auth.log</code>, mais ce mécanisme ne bloque pas les IP."
},
"lynis": {
"heading": "Audit de sécurité Lynis",
"subHeading": "(selon l’état)",
"whatIs": "<strong>De quoi s’agit-il ?</strong> Lynis est un outil libre d’audit de sécurité qui effectue environ 280 tests sur l’hôte : permissions, durcissement du noyau, SSH, vulnérabilités des paquets, politique cryptographique, tâches planifiées, identification des services, etc. Il produit un indice de durcissement de 0 à 100, des avertissements et des suggestions. C’est une référence courante pour évaluer les serveurs Debian.",
"whyUseful": "<strong>Pourquoi est-ce utile ?</strong> Évaluer la sécurité en lisant chaque fichier de configuration est difficile. Lynis repère les oublis courants : protections du noyau absentes, chiffrements SSH faibles, journaux non persistants ou <code>NOPASSWD</code> dans sudoers pour les comptes par défaut. Une nouvelle analyse après les réglages ProxMenux permet de comparer l’amélioration par un score.",
"notInstalledAlt": "Carte Lynis non installé avec bouton Installer Lynis et fonctions : indice de durcissement, détection des vulnérabilités, conformité et sources GitHub",
"notInstalledCaption": "Carte Lynis avant l'installation — la boîte bleue résume ce que l'outil fait.",
"notBundled": "Lynis <strong>n’est pas fourni</strong> non plus. ProxMenux l’installe directement depuis les sources officielles GitHub plutôt que depuis le paquet Debian.",
"confirmAlt": "Dialogue de confirmation Lynis présentant ses fonctions : indice de durcissement, détection des vulnérabilités, analyse de configuration, conformité et sources du dépôt officiel GitHub",
"confirmCaption": "Confirmation d’installation indiquant explicitement la source GitHub.",
"progressAlt": "Panneau d’installation Lynis en direct, avec installation de la dernière version, confirmation de la version 3.1.6 et message de fin",
"progressCaption": "Installation en cours : le panneau affiche le journal en direct, comme pour Fail2Ban.",
"afterInstall": "Après l’installation, la carte affiche la version et un historique d’audit vide. Cliquez sur <em>Lancer l’audit de sécurité</em> pour démarrer la première analyse.",
"installedAlt": "Carte Lynis après installation avec version 3.1.6, date de dernière analyse, indice de durcissement 0, avertissements 0, suggestions 0, rapport vide et bouton Lancer l’audit de sécurité",
"installedCaption": "Lynis est installé, sans audit pour le moment. Les indicateurs affichent initialement zéro.",
"runningAlt": "Carte Lynis pendant l’audit avec message d’analyse en cours, durée estimée de 2 à 5 minutes et bouton Audit en cours désactivé",
"runningCaption": "Audit en cours : le bouton affiche un indicateur de chargement et la carte précise que l’analyse peut durer de 2 à 5 minutes.",
"finishedBody": "À la fin, la carte affiche les résultats : indice de durcissement, avertissements, suggestions et liste des <em>Rapports d’audit</em> avec les analyses précédentes.",
"resultsAlt": "Carte Lynis avec indice 71, détail Lynis 66 et PVE 71, 3 avertissements, 40 suggestions, score adapté à Proxmox de 71 sur 100 dans la catégorie Bon, rapports téléchargeables en PDF et bouton Lancer l’audit de sécurité",
"resultsCaption": "Exemple de résultats : indice de durcissement <strong>71/100 (Bon)</strong>. La carte affiche le score brut Lynis (66) et le score adapté à Proxmox (71). L’ajustement dépend du score brut et de la proportion des constats considérés comme normaux sur Proxmox VE ; il n’ajoute pas systématiquement 11 points.",
"scoreTitle": "Score brut Lynis vs Score ajusté Proxmox",
"scoreIntro": "Les règles Lynis visent les systèmes Debian généralistes. Proxmox s’en écarte parfois pour des raisons légitimes, par exemple des services de cluster exécutés en root ou des réglages spécifiques de <code>journald</code>. La carte affiche les deux scores pour permettre de :",
"scoreItems": [
"Suivre le <em>score brut Lynis</em>, comme le ferait un auditeur externe.",
"Suivre le score <em>adapté à Proxmox</em>, une référence plus pertinente pour comparer les nœuds d’un même cluster."
],
"reportBody": "<strong>Rapport complet.</strong> Le bouton <em>PDF</em> de chaque audit télécharge un rapport de plusieurs pages : synthèse, informations système, état de sécurité, avertissements expliqués, suggestions classées par impact et inventaire des paquets. Vous pouvez le joindre à une revue de sécurité.",
"reportAlt": "Première page d’exemple du rapport PDF Lynis avec synthèse, indice 71 sur 100, nombre d’avertissements et de suggestions, nom d’hôte, noyau, version Lynis, date et aperçu de la sécurité",
"reportCaption": "Première page du rapport : synthèse, informations système et état de sécurité. La suite contient les avertissements détaillés, les suggestions et la liste des paquets installés. Un <a>exemple PDF</a> est joint pour référence.",
"runPeriodically": "Exécutez l'audit périodiquement (après les mises à niveau majeures de Proxmox, après avoir appliqué des modifications post-installation, avant d'ouvrir un chemin d'accès à distance) et gardez les rapports — la tendance compte plus que n'importe quel numéro.",
"outro": "Le guide d’<em>installation, configuration et désinstallation</em> et l’analyse d’un exemple de rapport figurent dans <link>ProxMenux → Sécurité → Lynis</link>."
},
"dataCollected": {
"heading": "Comment les données sont collectées",
"headerCard": "Carte",
"headerEndpoint": "Point de terminaison",
"headerSource": "Source",
"rows": [
{
"card": "Authentification, 2FA, changement de mot de passe",
"endpoint": "/api/auth/*",
"source": "Configuration locale d’authentification dans ~/.config/proxmenux-monitor/auth.json ; JWT émis par Monitor."
},
{
"card": "SSL/HTTPS",
"endpoint": "/api/auth/ssl/*",
"source": "<code>openssl x509</code> sur <code>/etc/pve/local/pve-ssl.pem</code> + <code>/etc/proxmenux/ssl_config.json</code>."
},
{
"card": "Lister, créer et révoquer les jetons d’API",
"endpoint": "/api/auth/api-tokens",
"source": "Les rangées de jetons sont conservées localement; rien ne quitte l'hôte."
},
{
"card": "Portail sécurisé (déploiement + statut)",
"endpoint": "/api/oci/*",
"source": "Crée un conteneur LXC Alpine avec <code>tailscaled</code> via <code>pct create</code> / <code>pct exec</code>."
},
{
"card": "Statut et règles du pare-feu",
"endpoint": "/api/security/firewall/*",
"source": "<code>pve-firewall</code> + <code>/etc/pve/firewall/&lt;cluster|host&gt;.fw</code>."
},
{
"card": "Fail2Ban (état disponible après installation)",
"endpoint": "/api/security/fail2ban/*",
"source": "<code>fail2ban-client status</code>, <code>/var/log/fail2ban.log</code>, <code>/etc/fail2ban/jail.local</code>."
},
{
"card": "Audit Lynis (uniquement lorsqu'il est installé)",
"endpoint": "/api/security/lynis/*",
"source": "Exécute <code>lynis audit system</code> en arrière-plan; rapport analysé à partir de <code>/var/log/lynis-report.dat</code>."
}
]
},
"whereNext": {
"heading": "Où aller ensuite",
"items": [
{
"label": "Accès et authentification",
"href": "/docs/monitor/access-auth",
"tail": " — configuration initiale complète, choix d’application 2FA, récupération après perte de l’authentificateur et exemples de proxy inverse."
},
{
"label": "Intégrations",
"href": "/docs/monitor/integrations",
"tail": " — exemples de jetons d’API avec Homepage, Home Assistant, Prometheus et n8n, et configuration complète de Secure Gateway."
},
{
"label": "Référence de l’API",
"href": "/docs/monitor/api",
"tailRich": " — tous les points de terminaison <code>/api/auth</code>, <code>/api/security</code> et <code>/api/oci</code> avec méthode, corps de requête et exemples curl."
},
{
"label": "ProxMenux → Sécurité → Fail2Ban",
"href": "/docs/security/fail2ban",
"tail": " — guide d’installation, jails configurés et installation manuelle."
},
{
"label": "ProxMenux → Sécurité → Lynis",
"href": "/docs/security/lynis",
"tail": " — exemple de rapport, interprétation du score et fréquence des audits."
}
]
}
}
@@ -0,0 +1,367 @@
{
"meta": {
"title": "ProxMenux Monitor — Tableau de bord : onglet Paramètres | Documentation ProxMenux",
"description": "L’onglet Paramètres gère la langue, l’ordre de navigation, les préférences du tableau de bord, les seuils et exclusions de surveillance, les notifications, l’IA et l’inventaire des optimisations après installation."
},
"header": {
"title": "Tableau de bord : onglet Paramètres",
"description": "Langue de Monitor, ordre de navigation, préférences du tableau de bord, exclusions de surveillance, notifications, configuration de l’IA et inventaire actuel des optimisations ProxMenux.",
"section": "ProxMenux Monitor · Tableau de bord"
},
"intro": {
"title": "Où chaque paramètre est conservé",
"body": "Paramètres regroupe l’affichage du tableau de bord, la surveillance Health Monitor, l’envoi des alertes et les changements déjà appliqués par ProxMenux à l’hôte. Les cartes renvoient à leur documentation détaillée ; cet onglet en est le point d’accès."
},
"interfaceLanguage": {
"heading": "Langue d'interface",
"intro": "Choisissez la langue de l’<strong>interface web du moniteur</strong>. Elle change immédiatement, sans redémarrer le service ni modifier la langue des menus shell de ProxMenux.",
"items": [
"ProxMenux Monitor offre actuellement anglais, allemand, espagnol, français, italien, portugais, slovaque et suédois.",
"À la première visite, la langue du navigateur est utilisée si elle est prise en charge ; sinon, l’anglais.",
"Changer le choix actualise la langue de la page et la synchronise avec les autres onglets du même profil de navigateur.",
"Si une traduction manque, seul ce texte apparaît en anglais plutôt qu’une clé ou un espace réservé incorrect."
],
"scopeTitle": "Préférence locale du navigateur",
"scopeBody": "Le choix est enregistré dans <code>localStorage</code> sous <code>proxmenux-ui-language</code>. Il concerne ce profil de navigateur et cet appareil, pas tout le nœud. Chaque administrateur peut choisir sa langue."
},
"navigationOrder": {
"heading": "Ordre de navigation",
"intro": "Réorganisez les sept entrées principales : <strong>Aperçu, Apps, VM et LXC, Nœud, Sauvegarde, Terminal et Administration</strong>. Cliquez sur <strong>Modifier</strong>, déplacez les lignes et enregistrez.",
"items": [
"Avec la souris, le déplacement commence à l’appui. Sur écran tactile, un appui de 250 ms le distingue du défilement.",
"Les groupes <strong>Nœud</strong> et <strong>Administration</strong> se déplacent en bloc ; leurs pages internes gardent l’ordre prévu.",
"Le menu mobile suit le même ordre enregistré.",
"<strong>Rétablir les valeurs par défaut</strong> réinitialise l’ordre en cours d’édition. Enregistrez pour appliquer le changement.",
"Les nouvelles entrées principales des versions futures sont ajoutées à la fin de l’ordre personnalisé, en conservant votre organisation."
],
"landingTitle": "La première entrée devient l’onglet initial",
"landingBody": "Monitor ouvre la première entrée enregistrée. Pour <strong>Nœud</strong>, il ouvre Stockage ; pour <strong>Administration</strong>, Journaux système. L’ordre est conservé dans ce navigateur sous <code>proxmenux-nav-order</code> ; chaque appareil peut avoir sa propre organisation."
},
"networkUnits": {
"heading": "Unités réseau",
"imageAlt": "Carte Unités réseau avec le sélecteur d’affichage sur Octets",
"imageCaption": "Choisissez les bits ou les octets par seconde pour toutes les vitesses réseau du tableau de bord.",
"body": "Affiche le débit en <strong>bits par seconde</strong> (Mbps/Gbps) ou <strong>octets par seconde</strong> (MB/s/GB/s). Les bits sont utilisés par défaut comme dans les spécifications réseau ; les transferts de fichiers utilisent souvent les octets. Graphiques, étiquettes et infobulles changent immédiatement sans rechargement."
},
"health": {
"heading": "Moniteur de santé",
"intro": "La carte règle la <strong>durée de suppression</strong> : le délai avant qu’une alerte rejetée puisse être signalée à nouveau. Chaque catégorie — CPU, mémoire, stockage, disques, réseau, VM, services PVE, journaux, mises à jour et sécurité — a sa liste :",
"items": [
"<strong>24 h</strong> — Par défaut pour la plupart des catégories transitoires.",
"<strong>72 h</strong> — pour ne plus recevoir ces événements pendant quelques jours.",
"<strong>168 h</strong> (1 semaine) et <strong>720 h</strong> (1 mois) — contrôles périodiques.",
"<strong>8760 h</strong> (1 an) — une longue période sans ces alertes.",
"<strong>-1</strong> — silence permanent jusqu’à réactivation manuelle.",
"<strong>Heures personnalisées</strong> — un nombre entier pour une durée intermédiaire."
],
"imageAlt": "Paramètres, carte Health Monitor avec durée par catégorie et suppressions actives",
"imageCaption": "Les listes définissent la durée des futurs rejets. La section inférieure montre les alertes supprimées et permet leur réactivation.",
"editTitle": "Mode modification",
"editBody": "La carte est initialement en lecture seule. <strong>Modifier</strong> en haut à droite active les listes et boutons de réactivation. <strong>Enregistrer</strong> applique ensemble les durées et réactivations en attente ; <strong>Annuler</strong> les abandonne. Enregistrer n’est actif qu’en présence de changements.",
"activeTitle": "Suppressions actives",
"activeIntro": "Sous les durées, <strong>Suppressions actives</strong> liste les alertes supprimées temporairement —24 h, 7 jours ou autre période— et <em>définitivement</em>. Chaque ligne affiche :",
"activeItems": [
"Un badge coloré : <strong>Permanent</strong> en ambre ou un décompte, comme <strong>24 h restantes</strong> / <strong>7 jours restants</strong>, en bleu.",
"L’identifiant d’alerte sous une forme lisible (par ex. <code>pve_storage_full_PBS-Cloud</code> → <em>Stockage PVE plein : PBS-Cloud</em>).",
"Catégorie, gravité et date à laquelle l’alerte a été rejetée.",
"Un bouton <strong>Réactiver</strong>, disponible en modification, prépare la levée de suppression lors de l’enregistrement."
],
"activeReenableTitle": "Comment réactiver une alerte",
"activeReenableBody": "<strong>Réactiver</strong> colore la ligne en vert et barre son identifiant, sans appliquer encore le changement. Un nouveau clic permet d’<strong>Annuler</strong>. <strong>Enregistrer</strong> envoie en parallèle <code>POST /api/health/un-acknowledge</code> pour chaque réactivation et retire les lignes. Si le problème persiste et la catégorie permet un nouvel avis, l’alerte revient parmi les actives au prochain contrôle.",
"activePermanentNote": "Les rejets définitifs —via <em>Définitivement</em> ou la durée par défaut <code>-1</code>— <strong>ne sont annulés qu’ici</strong>. Le dialogue général ne propose pas ce bouton ; cette section réunit registre et réactivation.",
"activeAutoRefreshTitle": "Actualisation automatique",
"activeAutoRefreshBody": "La liste s’actualise après rejet ou réactivation d’une alerte dans Health Monitor, au retour sur l’onglet et lors d’un changement de visibilité. Aucun rechargement n’est nécessaire.",
"calloutTitle": "Détails dans la page Health Monitor",
"calloutBody": "L’escalade, la résolution automatique quand un appareil disparaît et la différence entre rejeter et résoudre figurent dans <link>Health Monitor → Rejet des alertes et durée de suppression</link>. Cette carte propose les listes et suppressions actives."
},
"thresholds": {
"heading": "Seuils du Health Monitor",
"intro": "La carte précédente définit <em>la durée de silence après un rejet</em> ; celle-ci règle <strong>la valeur qui déclenche une alerte</strong>. La plupart des contrôles ont des valeurs <strong>Avertissement</strong> et <strong>Critique</strong> réglables. Le tableau explique les exceptions, dont la règle combinée du swap et le détecteur RAM actuel.",
"whatForTitle": "À quoi cela sert",
"whatForIntro": "Les valeurs par défaut sont un point de départ ; chaque environnement a ses propres conditions :",
"whatForItems": [
"Un homelab avec un seul SSD peut avertir plus tôt, à 75/90 % par exemple, pour garder de la place aux instantanés.",
"Les seuils mémoire doivent refléter les mesures et la charge de l’hôte. La redondance Ceph ne justifie pas à elle seule des alertes moins strictes ; un ARC ZFS élevé n’équivaut pas à une mémoire de travail non récupérable.",
"Choisissez les seuils de température selon les spécifications du disque et ses conditions réelles. Le refroidissement passif ou forcé ne définit pas seul une limite sûre universellement plus basse ou haute.",
"Un hôte très virtualisé peut avoir des pics CPU pendant les compilations sans alerter à chaque pic de 80 %, mais doit signaler une saturation durable."
],
"whatForOutro": "Les modifications prises en charge s’appliquent <strong>à l’analyse suivante</strong>. Le Health Monitor lit <code>/usr/local/share/proxmenux/health_thresholds.json</code> à chaque cycle sans redémarrage. Certains indicateurs, comme la température des disques, utilisent ces valeurs ; des barres de capacité gardent leurs propres limites. La ligne RAM décrit une exception actuelle.",
"coloursTitle": "Couleurs des états Avertissement et Critique",
"coloursIntro": "Les widgets utilisant Avertissement/Critique suivent les trois états ci-dessous. D’autres indicateurs, comme les barres de capacité PVE, ont leurs propres limites ; leur couleur seule n’indique pas une alerte Health Monitor.",
"headerColour": "Couleur",
"headerRange": "Intervalle",
"headerMeaning": "Signification",
"colourRows": [
{
"colour": "Vert",
"range": "valeur < Avertissement",
"meaning": "Plage normale. Aucune alerte n’est générée."
},
{
"colour": "Ambre",
"range": "Avertissement ≤ valeur < critique",
"meaning": "État d’avertissement. Health Monitor génère un événement WARNING ; les notifications respectent les filtres et heures silencieuses."
},
{
"colour": "Rouge",
"range": "Valeur ≥ critique",
"meaning": "État critique. Health Monitor génère un événement CRITICAL qui ignore les heures silencieuses. Les réglages de catégorie et d’événement du canal s’appliquent toujours ; la livraison dépend aussi de sa disponibilité."
}
],
"sectionsTitle": "Sections et valeurs par défaut recommandées",
"sectionsIntro": "Ce sont les valeurs initiales de ProxMenux jusqu’à modification. Les sections suivent <em>charge de calcul</em>, <em>température</em> et <em>capacité de stockage</em>, de la charge actuelle à l’espace occupé.",
"headerSection": "Chapitre",
"headerWarning": "Avertissement",
"headerCritical": "Critique",
"headerGates": "Contrôle concerné",
"thresholdRows": [
{
"section": "Utilisation du processeur",
"warning": "85 %",
"critical": "95 %",
"gates": "Alerte de charge prolongée lorsque la moyenne CPU dépasse le seuil sur la période de contrôle."
},
{
"section": "Mémoire",
"warning": "85 %",
"critical": "95 %",
"gates": "Pression RAM de l’hôte. Le réglage affiche Critique à 95 %, mais le détecteur actuel utilise une règle fixe de 90 % soutenus ; ce réglage ne modifie pas actuellement cette branche d’exécution."
},
{
"section": "Swap (seuil critique uniquement)",
"warning": "—",
"critical": "80 %",
"gates": "Le CRITICAL de swap exige plus de 80 % de swap et moins de 15 % de RAM disponible sur plusieurs mesures. Le swap occupé seul ne déclenche pas cette règle."
},
{
"section": "Température du processeur",
"warning": "80 °C",
"critical": "90 °C",
"gates": "Température du boîtier CPU ou des cœurs fournie par <code>lm-sensors</code>."
},
{
"section": "Température du disque — HDD",
"warning": "60 °C",
"critical": "65 °C",
"gates": "Température HDD. Valeurs initiales : avertissement à 60 °C, critique à 65 °C. Ce sont des réglages de surveillance, pas une limite universelle du fabricant ; consultez le modèle précis."
},
{
"section": "Température du disque — SSD",
"warning": "70 °C",
"critical": "75 °C",
"gates": "SSD SATA de 2,5 pouces ou M.2. Cette classe utilise 70/75 °C par défaut ; les limites réelles dépendent du modèle."
},
{
"section": "Température du disque — NVMe",
"warning": "80 °C",
"critical": "85 °C",
"gates": "Température NVMe. Cette classe utilise 80/85 °C par défaut. La température de limitation du contrôleur dépend du modèle et n’est pas toujours 85 °C."
},
{
"section": "Température du disque — SAS",
"warning": "55 °C",
"critical": "65 °C",
"gates": "Température SAS. Cette classe utilise avertissement à 55 °C et critique à 65 °C. Ce sont des <em>valeurs de surveillance</em>, pas la preuve d’un défaut de refroidissement à 55 °C ni une limite universelle."
},
{
"section": "Espace disque — hôte",
"warning": "85 %",
"critical": "95 %",
"gates": "Capacité de <code>/</code> et de chaque point de montage de l’hôte (<code>/var/lib/vz</code>, <code>/mnt/*</code>…)."
},
{
"section": "Espace disque — rootfs LXC",
"warning": "85 %",
"critical": "95 %",
"gates": "Disque racine par conteneur, évalué par rapport à la taille rootfs de PVE."
},
{
"section": "Points de montage LXC",
"warning": "85 %",
"critical": "95 %",
"gates": "Capacité des montages dans les CT actifs : mp0, mp1, NFS et montages liés. Exclut rootfs."
},
{
"section": "Stockage PVE",
"warning": "85 %",
"critical": "95 %",
"gates": "Stockages gérés par PVE : LVM, LVM-thin, ZFS-pool, RBD/Ceph et PBS. Tous ne sont pas des stockages en blocs."
},
{
"section": "Pool ZFS",
"warning": "85 %",
"critical": "95 %",
"gates": "Pools ZFS de l’hôte, indépendamment de leur enregistrement dans PVE."
}
],
"defaultsTitle": "Valeurs par défaut, modifications et réinitialisation",
"defaultsBody": "Chaque section part des valeurs par défaut ; seules les modifications souhaitées sont conservées. La carte montre la valeur <em>effective</em> : votre modification ou la valeur initiale. <strong>Réinitialiser</strong> supprime toutes les modifications de toutes les sections.",
"validationTitle": "Validation",
"validationBody": "L’enregistrement vérifie les plages autorisées et refuse Critique sous Avertissement. L’interface affiche les erreurs et le serveur valide les requêtes API avant sauvegarde."
},
"lxcDetection": {
"heading": "Détection de mise à jour LXC",
"imageAlt": "Carte de détection des mises à jour LXC avec interrupteur pour les paquets en attente des conteneurs Debian, Ubuntu et Alpine actifs",
"imageCaption": "Interrupteur de l’analyse périodique par <code>apt list --upgradable</code> / <code>apk list -u</code> dans les CT actifs. Activé par défaut. Le réglage associé dans Notifications → Services apparaît lorsque la détection est active.",
"intro": "L’interrupteur entre Seuils et Notifications contrôle l’analyse LXC. Activé, il interroge les gestionnaires de paquets des CT actifs ; Matériel affiche les résultats et alimente <code>lxc_updates_available</code>. Désactivé, il arrête ses appels <code>pct exec</code> et supprime les entrées LXC de <code>managed_installs.json</code> ; <code>/api/managed-installs</code> cesse d’afficher cet état sans attendre 24 h.",
"whatRunsTitle": "Ce que l’analyse exécute",
"whatRunsIntro": "Pour chaque CT à l’état <code>running</code> avec un gestionnaire de paquets pris en charge :",
"whatRunsItems": [
"<strong>Fraîcheur des métadonnées.</strong> Si le cache apt/apk dépasse <strong>24 heures</strong>, une actualisation est tentée avec <code>apt-get update -qq</code> sur Debian/Ubuntu ou <code>apk update</code> sur Alpine, limitée à 60 s. En cas d’échec, la liste utilise le cache disponible et peut être périmée.",
"<strong>Liste.</strong> Exécute <code>apt list --upgradable</code> / <code>apk list -u</code> et extrait le nombre de paquets et quelques noms.",
"<strong>Éviter les doublons par CT.</strong> Une empreinte du total, des mises à jour de sécurité et des noms triés évite les avis quotidiens identiques. Un changement significatif déclenche un nouvel avis."
],
"selfUpdateTitle": "Les CT actualisés hors apt peuvent afficher 0",
"selfUpdateBody": "La détection ne couvre que le gestionnaire de paquets du CT. Les logiciels actualisés hors apt, comme un travail <code>plexupdate</code> configuré ou les images obtenues par <code>docker pull</code>, n’entrent pas dans le compte. Zéro mise à jour apt ne prouve pas que toutes les applications sont à jour. Les paquets du système de base restent détectés.",
"refreshTitle": "Pourquoi actualiser les métadonnées après 24 h",
"refreshBody": "Un CT ancien peut avoir des métadonnées apt périmées si personne ne lance <code>apt update</code>. <code>apt list --upgradable</code> peut alors manquer des mises à jour. ProxMenux tente une actualisation après 24 heures et l’omet si le cache est plus récent.",
"toggleTitle": "Interrupteur de notification lié à la détection",
"toggleBody": "L’interrupteur <code>lxc_updates_available</code> par canal dans <strong>Notifications → Services</strong> n’apparaît que si la détection est active. La désactiver masque la ligne pour tous les canaux. Le choix reste dans la base et retrouve sa valeur à la réactivation.",
"purgeTitle": "Ce qui est supprimé à la désactivation",
"purgeBody": "La désactivation retire aussitôt les entrées <code>type=lxc</code> de <code>/usr/local/share/proxmenux/managed_installs.json</code>. Les compteurs de mises à jour LXC de Matériel disparaissent à l’actualisation suivante. La réactivation remplit le registre au prochain cycle, ou plus tôt par actualisation manuelle de l’API."
},
"storageExclusions": {
"heading": "Exclusions de stockage distant",
"imageAlt": "Carte d’exclusion des stockages distants PBS-Cloud, PBS et PBS2 avec réglages État et Alertes par ligne",
"imageCaption": "Réglages <em>État</em> et <em>Alertes</em> par stockage. Tous deux désactivés, le stockage ne contribue plus au Health Monitor et n’envoie plus de notifications. Il reste visible dans Stockage avec la mention exclu.",
"intro": "Vous pouvez exclure les stockages gérés par Proxmox (NFS / CIFS / PBS / Ceph / iSCSI / etc.) au moyen de deux réglages indépendants :",
"items": [
"<strong>État</strong> — désactiver ce réglage retire le stockage de la catégorie Stockage du Health Monitor. Utile pour les volumes d’archives généralement hors ligne ou les cibles de sauvegarde distantes allumées uniquement aux heures prévues.",
"<strong>Alertes</strong> — désactiver ce réglage empêche les notifications de ce stockage sur les canaux configurés, même si les contrôles d’état restent actifs. Utile pour consulter son état sans recevoir de notifications."
],
"outro": "Les stockages exclus restent dans l’<link>onglet Stockage</link> avec le badge violet <em>exclu</em>, pour conserver un inventaire visible. L’état est enregistré dans la table SQLite <code>excluded_storages</code>."
},
"interfaceExclusions": {
"heading": "Exclusions d'interface réseau",
"imageAlt": "Carte d’exclusion des interfaces vmbr0, vmbr1, vmbr2, bond0 et eno1 avec réglages État et Alertes par interface",
"imageCaption": "Comme pour le stockage, chaque interface possède <em>État</em> et <em>Alertes</em>. Chaque ligne montre le nom, le type (pont / agrégat / physique), l’IP et le débit du lien.",
"intro": "Le même principe s’applique aux interfaces : exclure chacune des contrôles d’état, des notifications ou des deux. Exemples courants :",
"items": [
"Un pont de réserve volontairement désactivé.",
"Une carte réseau retirée physiquement mais encore référencée dans <code>/etc/network/interfaces</code>.",
"Une sous-interface VLAN utilisée uniquement pendant la maintenance.",
"Un pont de gestion dont les changements répétés d’état du lien sont connus pendant la maintenance."
],
"outro": "L’état est enregistré dans la table SQLite <code>excluded_interfaces</code>. Le badge violet <em>exclue</em> de l’<link>onglet Réseau</link> garde les interfaces exclues visibles."
},
"notifications": {
"heading": "Notifications et IA",
"body1": "Cette section active les notifications de ProxMenux Monitor et la reformulation par IA. <em>Activer les notifications</em> démarre l’envoi en arrière-plan, enregistre une cible webhook Proxmox VE pour intégrer ses événements et ouvre le formulaire des canaux : Telegram, Discord, courriel, Gotify et autres. La reformulation par IA figure dans une section avancée repliable du même panneau.",
"body2": "Des pages dédiées expliquent les options : canaux, événements, messages enrichis, nom affiché, envoi avec dédoublonnage, temporisation, regroupement et heures silencieuses, webhook PVE, fournisseurs d’IA et modes d’instructions :",
"items": [
"<notifLink>Notifications</notifLink> : configuration des canaux (Telegram, Discord, Gotify, courriel et mots de passe d’application Gmail / Microsoft, ntfy, Slack, Teams et webhook générique), catégories d’événements, messages enrichis, nom affiché, envoi, webhook PVE, historique et API.",
"<aiLink>Assistant IA</aiLink> : fournisseurs (OpenAI, Anthropic, Gemini, Groq, OpenRouter, Ollama), modèles, instructions par défaut ou personnalisées, langue de sortie, niveau de détail par canal et suggestions d’IA."
]
},
"optimizations": {
"heading": "Optimisations ProxMenux",
"intro": "Inventaire des optimisations après installation enregistrées par ProxMenux sur l’hôte. Les options de <autoLink>Post-installation automatisée</autoLink> et <customLink>Post-installation personnalisable</customLink> enregistrent leur application dans <code>/usr/local/share/proxmenux/installed_tools.json</code>. Le moniteur lit ce registre. Une entrée ne vérifie pas à nouveau que tous les réglages sont restés identiques.",
"imageAlt": "Carte des optimisations ProxMenux avec 14 entrées : point coloré, nom et version. Elle comprend APT IPv4 Force, Bashrc Customization, Fastfetch, Log2ram SSD Protection, Memory Settings Optimization, Setting persistent network interfaces, System Limits Increase, APT Language Skip, Entropy Generation haveged avec Legacy, Kernel Panic Configuration, Logrotate Optimization, Network Optimizations, Subscription Banner Removal et VFIO IOMMU Passthrough.",
"imageCaption": "Chaque optimisation affiche nom, version et point coloré. Le compteur orange <em>14 actives</em> figure en haut à droite. Les outils dont le code source est disponible sont cliquables.",
"dotsTitle": "Ce que signifient les points",
"dotsItems": [
"<green/> <strong>Point vert</strong> : optimisation enregistrée sans mention Legacy ni mise à jour indiquée. Cliquez sur la ligne si le code source est disponible.",
"<amber/> <strong>Point ambre et badge <em>legacy</em></strong> : optimisation enregistrée dont le script a été renommé ou remplacé. Le code conservé s’ouvre en mode Legacy avec des touches ambre. Cela ne vérifie pas à nouveau la configuration actuelle de l’hôte."
],
"clickTitle": "Ouvrir le code source",
"clickBody": "Cliquer affiche la fonction bash associée et le nom du script (<code>auto_post_install.sh</code> ou <code>customizable_post_install.sh</code>). Les outils actuels sont extraits des fichiers de l’hôte ; les anciens peuvent utiliser du code conservé. Coloration syntaxique et copie facilitent l’examen. Ce n’est pas un instantané garanti du code exécuté à l’installation.",
"detailAlt": "Fenêtre de code d’APT IPv4 Force montrant la fonction bash force_apt_ipv4 de customizable_post_install.sh version 1.0. Le code coloré configure /etc/apt/apt.conf.d/99-force-ipv4 avec Acquire ForceIPv4 true, enregistre l’outil et affiche un message traduit de fin de configuration APT IPv4.",
"detailCaption": "Code d’<em>APT IPv4 Force</em> : fonction <code>force_apt_ipv4()</code> de <code>customizable_post_install.sh v1.0</code>, avec coloration syntaxique et copie en un clic.",
"whyTitle": "Pourquoi cela est important",
"whyBody": "ProxMenux peut modifier les paramètres du noyau, dépôts, réseau, rotation des journaux et passthrough GPU. Consultez les optimisations enregistrées avant des changements manuels, surtout si un autre administrateur a installé l’hôte. La carte montre le registre et le code disponible ; elle n’audite pas tous les réglages actuels et ne garde pas un historique exact d’exécution.",
"updatesTitle": "Bannière des mises à jour disponibles",
"updatesBody": "Si la version sur disque d’une optimisation est plus récente que celle enregistrée sur l’hôte, une bannière affiche le nombre et <strong>Appliquer</strong>. <strong>Appliquer</strong> ouvre le choix des optimisations, comme <em>Appliquer les mises à jour disponibles</em> du menu de post-installation. Choisissez les mises à jour ; ProxMenux relance leurs fonctions et actualise le registre. La bannière disparaît quand tout est à jour.",
"updatesAlt": "Carte des optimisations ProxMenux avec bannière de mises à jour disponibles, nombre en attente et bouton Appliquer ouvrant le sélecteur",
"updatesCaption": "La bannière apparaît si au moins une optimisation possède une version plus récente sur disque. Voir <link>Appliquer les mises à jour disponibles</link> pour la procédure et son équivalent Path-A dans le menu du shell.",
"revertTitle": "Annuler une optimisation",
"revertBody": "Pour annuler une optimisation, utilisez l’option correspondante de <link>Désinstaller les optimisations</link> dans ProxMenux Scripts. La désinstallation retire son entrée d’<code>installed_tools.json</code> ; elle disparaît de la carte à l’actualisation suivante."
},
"dataCollected": {
"heading": "Comment les données sont collectées",
"headerCard": "Carte",
"headerEndpoint": "Point d’accès",
"headerSource": "Source",
"rows": [
{
"card": "Langue d'interface",
"endpoint": "localStorage",
"source": "Préférence <code>proxmenux-ui-language</code> du navigateur ; sans choix enregistré, sa langue sert de valeur initiale."
},
{
"card": "Ordre de navigation",
"endpoint": "localStorage",
"source": "Préférence <code>proxmenux-nav-order</code> du navigateur ; elle détermine aussi l’onglet initial."
},
{
"card": "Unités réseau",
"endpoint": "/api/settings",
"source": "Enregistré dans la table SQLite des paramètres du tableau de bord."
},
{
"card": "Durées du Health Monitor",
"endpoint": "/api/health/settings",
"source": "Durée de suppression par catégorie dans la base du Health Monitor."
},
{
"card": "Exclusions de stockage / interface",
"endpoint": "/api/storage/exclusions, /api/network/exclusions",
"source": "Tables SQLite <code>excluded_storages</code> et <code>excluded_interfaces</code>."
},
{
"card": "Panneau Notifications et IA",
"endpoint": "/api/notifications/*",
"source": "Voir <notifLink>Notifications</notifLink> et <aiLink>Assistant IA</aiLink>."
},
{
"card": "Liste des optimisations ProxMenux",
"endpoint": "/api/proxmenux/installed-tools",
"source": "Lit <code>/usr/local/share/proxmenux/installed_tools.json</code>, écrit par les appels à <code>register_tool</code> des scripts de post-installation."
},
{
"card": "Fenêtre du code d’une optimisation",
"endpoint": "/api/proxmenux/tool-source",
"source": "Extrait la fonction bash associée d’<code>auto_post_install.sh</code> ou de <code>customizable_post_install.sh</code> sur l’hôte ; les anciens outils peuvent utiliser du code conservé."
}
]
},
"whereNext": {
"heading": "Pour continuer",
"items": [
{
"label": "onglet Apps",
"href": "/docs/monitor/dashboard/apps",
"tail": " — le lanceur dont la position se règle avec l’ordre de navigation."
},
{
"label": "Notifications",
"href": "/docs/monitor/notifications",
"tail": " — canaux, réglages par événement, options propres aux canaux, historique et envoi de test."
},
{
"label": "Assistant IA",
"href": "/docs/monitor/ai-assistant",
"tail": " — fournisseurs, modèles, modes d’instructions, langues et détail par canal."
},
{
"label": "Health Monitor → Rejeter les alertes et durée de suppression",
"href": "/docs/monitor/health-monitor#dismissing-alerts-and-the-suppression-duration",
"tail": " — le fonctionnement des listes de durée par catégorie."
},
{
"label": "ProxMenux Scripts → Post-installation automatisée",
"href": "/docs/post-install/automated",
"tailRich": " et <customLink>Post-installation personnalisable</customLink> — les scripts qui enregistrent les optimisations dans la liste ci-dessus."
},
{
"label": "Désinstaller les optimisations",
"href": "/docs/post-install/uninstall",
"tail": " — comment annuler une optimisation enregistrée ci-dessus."
},
{
"label": "Indice du tableau de bord",
"href": "/docs/monitor/dashboard",
"tail": " — retour à la présentation des onglets."
}
]
}
}
@@ -0,0 +1,268 @@
{
"meta": {
"title": "ProxMenux Monitor — Tableau de bord : onglet Stockage | Documentation ProxMenux",
"description": "L’onglet Stockage réunit quatre vues : stockages Proxmox avec leur état, pools ZFS, disques internes avec SMART et disques USB externes. Le détail de chaque disque affiche les attributs SMART, l’usure, la durée de vie et l’historique permanent des observations."
},
"header": {
"title": "Tableau de bord : onglet Stockage",
"description": "Le stockage de l’hôte sur un écran : NFS / CIFS / LVM / ZFS / dir Proxmox, état des pools ZFS, disques internes SATA/NVMe avec SMART et disques USB externes. Cliquez sur un disque pour voir ses attributs SMART et son historique d’observations.",
"section": "ProxMenux Monitor · Tableau de bord"
},
"intro": {
"title": "Soutenu par trois sources",
"body": "Les stockages Proxmox viennent de <code>pvesm status</code>, ZFS de <code>zpool status</code>, les disques de <code>lsblk</code> + <code>smartctl</code> et les champs NVMe de <code>nvme</code>. L’onglet s’actualise environ toutes les 60 secondes ; ouvrir le détail demande une lecture SMART."
},
"thresholds": {
"title": "Couleurs et seuils appliqués ici",
"intro": "Health Monitor classe l’état en <green/> <strong>vert</strong> sous Avertissement, <amber/> <strong>orange</strong> entre Avertissement et Critique et <red/> <strong>rouge</strong> à partir de Critique. Ses valeurs par défaut suivent. Les barres du tableau de bord peuvent utiliser d’autres limites visuelles décrites plus bas.",
"items": [
"<strong>Capacité</strong> (disques de l’hôte, stockages PVE, pools ZFS, montages LXC) — avertissement 85 %, critique 95 %.",
"<strong>Température du disque</strong> — HDD 60/65 °C · SSD 70/75 °C · NVMe 80/85 °C · SAS 55/65 °C (avertissement / critique)."
],
"outro": "Chaque valeur est configurable par hôte. <link>Paramètres → Seuils de Health Monitor</link> présente les valeurs de référence et leur réglage."
},
"topRow": {
"heading": "Rangée supérieure : aperçu du stockage",
"intro": "À l’ouverture, quatre cartes résument capacité totale, utilisation locale, utilisation distante et inventaire des disques physiques. Elles donnent une réponse rapide ; les cartes inférieures présentent les détails.",
"imageAlt": "Onglet Stockage avec quatre cartes : stockage total, utilisation locale, utilisation distante et disques physiques",
"imageCaption": "Rangée supérieure : capacité totale et nombre de disques, octets utilisés localement et à distance, répartition des disques physiques par type et état.",
"headerCard": "Carte",
"headerWhat": "Ce qu'il montre",
"totalLabel": "Stockage total",
"totalWhat": "Capacité brute totale de tous les disques physiques. Le pied indique le nombre de disques détectés.",
"localLabel": "Utilisation locale",
"localWhat": "Octets utilisés sur les stockages locaux : LVM / LVM-thin / ZFS / dir sur les disques de l’hôte. La valeur principale affiche les octets utilisés et le pied <em>X.XX % de Y TB</em> indique aussi le taux de remplissage.",
"remoteLabel": "Utilisation distante",
"remoteWhat": "Même format que l’utilisation locale pour les stockages distants NFS / CIFS / PBS / Ceph / iSCSI. Ils sont comptés séparément, car les pannes locales et distantes ont une portée différente et ces ressources se dimensionnent et se surveillent différemment.",
"disksLabel": "Disques physiques",
"disksIntro": "Deux lignes de ventilation pour l'inventaire :",
"disksItems": [
"<strong>Par type</strong> — nombre de NVMe en violet, de SSD et HDD en bleu. Les types détectés sont affichés ; un hôte tout NVMe ne montre que ce nombre.",
"<strong>Par état</strong> — nombre de disques <em>normaux</em> en vert, en <em>avertissement</em> en jaune et <em>critiques</em> en rouge. Sans problème, seul « X normaux » apparaît ; les autres états s’affichent en cas d’incident."
]
},
"pveStorage": {
"heading": "Carte de stockage Proxmox",
"intro": "Une ligne par stockage de <code>/etc/pve/storage.cfg</code> avec type (<code>nfs</code> / <code>cifs</code> / <code>zfspool</code> / <code>lvm</code> / <code>lvmthin</code> / <code>dir</code> / <code>pbs</code>), nom, état actif/erreur/non surveillé, taux d’utilisation et barre colorée :",
"items": [
"<strong>Jusqu’à 75 %</strong> — barre et valeur bleues.",
"<strong>Plus de 75 % jusqu’à 90 %</strong> — barre et valeur jaunes. Ces limites visuelles sont distinctes des seuils de Health Monitor.",
"<strong>> 90 %</strong> — barre et valeur rouges. Cette limite visuelle est distincte de l’escalade de Health Monitor.",
"<strong>Erreur</strong> — contour rouge de la ligne si le stockage est configuré mais inaccessible, par exemple serveur NFS arrêté ou identifiants CIFS expirés.",
"<strong>Exclu</strong> — contour violet et étiquette « non surveillé ». Stockages exclus par l’utilisateur, comme les volumes d’archive volontairement déconnectés."
],
"calloutTitle": "Exclure un stockage de la surveillance",
"calloutBody": "Le menu de chaque stockage permet de le marquer <em>exclu de la surveillance</em>. Le réglage est conservé dans <code>excluded_storages</code> et appliqué par le tableau de bord et Health Monitor : aucune notification ni influence sur l’état global."
},
"zfs": {
"heading": "Carte Pools ZFS",
"intro": "Visible uniquement si ZFS est installé et qu’un pool existe. Chaque ligne montre un pool avec état, taille, espace alloué et libre et icône d’état :",
"items": [
"<strong>ONLINE</strong> — vert. Tout est sain.",
"<strong>DEGRADED</strong> — jaune. Le pool fournit les données, mais au moins un appareil est indisponible ; son remplacement doit être traité.",
"<strong>FAULTED</strong> / <strong>UNAVAIL</strong> / <strong>SUSPENDED</strong> — rouge. Le pool ne fournit plus de données et nécessite une intervention immédiate."
],
"outro": "L’état ZFS et SMART de chaque disque alimente la catégorie <em>Disques et E/S</em> de <link>Health Monitor</link>."
},
"physical": {
"heading": "Disques physiques et statut SMART",
"intro": "Disques internes (SATA / NVMe). Chaque rangée condense les champs les plus utiles en un coup d'oeil:",
"items": [
"<strong>Chemin du périphérique</strong> — <code>/dev/sda</code>, <code>/dev/nvme0n1</code>.",
"<strong>Étiquette de type</strong> — SATA / NVMe et icône associée.",
"<strong>Étiquette système</strong> — marque orange pour les disques identifiés comme hébergeant le système. La détection utilise les montages <code>/</code> et <code>/boot</code> et applique l’étiquette <em>System</em>. Son absence ne prouve pas qu’un disque peut être effacé ou réutilisé sans risque.",
"<strong>Modèle</strong> — fabricant et modèle de <code>smartctl -i</code>.",
"<strong>Capacité</strong> — exprimée en unités lisibles.",
"<strong>Température</strong> — valeur actuelle en °C, colorée selon le type de disque ; les seuils NVMe sont plus élevés que SATA.",
"<strong>État SMART</strong> — réussi / échoué / inconnu.",
"<strong>Étiquette d’observations</strong> — si l’historique permanent <code>disk_observations</code> contient des entrées du disque, une étiquette bleue en indique le nombre, par exemple <em>3 obs.</em>. Cliquez sur le disque pour les consulter.",
"<strong>Étiquette d’état</strong> — Sain / Avertissement / Critique selon SMART et les observations récentes."
],
"clickHint": "Un clic sur la ligne ouvre le détail du disque décrit plus bas.",
"warningTitle": "Prudence avec les disques marqués System",
"warningBody": "Les disques marqués en orange <strong>System</strong> hébergent le système actif. L’étiquette aide à les identifier ; <link>ProxMenux → Gestionnaire de disques → Formater / Effacer</link> refuse les actions destructrices sur eux. Pour réutiliser un disque de démarrage, utilisez un environnement de secours externe au Proxmox en cours d’exécution."
},
"external": {
"heading": "Stockage externe (USB)",
"body": "Les disques USB ont une carte distincte, visible lorsqu’un disque est présent. Elle affiche les mêmes champs que les disques internes et une étiquette orange <strong>USB</strong>. Comme ces disques servent souvent aux sauvegardes ou transferts occasionnels, les observations sont conservées, mais les erreurs d’E/S d’un disque USB débranché ne sont pas escaladées."
},
"drillIn": {
"heading": "Dialogue de détail du disque",
"intro": "Cliquez sur un disque pour ouvrir quatre onglets : <strong>Aperçu</strong> · <strong>SMART</strong> · <strong>Historique</strong> · <strong>Planification</strong>. L’en-tête affiche chemin, modèle, capacité et, si nécessaire, l’étiquette orange <em>System</em>.",
"overviewTitle": "Onglet 1 — Aperçu",
"overviewImageAlt": "Détail du disque, onglet Aperçu avec état, indicateur circulaire d’usure et de durée de vie et principaux attributs SMART",
"overviewImageCaption": "Aperçu : identification, état, durée de vie restante avec usure actuelle et données écrites, et principaux attributs SMART.",
"overviewIntro": "Onglet initial pour consulter l’état du disque sans lancer de test. Trois blocs :",
"overviewItems": [
"<strong>Identification</strong> — modèle, numéro de série, capacité et état Sain / Avertissement / Critique.",
"<strong>Usure et durée de vie</strong> — anneau de durée restante (97 %, 50 %, …) avec l’attribut source (<em>Media Wearout Indicator</em>, <em>Percentage Used</em>, …), barre du pourcentage consommé, projection <em>Durée estimée</em> en années et total des données écrites. NVMe affiche aussi <em>Available Spare</em>.",
"<strong>Attributs SMART</strong> : les principales valeurs sont affichées sur deux colonnes : température, heures de fonctionnement avec une durée lisible comme <em>3 ans et 116 jours</em>, vitesse de rotation ou <em>SSD</em>, cycles de mise sous tension, état SMART, secteurs réalloués, secteurs en attente et erreurs CRC. Le tableau complet des attributs se trouve dans l’onglet SMART."
],
"smartTitle": "Onglet 2 — SMART",
"smartImageAlt": "Détail du disque, onglet SMART avec tests court et étendu, dernier résultat et tableau complet des attributs",
"smartImageCaption": "Onglet SMART : lancez un test court ou étendu, consultez le dernier résultat et tous les attributs, puis ouvrez le rapport complet pour l’imprimer ou l’enregistrer en PDF.",
"smartIntro": "Actions disponibles en trois sections :",
"smartItems": [
"<strong>Lancer un test SMART</strong> — deux boutons. <em>Test court (~2 min)</em> attend le résultat et l’affiche dans le dialogue. <em>Test étendu (arrière-plan)</em> peut durer des heures sur les grands disques, continue sur le serveur et notifie à la fin.",
"<strong>Dernier test</strong> — type, état (<em>réussi</em> / <em>échoué</em>) et date du dernier test.",
"<strong>Attributs SMART</strong> — tableau complet avec ID, nom, valeur, pire valeur et état correct, avertissement ou critique. SATA/SAS affiche la liste numérotée. NVMe utilise <code>nvme smart-log</code> : température, réserve disponible, pourcentage utilisé, unités lues/écrites, lectures/écritures hôte, temps d’occupation du contrôleur, cycles d’alimentation, arrêts non sûrs, erreurs du support, entrées du journal d’erreurs et temps de température composite en avertissement/critique."
],
"pdfTitle": "Afficher le rapport SMART complet (PDF)",
"pdfIntro": "En bas de SMART, <strong>Afficher le rapport SMART complet</strong> ouvre un rapport imprimable. Le dialogue d’impression du navigateur permet de l’enregistrer en PDF pour l’archiver ou le partager avec le support lors d’un RMA.",
"pdfPreviewAlt": "Première page du rapport SMART avec synthèse, indicateur PASSED et informations sur le disque",
"pdfPreviewCaption": "Première page : synthèse, indicateur PASSED et informations complètes du disque. L’exemple PDF contient l’usure SSD, tous les attributs SMART et l’historique des tests.",
"pdfDownloadLabel": "Télécharger un exemple de rapport SMART (PDF)",
"pdfSectionsIntro": "Le rapport comporte six sections principales :",
"pdfSections": [
"<strong>Synthèse</strong> — état PASSED/FAILED, évaluation claire du disque — sain, usé ou défaillant — et quatre données : date du rapport, dernier type de test, résultat et attributs vérifiés.",
"<strong>Informations sur le disque</strong> — modèle, série, capacité, type HDD/SSD/NVMe, famille, format, interface (SATA 3.3 · 6.0 Gb/s, …), TRIM, température et seuil optimal, heures de fonctionnement, cycles d’alimentation, SMART, secteurs en attente/réalloués et erreurs CRC.",
"<strong>Usure et durée de vie SSD</strong> (SSD/NVMe uniquement) — durée restante, attribut source, usure actuelle, données écrites et heures de fonctionnement.",
"<strong>Attributs SMART complets</strong> — ID, nom, valeur, pire valeur, seuil, valeur brute et état de chaque attribut. Les principaux — Reallocated Sector Ct, Power On Hours, Reported Uncorrect, UDMA CRC Error Count, Media Wearout Indicator, … — ont une brève explication sous leur ligne.",
"<strong>Dernier autotest et historique complet</strong> — dernier test avec type, résultat, message final et heures de fonctionnement à ce moment, puis tableau numéroté de tous les tests conservés.",
"<strong>Recommandations</strong> — actions selon le résultat. Pour les disques sains : <em>disque sain / tests périodiques / stratégie de sauvegarde</em>. Des conseils de remplacement apparaissent si les attributs sortent des limites."
],
"pdfOutro": "Le navigateur construit le rapport imprimable ; Imprimer et Enregistrer en PDF ouvrent le dialogue d’impression. Choisissez un nom comme <code>SMART-&lt;short-id&gt;.pdf</code>. Conservez des copies datées pour comparer les changements ou les partager avec le support.",
"historyTitle": "Onglet 3 — Historique",
"historyImageAlt": "Détail du disque, onglet Historique avec les tests SMART précédents et actions de téléchargement et suppression",
"historyImageCaption": "Historique SMART du disque. Chaque ligne affiche type, date, ancienneté, repère du dernier test et actions de téléchargement de la sortie <code>smartctl</code> et suppression.",
"historyIntro": "Tests courts et étendus terminés et conservés pour le disque. Chaque entrée contient la sortie originale <code>smartctl</code> et les champs interprétés par Monitor pour le tableau de bord. Actions par ligne :",
"historyItems": [
"<strong>Télécharger</strong> — enregistre l’instantané JSON contenant les données <code>smartctl -a</code> utilisées par le rapport. Utile si le support demande les champs de diagnostic originaux.",
"<strong>Supprimer</strong> — retire manuellement un test de l’historique. La conservation de Planification (<em>5 / 10 / 20 derniers</em>) supprime automatiquement les plus anciens."
],
"scheduleTitle": "Onglet 4 — Planification",
"scheduleImageAlt": "Détail du disque, onglet Planification avec interrupteur des tests SMART automatiques, liste des horaires et bouton Ajouter une planification",
"scheduleImageCaption": "Planification : choisissez type, fréquence et conservation ; Monitor configure <code>cron</code> pour exécuter les tests automatiquement.",
"scheduleIntro": "Tests SMART automatiques via cron, sans terminal. Trois zones :",
"scheduleItems": [
"<strong>Tests SMART automatiques</strong> — interrupteur commun à toutes les planifications du disque. Il permet de les suspendre pendant la maintenance sans effacer leur configuration.",
"<strong>Planifications configurées</strong> — une ligne par horaire avec type (<em>court</em> / <em>long</em>), expression cron lisible (<em>« Le 1er du mois à 03:00 »</em>, <em>« Chaque dimanche à 02:00 »</em>), disques concernés et conservation.",
"<strong>Ajouter / Modifier une planification</strong> — type (<em>court ~2 min</em> / <em>long 1–4 h</em>), fréquence (<em>quotidienne / hebdomadaire / mensuelle</em>), jour du mois ou de la semaine, heure et résultats conservés (<em>5 / 10 / 20 derniers</em>)."
],
"scheduleOutro": "La planification crée une entrée cron sur l’hôte qui appelle Monitor. Les résultats vont dans l’historique SMART de l’onglet 3 et la conservation supprime automatiquement les plus anciens après un nouveau test.",
"tempTitle": "Dialogue d’historique de température",
"tempIntro": "Monitor relève régulièrement les disques équipés d’un capteur de température et conserve un historique local. La valeur actuelle figure dans Aperçu ; un clic ouvre le détail de l’historique de température.",
"tempImageAlt": "Historique de température avec chemin et modèle, périodes de 1 heure, 24 heures, 7 ou 30 jours, indicateurs Actuel/Minimum/Moyenne/Maximum et courbe colorée selon les seuils du type de disque",
"tempImageCaption": "Le détail de température s’ouvre depuis Aperçu si le capteur renvoie une valeur non nulle. Le graphique utilise les seuils HDD / SSD / NVMe / SAS.",
"tempShowsTitle": "Contenu du dialogue",
"tempShowsItems": [
"<strong>Sélecteur de période</strong> : <em>1 heure</em>, <em>24 heures</em> par défaut, <em>7 jours</em> ou <em>30 jours</em>. Chaque requête adapte la résolution pour garder le graphique lisible.",
"<strong>Quatre indicateurs</strong> : <em>Actuel</em>, <em>Minimum</em>, <em>Moyenne</em> et <em>Maximum</em> sur la période. <em>Actuel</em> utilise les seuils du stockage et des notifications pour distinguer une température normale, élevée ou très élevée.",
"<strong>Courbe</strong> de température dans le temps, avec ligne et zone ombrée colorées selon le type de disque :"
],
"tempDiskTypes": [
"HDD — seuils de température généralement plus bas.",
"SSD — seuils modérés.",
"NVMe — seuils plus élevés (NVMe est plus chaud par conception).",
"SAS — avertissement à 55 °C et critique à 65 °C ; le seuil d’avertissement diffère du HDD."
],
"tempConfigurable": "Les quatre types se configurent dans <em>Paramètres → Seuils de Health Monitor</em>.",
"tempWhyTitle": "Pourquoi l’historique est utile",
"tempWhyItems": [
"<strong>Détecter les tendances.</strong> Une lecture isolée ne révèle pas qu’un disque chauffe progressivement depuis des semaines, par exemple à cause de la ventilation, de la poussière ou d’une source de chaleur proche. Les vues sur 7 et 30 jours montrent l’évolution.",
"<strong>Relier les pics.</strong> Si une sauvegarde ou reconstruction a brièvement dépassé le seuil, les vues sur 1 et 24 heures montrent si le pic est isolé ou récurrent.",
"<strong>Régler les seuils.</strong> Avant une modification dans <em>Paramètres → Seuils de Health Monitor</em>, consultez le graphique de 30 jours pour connaître la plage réelle du disque."
],
"obsTitle": "Historique des observations dans les onglets",
"obsIntro": "Les défauts peuvent apparaître progressivement. Un disque peut indiquer SMART <strong>PASSED</strong> tout en signalant des erreurs de lecture dans dmesg, des coupures SATA ou des secteurs en attente intermittents. ProxMenux conserve ces <em>signaux</em> et les affiche dans le dialogue avec l’état SMART actuel.",
"obsImageAlt": "Aperçu d’un disque avec SMART réussi, zéro secteur réalloué/en attente et erreur CRC, mais une observation d’erreur E/S avec message original du noyau, explication ATA, première et dernière date et compteur",
"obsImageCaption": "Un disque qui <strong>réussit SMART</strong> peut avoir des observations antérieures. La carte ajoute l’historique des signaux à l’état actuel.",
"obsWhatTitle": "Qu’est-ce qu’une observation ?",
"obsWhatIntro": "ProxMenux enregistre comme <strong>observation</strong> les événements disque du journal du noyau, de dmesg ou de SMART trop détaillés pour justifier seuls une notification. Chaque ligne affiche :",
"obsWhatItems": [
"<strong>Type</strong> — erreur E/S, SMART, système de fichiers, pool ZFS ou connexion.",
"<strong>Message original du noyau</strong> tel qu’affiché dans dmesg, à copier dans un moteur de recherche ou une demande de support.",
"<strong>Brève explication</strong> des codes ATA connus : <code>IDNF</code>, adresse de secteur introuvable, secteur ou câble potentiellement défectueux ; <code>UNC</code>, erreur de lecture irrécupérable, secteur défectueux ; et autres codes standard.",
"<strong>Première et dernière date</strong> et <strong>nombre d’occurrences</strong>, regroupés par signature d’erreur."
],
"obsWhyTitle": "Pourquoi ProxMenux les conserve et les affiche",
"obsWhyItems": [
"<strong>Les défauts peuvent évoluer.</strong> Des erreurs de bus ATA, secteurs UNC ou erreurs du support peuvent précéder un état SMART <em>FAILED</em>. Le tampon dmesg ne les conserve pas après redémarrage ; l’historique des observations, oui.",
"<strong>SMART n’exclut pas tous les défauts.</strong> Un disque peut avoir des attributs verts et rencontrer des problèmes. Les observations conservent des symptômes supplémentaires : ICRC, IDNF, réinitialisations SATA ou baisses de vitesse.",
"<strong>Distingue l’actuel du récent.</strong> Health Monitor résout automatiquement les erreurs transitoires qui ne se reproduisent plus. L’historique permet de voir plusieurs jours après, par exemple, trois erreurs E/S survenues une nuit.",
"<strong>Alimente les notifications par niveaux.</strong> disk_io utilise la fréquence des observations pour choisir silence, WARNING ou CRITICAL sur une fenêtre glissante de 24 heures introduite en 1.2.1.2."
],
"obsDedupTitle": "Regroupement des doublons et nouveaux avis",
"obsDedupBody1": "Les observations sont regroupées par <strong>signature</strong>, empreinte stable du type d’erreur, de l’appareil et des champs clés du message. Les répétitions augmentent <code>occurrence_count</code> sur la ligne existante. Une <strong>signature différente</strong> crée une autre observation et un nouvel événement pour les notifications.",
"obsDedupBody2": "Pour éviter les cascades, la première combinaison disque, signature et gravité avertit l’opérateur. La même combinaison attend 24 heures avant un nouvel avis, même si le compteur augmente. Le passage de WARNING à CRITICAL interrompt ce délai et signale l’aggravation.",
"obsDismissTitle": "Historique permanent et erreurs actives",
"obsDismissBody1": "Les observations ne peuvent être rejetées, masquées ni supprimées. Chaque signature a une carte ; une répétition augmente le compteur et actualise la dernière date. L’historique suit le numéro de série : un autre disque commence vide même sur le même port, et un renommage par le noyau conserve l’historique.",
"obsDismissBody2": "Résoudre ou rejeter une erreur active dans Health Monitor ne modifie pas ses observations. Elles subsistent après résolution automatique, pour qu’un avertissement transitoire de la semaine passée reste visible. Consultez <link>Health Monitor</link> pour gérer les erreurs actives."
},
"dataCollected": {
"heading": "Comment les données sont collectées",
"headerSection": "Section de l'onglet",
"headerEndpoint": "Point de terminaison",
"headerSource": "Source",
"rows": [
{
"section": "Cartes de synthèse supérieures",
"endpoint": "/api/storage/summary",
"source": "Agrégé de <code>lsblk</code>, <code>zpool list</code>, <code>vgs</code> / <code>lvs</code>."
},
{
"section": "Inventaire par disque",
"endpoint": "/api/storage",
"source": "<code>lsblk -O</code> + <code>smartctl -i</code> par appareil, avec cache d’identité vidé lors des branchements à chaud."
},
{
"section": "Stockages Proxmox",
"endpoint": "/api/proxmox-storage",
"source": "<code>pvesh get /nodes/&lt;node&gt;/storage</code> avec l'état actif/en ligne de chacun."
},
{
"section": "Valeurs SMART actuelles",
"endpoint": "/api/storage/smart/<disk>",
"source": "<code>smartctl -A &lt;dev&gt;</code> est une requête possible ; le point de détail utilise aussi le JSON SMART complet et les données propres à NVMe."
},
{
"section": "Historique des autotests SMART",
"endpoint": "/api/storage/smart/<disk>/history",
"source": "Conservé sous <code>/usr/local/share/proxmenux/smart/&lt;disk&gt;/</code> en instantanés JSON."
},
{
"section": "Observations permanentes",
"endpoint": "/api/storage/observations",
"source": "Table SQLite actualisée par Health Monitor à chaque cycle et conservée après résolution des erreurs actives."
}
],
"outro": "Vérifier la chaîne de collecte sur l'hôte:",
"codeComment1": "# Récupérer l’état actuel depuis un script",
"codeComment2": "# Comparer les données du tableau de bord à celles du système d’exploitation"
},
"whereNext": {
"heading": "Où aller ensuite",
"items": [
{
"label": "Moniteur de santé",
"href": "/docs/monitor/health-monitor",
"tail": " — catégorie Disques et E/S et règles de suppression."
},
{
"label": "Référence de l’API",
"href": "/docs/monitor/api",
"tail": " — points de terminaison du stockage et de SMART."
},
{
"label": "Notifications",
"href": "/docs/monitor/notifications",
"tailRich": " — actions déclenchées par <code>disk_io_error</code>, <code>storage_unavailable</code> et <code>smart_test_failed</code>."
},
{
"label": "Indice du tableau de bord",
"href": "/docs/monitor/dashboard",
"tail": "— les autres onglets."
},
{
"label": "ProxMenux → Gestionnaire de disques",
"href": "/docs/disk-manager",
"tail": " — actions TUI : formater, effacer, tester SMART et importer des disques dans des VM ou conteneurs."
},
{
"label": "ProxMenux → État et tests SMART du disque",
"href": "/docs/disk-manager/smart-disk-test",
"tail": " — équivalent CLI : planifier les tests SMART, exporter le JSON affiché et consulter les types de tests et leur interprétation."
}
]
}
}
@@ -0,0 +1,120 @@
{
"meta": {
"title": "ProxMenux Monitor — Tableau de bord : Journaux système | Documentation ProxMenux",
"description": "L'onglet Logs système regroupe trois sources en un seul écran : journalctl en direct avec filtres et téléchargement, l'historique des tâches Proxmox (UPIDs), et le journal de notification — tous consultables, filtrés par gravité / plage de temps, et téléchargeables sous forme de paquets de texte."
},
"header": {
"title": "Tableau de bord : Journaux système",
"description": "Trois sous-onglets sur un même écran : journal système (journalctl avec filtres), historique des tâches Proxmox et journal des notifications. Tous permettent de rechercher, filtrer et télécharger les données sous forme de fichiers texte.",
"section": "ProxMenux Monitor · Tableau de bord"
},
"readOnly": {
"title": "En lecture seule par conception",
"body": "Cet onglet ne modifie aucun fichier journal. Les filtres sont conservés dans l'URL ou l'état de l'interface ; les téléchargements sont préparés sur le serveur. Le tableau de bord ne supprime jamais les entrées. Pour leur entretien, utilisez <code>journalctl --vacuum-time=&lt;N&gt;</code> ou <code>logrotate</code> sur l'hôte."
},
"topRow": {
"heading": "Ligne supérieure : quatre compteurs",
"items": [
"<strong>Total des entrées</strong> — nombre de lignes dans la période du filtre actif.",
"<strong>Erreurs</strong> — nombre de lignes de gravité ≤ 3 (<code>err</code> / <code>crit</code> / <code>alert</code> / <code>emerg</code>).",
"<strong>Avertissements</strong> — nombre de lignes de gravité 4 (<code>warning</code>).",
"<strong>Sauvegardes</strong> — nombre de tâches vzdump / PBS dans la même période."
]
},
"subtabs": {
"heading": "Trois sous-onglets",
"logsTitle": "Journaux",
"logsIntro": "Le journal système, obtenu sur le serveur avec <code>journalctl</code>. Filtres disponibles dans la barre d'outils :",
"logsFilters": [
"<strong>Gravité</strong> — emerg / alert / crit / err / warning / notice / info / debug, ou toute combinaison.",
"<strong>Délais</strong> — dernier 5 min/ 15 min/ 1 h/ 6 h/ 24 h/ 7 d/sur mesure.",
"<strong>Recherche libre</strong> — sous-chaîne ou expression régulière (<code>journalctl --grep</code>).",
"<strong>Filtre par unité</strong> — limite les résultats à une unité systemd donnée (<code>pveproxy.service</code>, <code>nginx.service</code>, …)."
],
"logsRowsAfter": "Chaque ligne affiche l'horodatage, le badge de gravité, l'unité source et le message. Les longs messages s'effondrent avec un \"show more\" bascule. L'action <strong>Download</strong> regroupe le filtre actuel dans un seul fichier <code>.txt</code> via <code>GET /api/logs/download</code> — utile quand vous voulez partager une tranche de journal avec quelqu'un.",
"logDetailsModalTitle": "Fenêtre Détails du journal",
"logDetailsBody": "Un clic sur une ligne ouvre la fenêtre <strong>Détails du journal</strong>, avec tous les champs structurés capturés par journald pour cette entrée, comme avec <code>journalctl --output=verbose</code> sur l'hôte.",
"logDetailsImageAlt": "Fenêtre Détails du journal — une entrée développée avec niveau, service, horodatage, source, unité systemd, identifiant du processus, nom d'hôte et message complet",
"logDetailsImageCaption": "Détails du journal — tous les champs structurés de cette entrée journald, avec le message complet non tronqué en bas. Utile pour les journaux de cron et de services lorsque la commande exécutée compte.",
"fieldsIntro": "Champs indiqués :",
"fields": [
"<strong>Niveau</strong> — badge de gravité de couleur (INFO / AVERTISSEMENT / ERREUR / CRITIQUE).",
"<strong>Service</strong> — nom abrégé de l'unité / processus qui a émis l'entrée.",
"<strong>Timestamp</strong> — date et heure complètes de la ligne de journal.",
"<strong>Source</strong> — origine de l'entrée (journal, noyau, audit, ...).",
"<strong>Systemd Unit</strong> — l'unité réelle <code>.service</code> / <code>.timer</code> / <code>.socket</code> si l'entrée était associée à une.",
"<strong>Process ID</strong> — PID du processus émetteur.",
"<strong>Hostname</strong> — utile lorsque les revues sont transmises à travers les nœuds de cluster.",
"<strong>Message</strong> — message complet non tronqué dans un bloc à chasse fixe, prêt à copier."
],
"maxLevelStoreTitle": "Journald MaxLevelStore",
"maxLevelStoreBody": "Sur une nouvelle installation Proxmox, journald utilise par défaut <code>MaxLevelStore=warning</code>, ce qui écarte les messages info. Monitor le détecte au démarrage et ajoute un fichier de configuration complémentaire (<code>/etc/systemd/journald.conf.d/proxmenux-loglevel.conf</code>) avec le seuil <code>info</code>, pour conserver les messages informatifs et plus graves. Cela ne comprend pas debug.",
"backupsTitle": "Sauvegardes",
"backupsBody": "Historique des tâches Proxmox limité aux sauvegardes. Une ligne par tâche (<code>vzdump</code>, transferts PBS, récupération de mémoire inutilisée, vérification), avec état (OK / WARNINGS / ERROR), invité concerné, stockage source, durée et UPID. Cliquez sur une ligne pour charger le journal complet via <code>GET /api/task-log/&lt;upid&gt;</code> : les mêmes données que dans <em>Datacenter → Tâches</em>, limitées aux sauvegardes.",
"notificationsTitle": "Notifications",
"notificationsBody1": "Toutes les notifications envoyées par Monitor : Telegram, Discord, e-mail, Gotify, ntfy, Slack, Teams et webhook. Chaque ligne indique l'horodatage, le canal, le type d'événement, la gravité, le titre et le corps générés et, si l'IA est activée, un bouton pour comparer sa reformulation à l'original.",
"notificationsBody2": "Cet onglet permet de vérifier la bonne livraison par un canal et de comparer la reformulation de l'IA au texte du modèle. Les canaux se configurent sur la page détaillée <link>Notifications</link>."
},
"dataCollected": {
"heading": "Comment les données sont collectées",
"headerSubtab": "Sous-onglet",
"headerEndpoint": "Point de terminaison",
"headerSource": "Source",
"rows": [
{
"subtab": "Journaux (filtre en direct)",
"endpoint": "/api/logs",
"source": "<code>journalctl --output json --since &lt;range&gt;</code> avec filtres de gravité, unité et recherche appliqués sur le serveur."
},
{
"subtab": "Télécharger",
"endpoint": "/api/logs/download",
"source": "Même requête, renvoyée en texte brut pour grep / less."
},
{
"subtab": "Sauvegardes",
"endpoint": "/api/backups",
"source": "Historique des tâches PVE filtré sur <code>vzdump</code>, les transferts PBS, la récupération de mémoire inutilisée et la vérification."
},
{
"subtab": "Détails d'une tâche de sauvegarde",
"endpoint": "/api/task-log/&lt;upid&gt;",
"source": "Journal complet des tâches en texte clair lu à partir de <code>/var/log/pve/tasks/&lt;index&gt;/&lt;upid&gt;</code>."
},
{
"subtab": "Historique des notifications",
"endpoint": "/api/notifications/history",
"source": "Table SQLite <code>notification_history</code> alimentée par la boucle d'envoi."
}
],
"apiIntro": "Le filtre en direct et les téléchargements sont aussi accessibles via l'API :",
"codeComment1": "# Erreurs et événements plus graves de la dernière heure avec un mot-clé",
"codeComment2": "# Télécharger le journal complet des dernières 6 heures en texte simple",
"codeComment3": "# Rechercher la sortie complète d'une tâche spécifique par UPID"
},
"whereNext": {
"heading": "Où aller ensuite",
"items": [
{
"label": "Moniteur de santé",
"href": "/docs/monitor/health-monitor",
"tail": " — la catégorie Journaux système, qui détecte les événements persistants, les pics et les cascades."
},
{
"label": "Notifications",
"href": "/docs/monitor/notifications",
"tail": " — la surveillance du journal lit la même source et transforme les correspondances en notifications."
},
{
"label": "Référence de l’API",
"href": "/docs/monitor/api",
"tail": " — les points de terminaison logs et task-log et leurs paramètres de requête."
},
{
"label": "Index du tableau de bord",
"href": "/docs/monitor/dashboard",
"tail": "— les autres onglets."
}
]
}
}
@@ -0,0 +1,177 @@
{
"meta": {
"title": "ProxMenux Monitor — Tableau de bord : Aperçu du système | Documentation ProxMenux",
"description": "Onglet initial par défaut de ProxMenux Monitor : quatre cartes (CPU, mémoire, VM et LXC actifs, température) avec actualisation en direct et mini-courbe de tendance, graphique historique et résumés du stockage et du réseau liés à leurs onglets détaillés."
},
"header": {
"title": "Tableau de bord : onglet Aperçu du système",
"description": "L'onglet ouvert par défaut : quatre cartes de mesures en direct en haut, un graphique historique au centre et des résumés du stockage et du réseau en bas, issus des mêmes API que les onglets détaillés.",
"section": "ProxMenux Monitor · Tableau de bord"
},
"readOnly": {
"title": "Un instantané en lecture seule",
"body": "Tous les panneaux de cet onglet sont informatifs. Les actions se trouvent dans les onglets liés : Stockage pour les disques, VMs et LXCs pour démarrer ou arrêter les invités, Sécurité pour l'authentification."
},
"captureAlt": "Onglet Aperçu du système — quatre cartes métriques (CPU, Mémoire, VMs actifs, Température), diagramme des nœuds, et cartes de synthèse de stockage / réseau",
"captureCaption": "Aperçu du système, l'onglet initial par défaut. Les quatre cartes sont actualisées en direct, le graphique montre l'historique et les deux cartes du bas résument le stockage et le réseau.",
"topRow": {
"heading": "Ligne supérieure : cartes de mesures en direct",
"intro": "Quatre cartes en grille 2×2 sur mobile et sur une ligne sur ordinateur. Chacune est actualisée via <code>/api/system</code> toutes les quelques secondes.",
"headerCard": "Carte",
"headerWhat": "Ce qu'il montre",
"headerSource": "Source",
"rows": [
{
"card": "Utilisation du processeur",
"what": "Pourcentage actuel avec une barre de progression. Mise à jour ~1 s via l'échantillonneur de signes vitaux.",
"source": "psutil.cpu_percent()"
},
{
"card": "Utilisation de la mémoire",
"what": "Go utilisés, pourcentage et total en Go. La barre représente le pourcentage.",
"source": "psutil.virtual_memory()"
},
{
"card": "VM active et LXC",
"what": "Nombre d'invités en cours d'exécution, répartition En cours / Arrêtés et total des VM et LXC en bas.",
"source": "/api/vms (consolidé)"
},
{
"card": "Température",
"what": "Température CPU en °C avec état (basse / modérée / élevée) et mini-courbe des 5 dernières minutes en arrière-plan. Affiche <em>N/A</em> sans capteur. Cliquez pour ouvrir les détails.",
"source": "sensors / coretemp"
}
],
"thresholdsTitle": "Couleurs et seuils appliqués ici",
"thresholdsIntro": "Anneaux, barres et mini-courbes suivent la même échelle : <green/> <strong>vert</strong> sous le seuil Avertissement, <amber/> <strong>ambre</strong> entre Avertissement et Critique, <red/> <strong>rouge</strong> à partir de Critique. Valeurs recommandées fournies avec ProxMenux :",
"thresholdsItems": [
"<strong>Utilisation CPU</strong> — avertissement 85 %, critique 95 %.",
"<strong>Mémoire</strong> — avertissement 85 %, critique 95 %. Le swap déclenche aussi le niveau Critique à 5 % d'utilisation ; un hôte Proxmox sain devrait rarement y recourir.",
"<strong>Température CPU</strong> — avertissement 80 °C, critique 90 °C."
],
"thresholdsOutro": "Les valeurs sont configurables par hôte. <link>Paramètres → Seuils du moniteur de santé</link> centralise leur réglage et explique comment les adapter.",
"sparklineTitle": "La mini-courbe montre la tendance",
"sparklineBody": "La carte de température trace les 5 dernières minutes sous la valeur, avec les couleurs Avertissement/Critique définies ci-dessus. Elle permet de voir rapidement si la température de l'hôte augmente sans ouvrir les détails."
},
"processes": {
"heading": "Processus les plus consommateurs de CPU et de mémoire",
"intro": "Les cartes CPU et Mémoire ouvrent une liste triable des 25 processus les plus consommateurs : par utilisation CPU depuis la carte CPU, ou par mémoire résidente depuis la carte Mémoire.",
"listTitle": "La boîte de dialogue liste",
"listItems": [
"<strong>Actualisation automatique</strong> — la liste se met à jour toutes les 5 secondes tant que la fenêtre est ouverte ; les requêtes cessent à sa fermeture.",
"<strong>Filtre</strong> — la recherche limite la liste par commande, utilisateur ou PID.",
"<strong>Barre en ligne</strong> — la colonne métrique primaire dessine une petite barre à l'échelle de la valeur la plus élevée de la liste filtrée, de sorte que le classement reste visible même si aucun processus n'est proche de 100 %.",
"<strong>Disposition mobile</strong> — sous 640 px, les colonnes PID et Utilisateur sont masquées pour garder Commande, CPU % et Mémoire sans défilement horizontal."
],
"captureListAlt": "Fenêtre des processus par mémoire — tableau trié par RSS avec PID, utilisateur, commande, CPU % et mémoire",
"captureListCaption": "La carte mémoire ouvre la liste triée par RSS (accent indigo). La carte CPU ouvre la même liste triée par l'utilisation de CPU (accent bleu).",
"detailTitle": "Détails par processus",
"detailIntro": "Cliquez sur une ligne pour ouvrir une seconde fenêtre avec les données en direct du processus, réparties en quatre sections :",
"detailItems": [
"<strong>Aperçu</strong> — état, processus parent, nombre de threads, descripteurs de fichiers ouverts, utilisateur et groupe.",
"<strong>Ressources</strong> — CPU %, mémoire %, mémoire résidente (RSS), taille virtuelle, swap et totaux des E/S en lecture et écriture.",
"<strong>Commande</strong> — nom court, ligne de commande complète, chemin de l'exécutable et répertoire de travail.",
"<strong>Durée</strong> — horodatage de démarrage et temps d'exécution écoulé."
],
"detailRefresh": "Les détails sont actualisés toutes les 3 secondes. Quand le processus se termine, les requêtes cessent et un bandeau ambre <em>Ce processus est terminé</em> apparaît. Le dernier état capturé reste visible, atténué, pour consulter ce qui se passait juste avant la fin.",
"captureDetailAlt": "Fenêtre de détails d'un processus — Aperçu, Ressources, Commande et Durée pour un PID",
"captureDetailCaption": "Boîte de dialogue de détails par processus ouverte à partir d'une ligne de liste. La couleur de l'accent correspond à la carte qui l'a ouverte (bleu pour CPU, indigo pour Mémoire)."
},
"middle": {
"heading": "Centre : graphiques des métriques du nœud",
"body1": "Sous les cartes, <code>NodeMetricsCharts</code> affiche les historiques CPU, mémoire et E/S disque du stockage RRD de Proxmox via <code>/api/node/metrics</code>. Le sélecteur propose <em>1 heure / 24 heures / 7 jours / 30 jours / 1 an</em>. La résolution diminue pour les grandes périodes afin de conserver un affichage fluide.",
"body2": "Les mêmes graphiques que l'interface web Proxmox pour un nœud, intégrés au thème sombre de Monitor et alignés avec les autres panneaux."
},
"bottom": {
"heading": "Ligne inférieure : Sommaires de stockage et de réseau",
"storageTitle": "Carte d'aperçu du stockage",
"storageIntro": "Une vue condensée de l'état de stockage de l'hôte, divisée en trois blocs:",
"storageItems": [
"<strong>Capacité totale du nœud</strong> — somme des stockages VM/LXC et du stockage local du système, avec une barre dégradée représentant l'espace utilisé et libre.",
"<strong>Capacité totale / Disques physiques</strong> — capacité brute et nombre de disques physiques détectés.",
"<strong>Stockage VM/LXC</strong> — espace utilisé, libre et pourcentage des stockages des invités, avec un compteur s'il y en a plusieurs.",
"<strong>Stockage local (système)</strong> — montage racine ou système de l'hôte, séparé du pool des invités."
],
"storageDrillIn": "Les détails se trouvent dans l'<link>onglet Stockage</link> : SMART par disque, pools ZFS, historique des observations, etc.",
"networkTitle": "Carte d'aperçu du réseau",
"networkBody1": "La ligne supérieure montre le nombre d'interfaces actives (physiques + ponts combinés). En dessous, deux rangées de badges colorés pour les interfaces qui sont <code>up</code> — NIC physiques en bleu, ponts en couleur secondaire. Un sélecteur de temps en haut à droite (1 heure / 24 heures / 7 jours / 30 jours / 1 année) contrôle une petite carte de trafic RX / TX.",
"networkBody2": "Les détails par interface (IP/MAC, graphique RRD, membres du pont, mode bond, etc.) sont dans l'<link>onglet Réseau</link>."
},
"refresh": {
"heading": "Modèle d'actualisation",
"intro": "Chaque panneau gère son état de chargement (<code>loadingStates.cpu</code>, <code>loadingStates.storage</code>, …) pour éviter qu'une source lente bloque les autres. Un espace réservé animé apparaît pendant le chargement. Les échecs sont gérés sans bloquer la vue : sans capteur de température, la carte affiche <em>N/A</em> plutôt qu'une erreur.",
"items": [
"<strong>Cartes supérieures</strong> — actualisation toutes les 5 s environ. CPU et température reçoivent aussi des données chaque seconde depuis l'échantillonneur de signes vitaux.",
"<strong>Graphique des métriques du nœud</strong> — chargement à l'ouverture et au changement de période ou de langue. Un nouvel essai, si nécessaire, a lieu après 60 s.",
"<strong>Carte de stockage</strong> — rafraîchir chaque 60 s. Les données SMART sont mises en cache plus longtemps (l'onglet Stockage déclenche une nouvelle lecture sur demande).",
"<strong>Carte réseau</strong> — résumé toutes les 59 s et graphique du trafic toutes les 60 s pour la période sélectionnée.",
"<strong>Actualisation manuelle</strong> — le bouton Actualiser de l'en-tête recharge immédiatement tous les panneaux."
]
},
"dataCollected": {
"heading": "Comment les données sont collectées",
"headerCard": "Carte",
"headerEndpoint": "Point de terminaison",
"headerSource": "Source",
"rows": [
{
"card": "Indicateur d'état de l'en-tête",
"endpoint": "/api/health",
"source": "L'état global mis en cache produit par le Health Monitor chaque cycle."
},
{
"card": "CPU / RAM / Swap / Durée de fonctionnement",
"endpoint": "/api/system",
"source": "<code>/proc/stat</code>, <code>/proc/meminfo</code>, <code>/proc/uptime</code> avec prélèvement à courte fenêtre CPU."
},
{
"card": "Informations sur l'hôte (kernel, BIOS, distro)",
"endpoint": "/api/info",
"source": "<code>uname -a</code>, <code>dmidecode</code>, version PVE. Mis en cache par processus."
},
{
"card": "Stockage / réseau / cartes VMs",
"endpoint": "/api/storage/summary, /api/network/summary, /api/vms",
"source": "Consultez les onglets détaillés. Les cartes d'en-tête montrent une vue compacte provenant des mêmes points de terminaison."
},
{
"card": "Fréquence d'actualisation",
"endpoint": "—",
"source": "Données système toutes les 5 s ; stockage, VM et résumé réseau toutes les 59 s. Le bouton Actualiser de l'en-tête recharge immédiatement tous les panneaux."
}
],
"codeComment1": "# Appel alimentant l'indicateur d'état de l'en-tête",
"codeComment2": "# public, sans jeton",
"codeComment3": "# instantané authentifié utilisé par les cartes"
},
"whereNext": {
"heading": "Où aller ensuite",
"items": [
{
"label": "Moniteur de santé",
"href": "/docs/monitor/health-monitor",
"tail": " — la fenêtre de l'indicateur d'état de l'en-tête : dix catégories, masquage et suppression des alertes."
},
{
"label": "Référence de l’API",
"href": "/docs/monitor/api",
"tail": " — points de terminaison system, info et health."
},
{
"label": "Notifications",
"href": "/docs/monitor/notifications",
"tail": "— comment les mêmes statuts se transforment en Telegram / Discord / Messages électroniques."
},
{
"label": "Index du tableau de bord",
"href": "/docs/monitor/dashboard",
"tail": " — les autres onglets du tableau de bord en un coup d'œil."
},
{
"label": "Architecture",
"href": "/docs/monitor/architecture",
"tail": " — les threads en arrière-plan et les API qui alimentent cette vue."
}
]
}
}
@@ -0,0 +1,174 @@
{
"meta": {
"title": "ProxMenux Monitor — Tableau de bord : Terminal | Documentation ProxMenux",
"description": "Shell de l'hôte Proxmox dans le navigateur : jusqu'à 4 terminaux en grille, boutons de clavier pour mobiles (ESC, TAB, flèches, combinaisons Ctrl), aide-mémoire intégré avec cheat.sh et protection JWT."
},
"header": {
"title": "Tableau de bord : onglet terminal",
"description": "Une véritable session shell sur l'hôte Proxmox depuis le navigateur : jusqu'à quatre terminaux simultanés, boutons de clavier pour mobiles et aide-mémoire des commandes, avec le même thème que le reste du tableau de bord.",
"section": "ProxMenux Monitor · Tableau de bord"
},
"intro": {
"title": "Un vrai PTY dans le navigateur",
"body": "Le terminal crée un PTY sur le serveur via <code>flask_terminal_routes</code>, le relie par WebSocket à <code>xterm.js</code> dans le navigateur et fonctionne en tant que <code>root</code>, utilisateur de l'unité systemd. Comme avec <code>ssh root@&lt;host&gt;</code>, vous pouvez utiliser <code>vim</code>, <code>tmux</code>, les outils ncurses et les CLI Proxmox (<code>qm</code>, <code>pct</code>, <code>pvesh</code>, <code>pvecm</code>). Chaque PTY exporte <code>PROXMENUX_TERMINAL=monitor</code>. Tous ses processus enfants <code>bash</code>, dont un lancement ultérieur de <code>menu</code>, héritent de cette variable pour reconnaître le terminal de Monitor."
},
"singleAlt": "Onglet Terminal de ProxMenux Monitor — une session affichant le résumé système de Fastfetch à la connexion",
"singleCaption": "Un terminal hôte ouvert : la barre indique le nombre (<em>1 / 4 terminaux</em>), <em>+ Nouveau</em>, <em>Rechercher</em>, <em>Effacer</em> et <em>Fermer</em>. Les boutons de clavier pour mobiles apparaissent en dessous sur les appareils tactiles.",
"target": {
"heading": "Cible de connexion",
"body1": "L'onglet Terminal ouvre un shell sur l'hôte <strong>Proxmox lui-même</strong> — la même connexion que vous pourriez obtenir sur SSH. Chaque onglet ouvre un tout nouveau terminal hôte.",
"body2": "Pour atteindre un conteneur <strong>LXC</strong> du navigateur, utilisez le bouton dédié <em>Console</em> sur chaque carte CT en cours d'exécution dans l'onglet <link>VMs & LXCs</link>. Il ouvre un modal qui exécute <code>pct enter &lt;vmid&gt;</code> et réutilise la même barre d'outils mobile décrite ci-dessous."
},
"menuGuard": {
"heading": "Protection de la mise à jour de menu dans ce terminal",
"body1": "Après confirmation, <code>menu</code> remplace sa propre arborescence de scripts et se recharge. Cela fonctionne via SSH ou la console Proxmox, mais fermerait le PTY du shell dans le navigateur et interromprait le WebSocket. Pour l'éviter, <code>check_updates_stable</code>, <code>check_updates_beta</code> et <code>apply_release_channel</code> lisent <code>PROXMENUX_TERMINAL</code> pour détecter le contexte Monitor.",
"body2": "Le dialogue oui/non est alors remplacé par un message avec la commande officielle de l'installateur : <code>bash -c \"$(wget -qLO - https://raw.githubusercontent.com/MacRimi/ProxMenux/main/install_proxmenux.sh)\"</code> pour stable et l'URL équivalente de <code>install_proxmenux_beta.sh</code> pour bêta. La mise à jour doit être exécutée via SSH ou la console de l'hôte Proxmox ; le terminal du navigateur sert à lire et confirmer le message."
},
"fourTerminals": {
"heading": "Jusqu'à quatre terminaux à la fois",
"intro": "L'onglet vous permet d'ouvrir jusqu'à quatre terminaux hôtes simultanément. Chacun obtient son propre PTY et son propre WebSocket — ce sont des sessions totalement indépendantes. Deux mises en page changent avec les icônes à côté du bouton \"Nouveau\" :",
"items": [
"<strong>Vue par onglets</strong> — un terminal visible, les autres sous forme d'onglets nommés en haut (<em>Terminal 1</em>, <em>Terminal 2</em>…). Pratique pour une tâche, les autres restant en arrière-plan.",
"<strong>Vue en grille</strong> — tous les terminaux ouverts dans une grille 2×2. Vous pouvez surveiller <code>htop</code> dans l'un, <code>iftop</code> dans un autre et modifier des fichiers dans un troisième sans changer d'onglet."
],
"outro": "La barre indique le nombre de terminaux (<em>1/4 terminaux</em>, <em>4/4 terminaux</em>). <strong>+ Nouveau</strong> ouvre un onglet ; le petit <code>×</code> de son en-tête le ferme. Le grand bouton rouge <strong>Fermer</strong> en haut ferme tous les terminaux."
},
"gridAlt": "Onglet Terminal de ProxMenux Monitor — quatre terminaux en grille avec ls, configuration réseau, iftop et menu principal ProxMenux côte à côte",
"gridCaption": "Vue en grille (4 / 4 terminaux) — quatre PTY indépendants en parallèle : liste de répertoire, <code>/etc/network/interfaces</code>, <code>iftop</code> et menu principal ProxMenux. Le sélecteur de disposition de la barre permet de passer entre grille et onglets.",
"keyboard": {
"heading": "Boutons de clavier pour mobiles",
"intro": "Les claviers de téléphone et de tablette n'offrent souvent pas ESC, TAB, les flèches ou les combinaisons de touches de modification. Elles sont nécessaires pour utiliser <code>vim</code>, <code>nano</code>, <code>htop</code> ou les menus TUI. Terminal affiche donc une rangée de boutons tactiles en dessous sur les petits écrans ou les appareils tactiles :",
"headerButton": "Bouton",
"headerSends": "Envoie",
"headerUse": "Utilisation typique",
"rows": [
{
"button": "ESC",
"sends": "\\x1b",
"use": "Quitter le mode insert en <code>vim</code>, annuler une boîte de dialogue TUI, laisser une recherche."
},
{
"button": "TAB",
"sends": "\\t",
"use": "Complétion des chemins et navigation entre les champs dans dialog/whiptail."
},
{
"button": "↑ ↓ ← →",
"sends": "\\x1bO[ABCD]",
"use": "Historique Shell, mouvement de curseur, navigation de menu."
},
{
"button": "↵ Entrée",
"sends": "\\r",
"use": "Confirmer. Certains claviers remplacent Entrée par Aller/Terminé ; ce bouton évite l'ambiguïté."
},
{
"button": "Ctrl ▾",
"sends": "Liste déroulante",
"useRich": true
}
],
"ctrlIntro": "Trois séquences de contrôle :",
"ctrlItems": [
"<code>Ctrl+C</code> — annuler / interrompre la commande en cours d'exécution (<code>\\x03</code>).",
"<code>Ctrl+X</code> — quitter <code>nano</code> (<code>\\x18</code>).",
"<code>Ctrl+R</code> — recherche à rebours dans l'historique bash (<code>\\x12</code>)."
],
"modalTitle": "Même barre d'outils dans la fenêtre de console LXC",
"modalBody": "La console ouverte depuis <link>VMs et LXCs → Console</link> affiche les mêmes boutons de clavier sous la fenêtre. À la connexion, elle saisit automatiquement <code>pct enter &lt;vmid&gt;</code> pour entrer directement dans le conteneur."
},
"lxcAlt": "Fenêtre de console LXC de ProxMenux Monitor — Terminal: ubuntu (ID: 103), avec la même barre mobile (ESC, TAB, flèches, Entrée, Ctrl) en dessous",
"lxcCaption": "Console LXC ouverte depuis <em>VMs et LXCs → Console</em>. L'en-tête indique le conteneur cible (<em>Terminal: ubuntu (ID: 103)</em>) et la même barre tactile apparaît sous le terminal.",
"search": {
"heading": "Rechercher des commandes — aide-mémoire intégré",
"intro": "Le bouton bleu <strong>Rechercher</strong> ouvre une recherche approximative de commandes. Saisissez quelques lettres d'une commande Linux ou Proxmox (<code>ls</code>, <code>tar</code>, <code>qm</code>, <code>pct</code>, <code>zpool</code>, <code>systemctl</code>…) pour afficher des exemples avec <em>Envoyer au terminal actif</em> en un geste. Vous pouvez ainsi retrouver une option sans changer d'onglet.",
"modalAlt": "Fenêtre Rechercher des commandes de ProxMenux Monitor — recherche approximative de commandes Linux et Proxmox avec cheat.sh et plusieurs exemples de ls",
"modalCaption": "Recherche de <code>ls</code> — chaque résultat affiche la commande, sa description et une petite flèche pour l'envoyer au terminal actif. La source des données est indiquée en bas à droite (<em>Fourni par cheat.sh</em>).",
"aboutLabel": "À propos de cheat.sh:",
"aboutBody": "est un aide-mémoire libre maintenu par la communauté, regroupant de courts exemples pratiques pour des centaines de commandes Linux, outils d'administration et langages de programmation. Prévu pour être consulté avec <code>curl cheat.sh/&lt;command&gt;</code>, il est aussi accessible dans le navigateur. ProxMenux Monitor transmet les requêtes par un proxy côté serveur pour garder la même origine que le tableau de bord.",
"headerSource": "Source",
"headerWhen": "Quand il est utilisé",
"headerWhat": "Ce que vous voyez",
"onlineLabel": "(en ligne)",
"onlineWhen": "Lorsque l'hôte a accès à Internet et que le proxy cheat.sh répond.",
"onlineWhat": "Plusieurs exemples pratiques par commande, avec leur description au-dessus. Le point d'état de l'en-tête est <green>vert</green>.",
"fallbackLabel": "Solution de repli locale",
"fallbackWhen": "Lorsque cheat.sh est inaccessible (hôte hors ligne, pare-feu restrictif, panne de cheat.sh).",
"fallbackWhat": "Une liste intégrée de commandes Linux et Proxmox courantes. Le catalogue est plus petit, mais toujours disponible. Le point d'état est <red>rouge</red>.",
"sendingNote": "<strong>Fonctionnement de l'envoi</strong> : la flèche près du résultat transmet le texte au terminal actif (onglet sélectionné ou dernier terminal cliqué en grille). La fenêtre se ferme automatiquement pour vous permettre d'appuyer sur Entrée."
},
"auth": {
"heading": "Authentification",
"items": [
"Le navigateur demande d'abord un ticket à usage unique via <code>POST /api/terminal/ticket</code>, avec le JWT dans l'en-tête <code>Authorization</code>. Ce ticket est ensuite transmis à l'ouverture du WebSocket et expire après 5 secondes. Si l'authentification est activée et le ticket absent ou invalide, la connexion est fermée avant la création d'un PTY.",
"Si Monitor est derrière un proxy inverse, celui-ci doit transmettre les demandes de mise à niveau WebSocket. Exemples Nginx / Caddy / Traefik sur la page <link>Accès et authentification</link>."
]
},
"clipboard": {
"heading": "Presse-papiers, historique d'affichage et redimensionnement",
"items": [
"<strong>Copier et coller</strong> — utilise le presse-papiers du navigateur. Sélectionnez le texte avec la souris ou le pavé tactile et utilisez le raccourci système (<code>Cmd+C</code> sur macOS, <code>Ctrl+Shift+C</code> sur Linux/Windows). Les bureaux Linux permettent aussi de coller avec le clic central.",
"<strong>Historique d'affichage</strong> — défilement à la molette ou à deux doigts. xterm.js garde les quelques milliers de dernières lignes en mémoire.",
"<strong>Redimensionnement</strong> — le terminal ajuste la taille de la fenêtre PTY quand vous redimensionnez le panneau, pour afficher correctement <code>htop</code> et <code>vim</code>.",
"<strong>Reconnexion au retour sur l'onglet</strong> — changer d'application sur téléphone ou tablette, notamment iPad, peut couper le WebSocket. Terminal détecte le changement de visibilité et se reconnecte au retour, avec un délai de 15 secondes pour les connexions VPN lentes."
]
},
"disconnect": {
"heading": "Causes de déconnexion",
"intro": "Les raisons les plus courantes pour lesquelles une session se termine et ce qu'il faut faire pour chacune :",
"headerCause": "Cause",
"headerFix": "Solution",
"rows": [
{
"cause": "JWT de session expiré lors de l'ouverture ou de la reconnexion (durée de 24 h).",
"fix": "Rafraîchir la page et vous connecter à nouveau. Le terminal n'est pas conçu pour les sessions sans surveillance, donc la durée de vie du JWT correspond à la connexion régulière du tableau de bord."
},
{
"cause": "Délai d'inactivité du proxy inverse.",
"fix": "Augmentez <code>proxy_read_timeout</code> dans Nginx ou son équivalent dans Caddy / Traefik (exemples dans Accès et authentification)."
},
{
"cause": "Téléphone ou tablette en veille.",
"fix": "Au réveil de l'appareil, l'onglet se reconnecte automatiquement (délai de 15 s pour les connexions VPN). Sinon, rechargez-le."
},
{
"cause": "Le service redémarre sur l'hôte.",
"fix": "Tout redémarrage de <code>proxmenux-monitor.service</code> ferme tous les PTY. Ouvrez de nouveaux terminaux une fois le tableau de bord rechargé."
}
]
},
"warning": {
"title": "Le terminal est un shell root sur l'hôte",
"body": "Le terminal hérite de l'utilisateur de l'unité systemd (<code>root</code>) et dispose de tous les privilèges sur l'hôte Proxmox. Configurez utilisateur, mot de passe et 2FA dans <authLink>Accès et authentification</authLink> avant d'autoriser les accès hors du réseau local. Si l'authentification est désactivée, toute personne atteignant le port 8008 peut ouvrir un shell root sans confirmation ni identifiants SSH. Pour les accès externes, utilisez <gatewayLink>Secure Gateway</gatewayLink> (Tailscale) ou un proxy inverse HTTPS au lieu de publier ce port sur Internet."
},
"whereNext": {
"heading": "Où aller ensuite",
"items": [
{
"label": "Accès et authentification",
"href": "/docs/monitor/access-auth",
"tail": " — exemples de proxy inverse avec les lignes de mise à niveau WebSocket nécessaires au terminal."
},
{
"label": "Architecture",
"href": "/docs/monitor/architecture",
"tail": " — transport WebSocket (HTTP via flask-sock et HTTPS / WSS via gevent)."
},
{
"label": "Référence de l’API",
"href": "/docs/monitor/api",
"tail": " — points de terminaison WebSocket /ws/terminal et /ws/script/<sid>, avec le reste de l'API."
},
{
"label": "Intégrations → Portail sécurisé",
"href": "/docs/monitor/integrations",
"tail": "— lorsque vous voulez un accès terminal de l'extérieur du LAN sans exposer le port 8008."
},
{
"label": "Index du tableau de bord",
"href": "/docs/monitor/dashboard",
"tail": "— les autres onglets."
}
]
}
}
@@ -0,0 +1,245 @@
{
"meta": {
"title": "Onglet App LXC : détection, liens et suivi de version | ProxMenux",
"description": "Découvrez et enregistrez les applications LXC, créez des liens web et en option suivez les versions installées et disponibles."
},
"header": {
"title": "Onglet de l'application LXC : découverte, liens et suivi des versions",
"description": "Donnez à chaque application LXC une identité persistante, un accès web et une preuve de version optionnelle sans couplage de l'enregistrement aux mises à jour."
},
"intro": {
"p1": "L'onglet <strong>App</strong> enregistre les applications du LXC. Une fiche peut contenir simplement un nom et un lien web, ou aussi un détecteur de version installée et une source amont.",
"p2": "La procédure qui modifie le logiciel se configure séparément dans l'<link>onglet Mises à jour</link>. Enregistrer une application ne lance jamais d'installateur ni de programme de mise à jour.",
"callout": "L'enregistrement, le suivi et la mise à jour des versions sont trois capacités indépendantes. Chacun peut être utilisé sans exiger les deux autres.",
"dashboardTitle": "De l'inscription au lanceur Apps",
"dashboard": "Chaque lien web enregistré ici apparaît aussi dans l'<appsLink>onglet Apps</appsLink> principal. Cette page du LXC reste la référence pour le nom, le logo, les liens et le suivi de version."
},
"overview": {
"heading": "Ce que peut fournir une fiche d'application",
"lead": "Un seul enregistrement enregistré peut inclure:",
"items": [
"Un nom d'affichage et un logo adapté au thème.",
"Un ou plusieurs liens Web cliquables construits à partir de l'adresse LXC, le schéma et le port sauvegardé.",
"Un détecteur optionnel pour la version actuellement installée dans le LXC.",
"Une source optionnelle GitHub, HTTP JSON ou Docker Hub pour la dernière version disponible.",
"Notifications de nouvelles versions et inclusion dans le compteur de mises à jour, par application.",
"Une section correspondante de l'onglet Mises à jour, même lorsque le suivi des versions est désactivé."
]
},
"discovery": {
"heading": "Découverte en cache et recherche d'applications",
"lead": "Les suggestions sont incluses dans le cache de la fenêtre de chaque LXC. L'analyse de démarrage les prépare en arrière-plan pour afficher immédiatement les résultats à l'ouverture d'App.",
"items": [
"L'ouverture de l'onglet Application <strong>ne démarre pas</strong> une nouvelle analyse du catalogue et n'interroge pas de manière répétée le LXC.",
"<strong>Rechercher des applications</strong> lance une nouvelle détection pour ce LXC. Utilisez cette action après avoir installé un logiciel alors que ProxMenux fonctionne déjà.",
"La liste précédente reste visible pendant l'analyse. Les nouvelles correspondances sont ajoutées à la fin.",
"Si aucune nouvelle correspondance n'est trouvée, le résultat est indiqué à côté des actions et <strong>Enregistrer l'application</strong> reste disponible pour l'entrée manuelle.",
"Enregistrer, supprimer ou restaurer une application met à jour le même cache immédiatement. Commencer ou restaurer un LXC rafraîchit seulement cet invité à travers son cycle de vie existant."
],
"callout": "Une suggestion n'est pas une fiche enregistrée. Elle reste en lecture seule jusqu'au clic sur <strong>Enregistrer</strong> et à la sauvegarde du formulaire."
},
"registration": {
"heading": "Enregistrement d'une application",
"lead": "Une suggestion détectée et un enregistrement manuel utilisent le même éditeur:",
"steps": [
"Cliquez sur <strong>Enregistrer</strong> pour une suggestion, ou sur <strong>Enregistrer une application</strong> pour choisir dans le catalogue ou saisir un nom personnalisé.",
"Consultez le nom et le logo proposés par le catalogue.",
"Ajouter les liens web requis. Les ports d'écoute détectés sont proposés comme raccourcis, mais aucun n'est enregistré automatiquement.",
"Laissez <strong>Suivre la version amont</strong> désactivé pour une fiche avec seulement des liens, ou activez-le et vérifiez le détecteur de version installée et la source amont.",
"Si le suivi est activé, utilisez <strong>Tester le détecteur</strong>, puis enregistrez la fiche.",
"Cliquez sur <strong>Terminé</strong> après modification. App et Mises à jour utilisent la même fiche actualisée en cache."
]
},
"catalog": {
"heading": "Inscription assistée par catalogue",
"lead": "Le catalogue fournit des données par défaut, mais l'enregistrement enregistré reste modifiable.",
"items": [
"Les résultats de recherche peuvent préremplir le nom canonique, le logo et les ports web communs.",
"Les détecteurs connus utilisent les vrais noms de paquets, exécutables, fichiers, distributions Python, étiquettes OCI ou commandes, plutôt qu'une hypothèse universelle comme <code>/root/.app</code>.",
"Les corrections vérifiées dans les installations réelles sont prioritaires lorsque le chemin diffère des métadonnées de l'installateur.",
"Les marqueurs Proxmox VE Helper-Scripts tels que <code>/root/.slug</code> restent un signal de compatibilité pour les nouvelles installations d'aide, pas le seul détecteur.",
"Chaque valeur proposée peut être modifiée avant d'enregistrer pour couvrir les installateurs officiels et les installations manuelles."
]
},
"docker": {
"heading": "Comment les Docker LXC sont représentés",
"lead": "Si Docker est la plateforme principale d'un LXC, <strong>Docker</strong> est l'application enregistrée au niveau LXC.",
"items": [
"Une charge de travail conteneurisée telle que Portainer, Frigate ou Vaultwarden n'est pas suggérée en tant qu'application native indépendante LXC.",
"Les services Docker en cours d'exécution avec des ports TCP publiés sont proposés comme liens web facultatifs dans l'éditeur Docker.",
"Chaque lien suggéré indique le service, le port hôte et le port conteneur. Seuls les liens qui fournissent une interface Web doivent être enregistrés.",
"Le logo général Docker est utilisé si le lien n'a pas de logo spécifique. Un logo configuré pour le lien le remplace.",
"Après l'enregistrement de Docker, Docker Engine et les mises à jour d'images sont affichées ensemble dans sa section sur l'onglet Mises à jour."
],
"callout": "Cette structure empêche une charge de travail Docker de ressembler à un logiciel installé directement dans le LXC tout en préservant des liens rapides avec ses interfaces."
},
"webLinks": {
"heading": "Liens et logos Web",
"lead": "Les liens Web fonctionnent avec ou sans suivi des versions.",
"items": [
"Chaque lien stocke un schéma, un port, une description optionnelle et une URL de logo optionnelle.",
"L'URL affichée utilise l'adresse courante déjà détectée pour le LXC; l'adresse n'est pas dupliquée dans chaque enregistrement d'application.",
"Un lien sans son propre logo revient au logo du niveau de l'application.",
"Plusieurs liens peuvent représenter une interface d'administration, une API, une interface secondaire ou un autre point de terminaison de l'application.",
"Une application enregistrée avec seulement des liens apparaît aussi dans Mises à jour, où un programme personnalisé peut être configuré plus tard."
]
},
"tracking": {
"heading": "Suivi optionnel de la version",
"lead": "Le suivi combine un détecteur de version installé avec une source en amont optionnelle. Les deux côtés sont vérifiés indépendamment.",
"colMethod": "Méthode de détection de la version installée",
"colUse": "Utilisation",
"detectorRows": [
{
"method": "dpkg / apk",
"use": "Lis la version de paquets installée à partir de métadonnées de paquets Debian, Ubuntu ou Alpine."
},
{
"method": "binary",
"use": "Exécute un chemin binaire absolu ou un nom de commande avec des arguments de version."
},
{
"method": "file + regex",
"use": "Lit un fichier réel et extrait la version avec un groupe de capture."
},
{
"method": "docker label / docker exec",
"use": "Lit une étiquette de version OCI ou exécute une commande de version dans un conteneur Docker."
},
{
"method": "python distribution",
"use": "Utilise importlib.metadata via l'interpréteur Python sélectionné."
},
{
"method": "command",
"use": "Exécute une commande avancée de style argv sans shell et extrait la version de sa sortie."
},
{
"method": "manual",
"use": "Stocke une version entrée manuellement; elle doit être modifiée après la mise à jour de l'application."
},
{
"method": "OCI image",
"use": "Pour les conteneurs installés par OCI manager Apps. Lit les versions de l'application et de l'image dans la fiche d'installation et compare le digest installé à celui publié par le registre. Aucune configuration nécessaire."
}
],
"sourcesHeading": "Sources de la version disponible",
"sources": [
"<strong>GitHub dépôt</strong> : dernière version ou étiquette d'un dépôt public <code>owner/name</code>.",
"<strong>HTTP JSON</strong> : point de terminaison public et chemin à points comme <code>data.version</code> ou <code>releases[0].tag_name</code>.",
"<strong>Docker Hub</strong>: étiquettes en version filtrées par une expression régulière. Un aperçu en direct montre de vraies balises correspondantes avant que l'enregistrement soit enregistré.",
"Les tags mobiles comme <code>latest</code>, <code>stable</code> ou <code>lts</code> ne contiennent pas de version. Suivez ces images par digest dans les mises à jour d'images Docker."
],
"regexHeading": "Écrire l'expression de capture",
"regexLead": "L'expression régulière doit renvoyer la version dans son <strong>premier groupe de capture</strong>.",
"regexRules": [
"Correspondez au texte émis par la source binaire, le fichier, la commande ou la balise sélectionnée; ne devinez pas un chemin générique.",
"Échappez les points littéraux avec <code>\\.</code> pour éviter de reconnaître des caractères arbitraires.",
"Acceptez un <code>v</code> initial seulement si la source peut en contenir un.",
"Inclure des suffixes tels que des révisions préalables ou des révisions distro seulement lorsqu'elles sont significatives pour la comparaison.",
"Utilisez <strong>Tester le détecteur</strong> avant de sauvegarder et vérifiez la version installée affichée dans le LXC."
],
"regexExampleLead": "Capture sémantique commune:",
"regexExample": "v?(\\d+\\.\\d+\\.\\d+)",
"regexCallout": "Une correspondance régex réussie n'est pas la preuve que le chemin du détecteur est correct. Le chemin ou le paquet doit également exister dans l'installation réelle enregistrée."
},
"updater": {
"heading": "Le suivi et la mise à jour des versions sont indépendants",
"lead": "L'<link>onglet Mises à jour</link> crée une section dès qu'une fiche d'application est enregistrée.",
"items": [
"Un enregistrement link-only montre que le suivi des versions n'est pas configuré, mais peut toujours recevoir une commande de mise à jour personnalisée.",
"Une application avec suivi mais sans méthode exécutable affiche un message neutre demandant une commande personnalisée.",
"Une application avec un wrapper Proxmox VE Helper-Scripts vérifié peut utiliser ce programme intégré même si sa fiche a commencé par un simple lien web.",
"Ajouter ou modifier un programme de mise à jour ne change ni le détecteur ni la source amont enregistrés dans App."
]
},
"states": {
"heading": "États de version sur la carte App",
"colState": "État",
"colDisplay": "Affichage",
"colMeaning": "Signification",
"rows": [
{
"state": "Mise à jour disponible",
"display": "Version disponible en violet avec une icône vers le haut",
"meaning": "Les versions installées et amont diffèrent."
},
{
"state": "À jour",
"display": "Versions installée et disponible sans alerte violette",
"meaning": "La dernière vérification n'a trouvé aucune version en amont plus récente."
},
{
"state": "Suivi en attente",
"display": "Vérification en cours ou en attente",
"meaning": "L'enregistrement est configuré mais n'a pas encore effectué les deux vérifications."
},
{
"state": "Suivi désactivé",
"display": "Liens Web seulement; aucun bloc de comparaison de version",
"meaning": "La fiche reste valide et peut toujours avoir un programme de mise à jour."
},
{
"state": "Erreur de vérification",
"display": "Explication en ambre dans la carte",
"meaning": "L'état précédent reste visible tandis que l'erreur du détecteur ou de la source amont est signalée."
}
]
},
"management": {
"heading": "Gestion des applications sauvegardées et suggérées",
"lead": "Les actions en bas de l'onglet ont des rôles distincts :",
"items": [
"<strong>Trouver des applications</strong> rafraîchit la découverte pour ce LXC seulement.",
"<strong>Inscrivez une autre application</strong> ouvre le catalogue et l'éditeur manuel sans rescanner le LXC.",
"<strong>Modifier</strong> révèle les actions Supprimer, Vérifier, notifications et Modifier les champs sur chaque carte.",
"<strong>Masquer</strong> retire une suggestion indésirable. Les détections masquées se restaurent dans la vue d'enregistrement.",
"<strong>Vérifier</strong> actualise les données de version de la fiche sélectionnée sans rechercher de nouvelles applications."
]
},
"troubleshooting": {
"heading": "Situations communes",
"colProblem": "Situation actuelle",
"colResolution": "Résolution",
"rows": [
{
"problem": "Le logiciel a été installé après le démarrage de ProxMenux",
"resolution": "Appuyez sur Trouver des applications. L'analyse explicite met à jour les suggestions mises en cache pour ce LXC."
},
{
"problem": "Aucune application n'a été détectée",
"resolution": "Enregistrez-le manuellement. Un nom et un lien Web suffisent; un suivi peut être ajouté plus tard."
},
{
"problem": "Le détecteur suggéré retourne la mauvaise version",
"resolution": "Ouvrez Modifier les champs, choisissez le vrai paquet, exécutable ou chemin de fichier et testez avant de sauvegarder."
},
{
"problem": "Une charge de travail Docker n'est pas offerte en tant qu'application LXC",
"resolution": "Enregistrez Docker et ajoutez l'interface publiée de la charge de travail comme lien web Docker. Les mises à jour d'image restent dans la section Docker."
},
{
"problem": "Une application enregistrée n'a pas de bouton de mise à jour",
"resolution": "Ouvrez Mises à jour et configurez la méthode. Le seul suivi de version ne définit pas comment installer une mise à jour."
}
]
},
"figures": {
"catalog": {
"alt": "Catalogue d'enregistrement d'applications avec résultats de recherche, logos, ports et champs détecteurs",
"caption": "Les métadonnées de catalogue accélèrent l'enregistrement tandis que chaque valeur proposée reste modifiable."
},
"webLinks": {
"alt": "Carte d'application LXC sauvegardée contenant un lien Web cliquable",
"caption": "Une fiche avec seulement des liens est valide : le suivi peut rester désactivé et un programme de mise à jour peut être ajouté séparément."
},
"tracking": {
"alt": "Détecteur de version installé en option et champs sources en amont",
"caption": "La détection de la version installée et la source en amont sont configurées et testées séparément."
},
"card": {
"alt": "Carte d'application sauvegardée avec versions installées et disponibles plus un lien web",
"caption": "La carte combine l'identité, les preuves de version et l'accès web sans exécuter des actions de mise à jour de cet onglet."
}
}
}
@@ -0,0 +1,203 @@
{
"meta": {
"title": "Mises à jour LXC : système, applications et Docker | ProxMenux",
"description": "Configurer et lancer les mises à jour du système d'exploitation, des applications, de Docker Engine et des images Docker dans un LXC."
},
"header": {
"title": "Mises à jour de LXC: OS, applications et Docker",
"description": "Examiner chaque cible de mise à jour en un seul endroit, l'exécuter de façon indépendante ou combiner des cibles sélectionnées dans une action en vrac contrôlée."
},
"intro": {
"p1": "L'onglet <strong>Mises à jour</strong> sépare la détection des versions de leur installation. Enregistrement et suivi facultatif se trouvent dans l'<link>onglet App</link> ; les méthodes exécutables se gèrent ici.",
"p2": "Une application enregistrée apparaît dans Mises à jour même avec un seul lien web. Le suivi de version est facultatif ; son programme de mise à jour peut être configuré séparément.",
"callout": "L'enregistrement ne choisit aucun programme de mise à jour. Si un programme Helper-Scripts correspondant est détecté, choisissez et enregistrez <strong>Helper-Scripts</strong> ou <strong>Commande personnalisée</strong>. La détection ne garantit pas la compatibilité. Le choix appartient à chaque application, même dans un LXC partagé."
},
"overview": {
"heading": "Que contient l'onglet",
"lead": "Chaque cible disponible a sa propre section et action:",
"items": [
"<strong>Paquets du système</strong> pour les conteneurs Debian, Ubuntu et Alpine.",
"Une section par <strong>application enregistrée</strong>, y compris les fiches avec seulement un lien.",
"Une section <strong>Docker</strong> lorsque le Docker est enregistré, avec Docker Engine et des images marquées regroupées.",
"Une section <strong>Mise à jour groupée</strong> configurable, suivie des options de sauvegarde, redémarrage et programmation."
]
},
"mechanisms": {
"heading": "Comment une méthode de mise à jour est sélectionnée",
"lead": "Le chemin intégré Proxmox VE Helper-Scripts suit le mécanisme officiel <helper>update-apps</helper>. D'autres types d'installation utilisent le paquet correspondant, Docker ou chemin personnalisé.",
"officialReference": "Référence officielle : la <helper>documentation update-apps de Proxmox VE Helper-Scripts</helper> décrit les modes interactif et sans surveillance, sauvegardes, simulations, ressources temporaires de compilation, journaux et codes de sortie.",
"colSource": "Source",
"colAction": "Action affichée",
"colNotes": "Ce qui est exécuté",
"rows": [
{
"source": "Paquets APT ou APK",
"action": "Appliquer les mises à jour du système d'exploitation",
"notes": "Mettre à jour les paquets de conteneurs. Les applications enregistrées installées sous forme de paquets dpkg ou apk sont couvertes par ce même passe."
},
{
"source": "Proxmox VE Helper-Scripts",
"action": "Appliquer la mise à jour",
"notes": "Après sélection explicite de Helper-Scripts, lance le script officiel identifié par le wrapper /usr/bin/update validé. Un marqueur ou une correspondance du catalogue ne suffit jamais à autoriser l'exécution."
},
{
"source": "Commande personnalisée",
"action": "Exécuter le programme de mise à jour",
"notes": "Exécute la commande enregistrée dans le LXC et remplace tout programme intégré de mise à jour de cette fiche."
},
{
"source": "Docker Engine",
"action": "Mettre à jour Docker Engine",
"notes": "Met à jour uniquement les paquets Docker installés et leurs dépendances nécessaires. Les autres paquets système et les conteneurs restent inchangés."
},
{
"source": "Image Docker",
"action": "Mettre à jour l’image",
"notes": "Télécharge l'image sélectionnée et recrée son groupe de services Compose ou son conteneur autonome protégé."
}
],
"callout": "Une commande personnalisée <strong>remplace</strong> Helper-Scripts pour cette application. Les exécutions manuelles, groupées et programmées respectent le choix enregistré. Les commandes existantes et les anciennes sélections explicitement enregistrées dans les plans groupés ou les programmations actives sont conservées ; une nouvelle application n'est jamais ajoutée par une ancienne programmation."
},
"docker": {
"heading": "Docker Engine et images Docker",
"lead": "Après enregistrement de Docker dans App, Docker Engine et l'inventaire des images apparaissent dans la même section <strong>Docker</strong>.",
"items": [
"Le suivi de la version Docker Engine est séparé du compteur de paquets OS et a son propre bouton de mise à jour.",
"Les images locales taggées sont comparées à leur registre par digest immuable. <strong>Vérifier maintenant</strong> rafraîchit cet inventaire sans tirer des images ou redémarrer des conteneurs.",
"Les services Compose sont mis à jour depuis leur projet déclaré. Les images du même groupe sont traitées ensemble pour éviter de recréer le projet plusieurs fois.",
"Un conteneur autonome est recréé à partir de sa configuration actuelle. Le processus protégé garde les données de retour arrière et restaure le conteneur précédent si la recréation échoue.",
"Chaque image est sélectionnable séparément pour les mises à jour manuelles, groupées et programmées, sauf les dépendances Compose déclarées qui doivent suivre leur service principal."
],
"callout": "Les conteneurs fonctionnant à l'intérieur de Docker ne sont pas présentés comme des applications indépendantes LXC. Leurs ports web publiés peuvent être enregistrés sous forme de liens sous l'enregistrement Docker, tandis que les mises à jour d'images restent dans la section Docker."
},
"actions": {
"heading": "Actions individuelles et couleurs de statut",
"lead": "Chaque section reste actionnable indépendamment, qu'une mise à jour en vrac soit configurée ou non.",
"items": [
"<strong>Configurer</strong> ouvre le choix du programme si aucune méthode n'est définie ; <strong>Modifier</strong> change un choix enregistré. Les boutons d'information expliquent les options, donnent la documentation officielle et un exemple de script personnalisé. Choisir une option ne l'exécute pas.",
"Sans suivi de version mais avec un programme de mise à jour, l'action neutre <strong>Exécuter le programme de mise à jour</strong> apparaît. ProxMenux n'affirme pas qu'une mise à jour est en attente.",
"Sans programme Helper-Scripts disponible, configurez une commande personnalisée. Désactiver une méthode n'en choisit pas une autre ; les sélections des plans groupés et programmations restent enregistrées et les cibles indisponibles sont signalées.",
"L'action <strong>Mise à jour de l'image</strong> s'applique uniquement à l'unité Docker sélectionnée; elle ne met pas à jour Docker Engine ou des images non liées."
],
"statusColState": "État connu",
"statusColAppearance": "Apparence",
"statusColMeaning": "Signification",
"statusRows": [
{
"state": "Mise à jour vérifiée disponible",
"appearance": "Texte pourpre, icône vers le haut et action pourpre",
"meaning": "Les versions installées et disponibles ou les empreintes digest des images diffèrent."
},
{
"state": "À jour, vérifié",
"appearance": "Coche verte et action À jour en vert",
"meaning": "La dernière vérification effectuée confirme que la cible est à jour."
},
{
"state": "Version inconnue",
"appearance": "Texte neutre et action neutre",
"meaning": "Un programme de mise à jour peut être lancé, mais les données de version manquent pour déterminer si la cible est à jour ou si une mise à jour est disponible."
}
]
},
"custom": {
"heading": "Commandes de mise à jour personnalisées",
"lead": "Utilisez une commande personnalisée si l'installation ne dispose pas de programme intégré vérifié ou si la procédure normale doit être remplacée.",
"items": [
"Ouvrez <strong>Configurer</strong> si le champ est vide, ou <strong>Modifier</strong> si une méthode existe.",
"Pour une application intégrée ou Docker Engine, l'éditeur affiche la commande actuelle. Enregistrer un autre contenu en fait le remplacement explicite pour cette fiche.",
"Testez d'abord la procédure complète dans le terminal LXC. Il doit être non interactif, utiliser le répertoire de travail correct et retourner un statut de sortie non zéro en cas d'échec.",
"N'incluez pas <code>pct exec</code> ; ProxMenux entre déjà dans le conteneur et exécute la commande en tant que root."
],
"exampleLead": "Exemple de procédure complète dans le conteneur:",
"example": "cd /opt/my-app && ./update.sh",
"callout": "Une commande comme <code>myapp --version</code> lit seulement la version ; ce n'est pas un programme de mise à jour. Les commandes sont exécutées avec les droits administrateur : examinez leur contenu comme une commande shell root."
},
"bulk": {
"heading": "Mise à jour groupée",
"lead": "La mise à jour en vrac crée une action réutilisable pour un ensemble exact de cibles dans le LXC. Il est placé après les différentes sections de l'application et Docker et avant <strong>Options</strong>.",
"items": [
"Les paquets système sont obligatoires. Sélectionnez au moins une application, Docker Engine ou une unité image Docker supplémentaire.",
"Applications et unités Docker se choisissent séparément. Le service principal Compose affiche les dépendances mises à jour avec lui.",
"Les cibles indisponibles ou supprimées sont marquées comme étant indisponibles et doivent être supprimées avant que la configuration puisse être enregistrée.",
"<strong>Appliquer les mises à jour</strong> est violet si une cible a une mise à jour vérifiée, vert si toutes sont vérifiées à jour et neutre si le résultat est inconnu.",
"L'élimination de la configuration en vrac ne supprime pas les méthodes de mise à jour individuelles ou les paramètres de mise à jour programmés."
],
"callout": "La mise à jour en vrac ne remplace pas les boutons individuels. Il s'agit d'un raccourci optionnel pour une sélection qui doit fonctionner ensemble."
},
"options": {
"heading": "Options de sauvegarde et de redémarrage",
"lead": "Les mêmes options s'appliquent aux opérations manuelles, en vrac et programmées:",
"items": [
"<strong>Snapshot avant d'appliquer</strong> crée une sauvegarde vzdump sur le stockage sélectionné. Si la sauvegarde requise échoue, la mise à jour ne démarre pas.",
"<strong>Redémarrer après avoir appliqué</strong> redémarre le LXC seulement après un succès.",
"Les sélections sont stockées par LXC et restent indépendantes de la liste cible."
]
},
"scheduled": {
"heading": "Mises à jour programmées",
"lead": "Les mises à jour prévues utilisent les mêmes cibles exécutables et les mêmes options de sécurité que les actions manuelles.",
"items": [
"Choisissez une fréquence prédéfinie ou une expression cron, puis les cibles exactes : paquets système, applications, Docker Engine, unités Docker autonomes ou groupes de services Compose.",
"Le délai après publication ne concerne que les applications sélectionnées avec suivi de version. Sans suivi, leur programme de mise à jour est lancé à chaque échéance.",
"L'état de la dernière exécution distingue succès, achèvement partiel, échec, blocage de sécurité et absence de mise à jour en attente. Après la première exécution programmée, <strong>Mises à jour → Mises à jour programmées → Afficher le journal</strong> ouvre toute la sortie du programme de mise à jour et des scripts secondaires appelés.",
"Après chaque exécution, ProxMenux vérifie le marqueur standard de redémarrage de Debian. Lorsqu'un redémarrage est nécessaire, l'onglet Mises à jour et la notification d'achèvement le disent; l'avertissement est effacé lorsque LXC démarre ou redémarre.",
"Sur l'hôte Proxmox, les journaux programmés sont stockés dans <code>/usr/local/share/proxmenux/logs/lxc-updates/</code> en utilisant le nom <code>&lt;VMID&gt;-scheduled-&lt;run-id&gt;.log</code>. Les dix derniers journaux sont conservés par LXC et les anciens fichiers sont supprimés automatiquement.",
"Cet historique concerne les mises à jour programmées. Une mise à jour manuelle affiche sa sortie en direct dans la fenêtre d'exécution de Monitor et ne crée aucun journal programmé dans ce répertoire.",
"Les calendriers d'hôtes externes détectés à partir de Proxmox VE Helper-Scripts sont indiqués séparément, de sorte que l'automatisation du chevauchement est visible."
],
"callout": "Testez chaque méthode manuellement avant d'activer une programmation. Les commandes programmées ne peuvent pas répondre aux questions interactives."
},
"completion": {
"heading": "Ce qui se passe après une mise à jour",
"lead": "La simple fin de la commande du terminal ne suffit pas à considérer la mise à jour terminée.",
"items": [
"La même exécution enregistre son résultat final et rafraîchit l'état du paquet OS, les versions app enregistrées et l'inventaire Docker selon le cas.",
"Les exécutions programmées conservent la sortie du terminal et signalent si un redémarrage reste nécessaire pour terminer l'application des changements de paquets.",
"Le cache LXC est remplacé par l'état vérifié après mise à jour, de sorte que les badges et les boutons ne conservent pas le résultat précédent.",
"Si un LXC arrêté ou restauré démarre, le cycle de vie existant rafraîchit à nouveau ce LXC. L'inventaire de Docker attend que le démon soit prêt au lieu de mettre en cache un résultat de démarrage vide comme final.",
"Les notifications activées sont émises après finalisation du résultat, y compris les échecs partiels et les résultats groupés des images Docker."
]
},
"troubleshooting": {
"heading": "Situations communes",
"colProblem": "Situation actuelle",
"colResolution": "Résolution",
"rows": [
{
"problem": "Aucune méthode de mise à jour n'a été identifiée",
"resolution": "Ouvrez Configurer, ajoutez la procédure non interactive officielle et testez-la manuellement avant de la programmer."
},
{
"problem": "Une identité Proxmox VE Helper-Scripts est affichée mais aucune action n'existe",
"resolution": "Le LXC possède d'anciennes données d'identification, mais aucun wrapper /usr/bin/update vérifié. Ajoutez une méthode personnalisée après avoir confirmé la bonne procédure."
},
{
"problem": "Les images Docker sont temporairement vides après le démarrage ou la restauration",
"resolution": "Attendez que Docker soit prêt ou cliquez sur Vérifier maintenant. L'inventaire réessaie au démarrage et ne considère pas un résultat vide transitoire comme définitif."
},
{
"problem": "Une cible de mise à jour groupée enregistrée n'est plus disponible",
"resolution": "Modifiez la configuration groupée, retirez la cible obsolète et choisissez son remplacement actuel s'il existe."
},
{
"problem": "Une commande personnalisée échoue",
"resolution": "Exécutez-la dans le terminal LXC et vérifiez chemin, dépendances, options non interactives et code de sortie."
},
{
"problem": "Une mise à jour programmée indique qu'un redémarrage est nécessaire",
"resolution": "Ouvrez Afficher le journal pour consulter l'exécution terminée, puis redémarrez ce LXC. ProxMenux efface l'avertissement lorsque l'événement de cycle de vie détecte son redémarrage."
}
]
},
"figures": {
"osPending": {
"alt": "Section des paquets système d'exploitation avec comptes de mise à jour en attente et de sécurité",
"caption": "La section système d'exploitation maintient les mises à jour du paquet indépendamment des actions d'application et Docker."
},
"options": {
"alt": "Options de mise à jour LXC avec sauvegarde avant mise à jour et redémarrage après",
"caption": "Les préférences de sauvegarde et de redémarrage s'appliquent aux exécutions manuelles, en vrac et programmées."
}
}
}
@@ -0,0 +1,244 @@
{
"meta": {
"title": "ProxMenux Monitor — Tableau de bord : VM et LXC | Documentation ProxMenux",
"description": "Inventaire des invités avec CPU, mémoire et disque en direct. Les détails montrent configuration, ressources, sauvegardes, résultats récents du journal Proxmox, notes et Démarrer / Éteindre / Redémarrer / Forcer l'arrêt."
},
"header": {
"title": "Tableau de bord : VM et LXC",
"description": "Inventaire complet du nœud : quatre mesures en haut, une liste triable des VM et LXC et les détails par invité avec configuration, ressources, sauvegardes, journaux et commandes Démarrer / Éteindre / Redémarrer / Forcer l'arrêt.",
"section": "ProxMenux Monitor · Tableau de bord"
},
"intro": {
"title": "Commandes des systèmes invités",
"body": "Cet onglet contrôle le cycle de vie des invités. Les actions passent par <code>POST /api/vms/&lt;vmid&gt;/control</code> avec confirmation explicite et actualisent la ligne de l'invité. L'arrêt forcé nécessite le bouton dédié Forcer l'arrêt."
},
"topRow": {
"heading": "Ligne supérieure : quatre cartes statistiques",
"intro": "Quatre cartes résument l'état des invités : nombres, utilisation CPU, mémoire allouée par rapport à la capacité de l'hôte et espace disque alloué.",
"imageAlt": "Onglet VMs & LXCs — rangée supérieure de quatre cartes statistiques: Total VMs & LXCs, Total CPU, Mémoire totale, Disque total",
"imageCaption": "Ligne supérieure : totaux et états En cours / Arrêtés, utilisation CPU, mémoire utilisée / allouée aux invités actifs / allouée au total avec indicateur Dans les limites, et espace disque alloué.",
"headerCard": "Carte",
"headerWhat": "Ce qu'il montre",
"totalLabel": "Nombre total de VM et LXC",
"totalWhat": "Nombre total avec deux badges — <em>X Running</em> (vert) et <em>Y stoppé</em> (rouge, seulement lorsque > 0). Le numéro que vous regardez quand quelque chose n'est pas revenu après un redémarrage.",
"cpuLabel": "CPU total",
"cpuWhat": "Utilisation CPU totale en direct des invités, en pourcentage du CPU physique de l'hôte, avec la mention <em>« Utilisation CPU allouée »</em>.",
"memoryLabel": "Mémoire totale",
"memoryIntro": "Trois lectures empilées verticalement:",
"memoryItems": [
"<strong>Utilisée actuellement</strong> — valeur principale, par exemple <em>15.4 GB</em>, et <em>X.X % de Y GB</em> par rapport à la RAM de l'hôte. La barre bleue montre le pourcentage.",
"<strong>Allouée aux actifs</strong> + <strong>Allouée totale</strong> — somme de <code>maxmem</code> des invités <em>en cours</em> et de <em>tous</em> les invités, arrêtés compris. La première compte maintenant, la seconde si vous les démarrez tous.",
"<strong>Dans les limites</strong>, en vert, devient <em>Surallocation</em> si le total alloué dépasse la RAM de l'hôte. Une surallocation maîtrisée peut fonctionner avec KSM ; l'indicateur avertit lorsque la marge diminue."
],
"diskLabel": "Disque total",
"diskWhat": "Somme de l'espace disque alloué à tous les invités, dans l'unité appropriée (GB / TB), avec la ligne de pied de page <em>\"Espace disque alloué\"</em>."
},
"inventory": {
"heading": "Liste des machines virtuelles et conteneurs",
"intro": "Une rangée par invité. La liste est une source unique de <code>/api/vms</code>, qui consolide <code>qm list</code> + <code>pct list</code> + <code>pvesh /cluster/resources</code> sur l'hôte.",
"imageAlt": "Liste des machines et conteneurs virtuels — une ligne par invité avec statut, type badge, nom, ID et inline CPU / mémoire / pourcentages de disque",
"imageCaption": "La disposition mobile optimisée de l'inventaire — les mêmes données que celles que montre la vue de bureau, replacées dans une seule colonne avec les pourcentages et les indicateurs d'état restent compacts.",
"rowsIntro": "Chaque ligne montre :",
"rows": [
"<strong>Icône d'état</strong> — triangle vert pour En cours ou carré rouge pour Arrêté. Le reste de la ligne est atténué pour les invités arrêtés.",
"<strong>Type</strong> — <em>LXC</em> en cyan pour les conteneurs, <em>VM</em> en violet pour les machines virtuelles.",
"<strong>Nom</strong> — nom d'hôte ou nom affiché de l'invité.",
"<strong>VMID</strong> — l'ID numérique Proxmox sous le nom.",
"<strong>Mesures en ligne</strong> — trois pourcentages avec leur icône (CPU %, Mémoire %, Disque %). Chaque icône devient orange lorsque la métrique traverse un seuil d'attention (par exemple, mémoire au-dessus de 90 %), de sorte qu'un scan rapide vous indique quel invité est sous pression sans l'ouvrir."
],
"clickHint": "Cliquez sur une ligne, que l'invité fonctionne ou soit arrêté, pour ouvrir ses détails.",
"mobileTitle": "Liste conçue pour les mobiles",
"mobileBody": "Sur mobile et dans les fenêtres étroites, type, nom, ID et trois pourcentages sont empilés en une colonne, comme sur la capture. Les vues larges répartissent les données horizontalement. Toute la ligne est cliquable pour ouvrir les détails."
},
"drillIn": {
"heading": "Fenêtre de détails de l'invité",
"intro": "La fenêtre de détail affiche le nom de l’invité, son VMID, son type, son état et sa durée de fonctionnement. Sa navigation s’adapte à l’invité : <strong>État</strong>, <strong>Application</strong> et <strong>Mises à jour</strong> pour la gestion des applications LXC, <strong>Montages</strong> lorsqu’un LXC possède des points de montage, <strong>Journaux</strong> pour les conteneurs installés par OCI manager Apps, ainsi que <strong>Sauvegardes</strong> et <strong>Pare-feu</strong>. La barre d’actions fixe conserve les commandes de démarrage et d’arrêt et le terminal LXC dans chaque onglet.",
"statusTitle": "Onglet 1 — État",
"statusImageAlt": "Détails de l'invité — État avec CPU, mémoire et disque en direct, E/S disque et réseau, logo système et Ressources / Adresses IP",
"statusImageCaption": "État : CPU, mémoire et disque avec barres en haut ; totaux d'E/S (disque lu/écrit, réseau reçu/envoyé) ; puis Ressources avec Notes, + Info et liste des adresses IP.",
"statusIntro": "Onglet initial pour vérifier le comportement de l'invité. Trois blocs :",
"liveTitle": "1. Ligne de mesures en direct",
"liveItems": [
"<strong>Utilisation CPU (X cœurs)</strong> — pourcentage avec barre. Le nombre de cœurs configurés dans l'en-tête précise ce que représente 100 %.",
"<strong>Mémoire</strong> — <em>utilisée / maximale</em> en Go avec barre.",
"<strong>Disque</strong> — <em>utilisé / maximal</em> pour l'image disque principale, au même format."
],
"ioTitle": "2. Total des E/S + logo OS",
"ioItems": [
"<strong>E/S disque</strong> — totaux des lectures (↓) et écritures (↑) depuis le démarrage. Permet de repérer une hausse soudaine des E/S par rapport au comportement habituel.",
"<strong>E/S réseau</strong> — réception (↓) et envoi (↑) cumulés, selon le même principe.",
"<strong>Logo du système</strong> — icône Debian / Ubuntu / Alpine / Windows / etc. selon le système détecté. Repère visuel pour identifier les fenêtres ouvertes."
],
"resourcesTitle": "3. Bloc ressources",
"resourcesIntro": "Configuration selon Proxmox : cœurs CPU, mémoire (<code>maxmem</code> configuré) et swap. Deux sections dépliables dans l'en-tête :",
"resourcesItems": [
"<strong>Notes</strong> — description modifiable de l'invité. Enregistrer appelle <code>PUT /api/vms/&lt;vmid&gt;/config</code> et écrit dans <code>/etc/pve/qemu-server/&lt;vmid&gt;.conf</code> ou <code>/etc/pve/lxc/&lt;vmid&gt;.conf</code>.",
"<strong>+ Info</strong> — champs supplémentaires trop verbeux pour la vue par défaut: mode bios, type de machine, état de l'agent, entrées passthrough hostpci, points de montage (CT), ordre de démarrage."
],
"ipsTitle": "4. Adresses IP",
"ipsBody": "Chaque adresse IPv4 ou IPv6 de l'invité apparaît dans une étiquette verte. La liste est vide si l'invité est arrêté ou si une VM n'a pas l'agent QEMU ; les LXC communiquent directement leurs adresses.",
"appTitle": "Onglet 2 — App (LXC seulement)",
"appIntro": "Enregistre les applications LXC, les liens web et compare facultativement les versions. Les suggestions viennent du cache de démarrage ; <strong>Rechercher des applications</strong> relance la détection de ce LXC après une nouvelle installation.",
"appLinkLead": "Voir le",
"appLinkLabel": "page d'application dédiée",
"appLinkTail": "pour la découverte en cache, l'enregistrement assisté par catalogue, les liens web Docker et les détecteurs de versions.",
"updatesTitle": "Onglet 3 — Mises à jour (LXC seulement)",
"updatesIntro": "Sépare <strong>paquets système</strong>, applications, <strong>Docker Engine</strong> et images Docker. Chaque cible peut être exécutée seule ou choisie précisément pour une action groupée ou programmée.",
"updatesLinkLead": "Voir le",
"updatesLinkLabel": "page dédiée aux mises à jour",
"updatesLinkTail": "pour les programmes de mise à jour intégrés et personnalisés, la recréation Docker, la sélection groupée, les options de sécurité et la programmation.",
"mountsTitle": "Onglet 4 — Montages (LXC, si présents)",
"mountsImageAlt": "Détails LXC, Montages : volumes PVE, bind mounts de l'hôte ou du stockage PVE et NFS/CIFS montés dans le CT. Chaque carte indique type, capacité, octets utilisés/totaux, options et état : vert sain, ambre lecture seule/divergent, rouge inaccessible.",
"mountsImageCaption": "Montages apparaît seulement pour les LXC avec au moins un point de montage ou montage distant ajouté dans le CT. Sans montage, l'onglet est absent.",
"mountsIntro": "Proxmox montre les montages configurés en <code>mpX</code>, mais pas ceux ajoutés ensuite dans le CT via <code>mount.cifs</code>, NFS avec <code>autofs</code>, etc. Cet onglet réunit <strong>les deux vues</strong> : montages configurés <strong>et</strong> détectés dans le conteneur, avec état par montage et capacité quand le serveur peut la déterminer.",
"mountTypesTitle": "Types de montage détectés",
"mountTypesItems": [
"<strong>Volume PVE</strong> — stockage géré par Proxmox, comme un sous-volume ZFS, un répertoire ou un Ceph RBD. La capacité vient des statistiques PVE et correspond à Proxmox.",
"<strong>Bind du stockage PVE</strong> — entrée <code>mpX</code> pointant vers un chemin d'un stockage connu de PVE.",
"<strong>Bind de l'hôte</strong> — entrée <code>mpX</code> vers un chemin de l'hôte (<code>/mnt/something</code>). La capacité vient de <code>df</code> sur ce chemin.",
"<strong>Montage ajouté dans le CT</strong> — existe <em>uniquement</em> dans son espace de noms, par exemple un partage NFS monté par le CT. La capacité est lue via <code>pct exec &lt;vmid&gt; df</code> ; depuis l'hôte, <code>/proc/&lt;pid&gt;/root</code> ne fournit pas les vraies statistiques du montage distant."
],
"mountStateTitle": "Point par carte et avertissements",
"mountStateItems": [
"<green/> <strong>Vert</strong> — montage sain et accessible.",
"<amber/> <strong>Ambre</strong> — configuré mais non monté, lecture seule ou <em>bind zombie</em>. Dans ce dernier cas, la source a disparu de l'hôte mais le CT la voit toujours montée, par exemple après débranchement USB ou <code>umount</code> sur l'hôte.",
"<red/> <strong>Rouge</strong> — inaccessible : la sonde ne peut pas atteindre le montage, par exemple un partage NFS dont le serveur est arrêté."
],
"mountsCalloutTitle": "Informations supplémentaires par rapport à Proxmox",
"mountsCalloutBody": "Vue des chemins lus ou écrits par le conteneur et de leur capacité. Les partages NFS/CIFS montés dans le CT, invisibles dans Proxmox, utilisent ici la même présentation et les mêmes sondes. Les montages inaccessibles et binds zombies sont signalés avant de causer des problèmes de sauvegarde.",
"logsTitle": "Onglet 5 — Journaux (conteneurs OCI uniquement)",
"logsBody": "Uniquement pour les conteneurs OCI manager Apps. Console du processus principal de l'image dans <code>/var/log/proxmenux/oci/VMID.console.log</code> : 100, 500 ou 1000 dernières lignes, suivi en direct pendant le fonctionnement, filtre et téléchargement. Le fichier est relu à l'ouverture, même si le conteneur est arrêté. Détails : <ociLink>Conteneurs OCI dans ProxMenux Monitor</ociLink>.",
"backupsTitle": "Onglet 6 — Sauvegardes",
"backupsImageAlt": "Per-invité fore-in modal — onglet Sauvegardes avec la liste de sauvegardes disponibles, balise de destination, tailles et le bouton Créer sauvegarde",
"backupsImageCaption": "Toutes les sauvegardes de l'invité sur les stockages Proxmox configurés, de la plus récente à la plus ancienne. L'en-tête indique leur nombre.",
"backupsIntro": "Liste les sauvegardes de l'invité sur les stockages Proxmox, de la plus récente à la plus ancienne. Le compteur du titre permet de voir si des copies existent. Chaque ligne affiche :",
"backupsItems": [
"<strong>Horodatage</strong> — date et heure de l'exécution.",
"<strong>Destination</strong> — stockage (PBS-Cloud, PBS-Local, NFS-Backup, …), coloré selon son état.",
"<strong>Taille</strong> — taille finale sur disque de la sauvegarde."
],
"backupsOutro": "<strong>+ Créer une sauvegarde</strong> lance une sauvegarde sur le stockage marqué « Backup target » dans Proxmox. La restauration se fait dans l'interface web Proxmox ; Monitor montre les sauvegardes récentes de l'invité et permet d'en créer.",
"firewallTitle": "Onglet 7 — Pare-feu",
"firewallIntro": "Lit le journal du pare-feu Proxmox de l'invité directement sur l'hôte, sans service ni requêtes périodiques supplémentaires. L'onglet est toujours présent ; son contenu dépend de l'activation du pare-feu et de la journalisation effective d'une règle.",
"firewallItems": [
"<strong>Firewall désactivé</strong> — un avertissement orange indique où l’activer dans Proxmox (<em>&lt;Container|VM&gt; → Firewall → Options</em>) et rappelle qu’au moins une règle doit utiliser <code>log: info</code> ou un niveau supérieur pour afficher les paquets.",
"<strong>Pare-feu actif, aucun événement</strong> — rappel de la journalisation requise dans la vue vide, utile juste après activation.",
"<strong>Événements présents</strong> — panneau défilant à chasse fixe avec entrées brutes par action : <green>ACCEPT</green> vert, <orange>REJECT</orange> orange, <red>DROP</red> rouge. Le compteur de l'en-tête indique les lignes chargées."
],
"firewallRefresh": "<em>Actualiser</em> charge les dernières lignes à la demande. Sans actualisation automatique, la liste reste un instantané de l'ouverture ou du dernier clic. Source : <code>/var/log/pve-firewall.log</code>, filtré par VMID via <code>GET /api/vms/&lt;vmid&gt;/firewall/log</code>.",
"firewallCalloutTitle": "Pourquoi l'avoir ici quand l'UI Proxmox le montre déjà ?",
"firewallCalloutBody": "Évite de passer dans Proxmox et conserve la vue du même VMID : démarrer l'invité, vérifier montages et événements du pare-feu, puis l'arrêter depuis le panneau. Les règles sont modifiées dans Proxmox ; Monitor ne les change pas.",
"actionBarTitle": "Barre d'action inférieure",
"actionBarIntro": "Toujours visible au pied du modal quel que soit l'onglet actif:",
"consoleItem": "<strong>Console</strong>, pour les LXC actifs, ouvre <code>pct enter &lt;vmid&gt;</code> dans le conteneur. Elle utilise xterm.js et WebSocket comme l'<link>onglet Terminal</link>, avec la <strong>barre mobile</strong> : ESC, TAB, flèches, Entrée et Ctrl+C / Ctrl+X / Ctrl+R. Elle fonctionne sur téléphone ou tablette. Pour les VM, utilisez la console Proxmox noVNC.",
"lifecycleIntro": "Quatre boutons en grille 2×2 envoient <code>POST /api/vms/&lt;vmid&gt;/control</code> avec l'<code>action</code> correspondante. Leur disponibilité dépend de l'état de l'invité.",
"headerButton": "Bouton",
"headerEnabled": "Activé lorsque",
"headerAction": "Action envoyée à l'hôte",
"lifecycleRows": [
{
"button": "Démarrer",
"color": "green",
"enabled": "L'invité est arrêté.",
"action": "qm start / pct start"
},
{
"button": "Éteindre",
"color": "blue",
"enabled": "L'invité est en cours d'exécution.",
"action": "qm shutdown / pct shutdown — arrêt propre, ACPI"
},
{
"button": "Redémarrer",
"color": "blue",
"enabled": "L'invité est en cours d'exécution.",
"action": "qm reboot / pct reboot — redémarrage propre"
},
{
"button": "Forcer l'arrêt",
"color": "red",
"enabled": "L'invité est en cours d'exécution.",
"action": "qm stop / pct stop — arrêt forcé"
}
],
"forceStopTitle": "Forcer l'arrêt coupe immédiatement l'exécution",
"forceStopBody": "<strong>Forcer l'arrêt</strong> ignore la séquence d'arrêt, comme couper le courant. Utilisez <strong>Éteindre</strong> tant que l'invité répond. Forcez seulement si l'arrêt est bloqué et si vous acceptez le risque de perte de données. Le bouton rouge et son libellé limitent les clics accidentels."
},
"dataCollected": {
"heading": "Comment les données sont collectées",
"headerSection": "Section de l'onglet",
"headerEndpoint": "Point de terminaison",
"headerSource": "Source",
"rows": [
{
"section": "Liste des inventaires",
"endpoint": "/api/vms",
"source": "<code>pvesh get /cluster/resources --type vm</code> pour VM et CT."
},
{
"section": "Panneau de détails (config, réseau, disques)",
"endpoint": "/api/vms/<vmid>",
"source": "<code>qm config &lt;id&gt;</code> pour VMs / <code>pct config &lt;id&gt;</code> pour CTs."
},
{
"section": "Tableau des paramètres par invité",
"endpoint": "/api/vms/<vmid>/metrics",
"source": "Les données PVE RRD (<code>pvesh get /nodes/&lt;node&gt;/qemu/&lt;id&gt;/rrddata</code>) sont condensées à une forme facile à tracer."
},
{
"section": "Résultats récents du journal Proxmox",
"endpoint": "/api/vms/<vmid>/logs",
"source": "<code>pvesh get /nodes/&lt;node&gt;/&lt;qemu|lxc&gt;/&lt;vmid&gt;/log --start 0 --limit 1000</code>. Un échec renvoie une liste vide ; ces données ne constituent pas les journaux système complets de l'invité."
},
{
"section": "Sauvegardes disponibles pour les invités",
"endpoint": "/api/vms/<vmid>/backups",
"source": "<code>pvesm list &lt;storage&gt;</code> filtré par VMID."
},
{
"section": "Journal du pare-feu par invité (onglet Pare-feu)",
"endpoint": "/api/vms/<vmid>/firewall/log",
"source": "<code>/var/log/pve-firewall.log</code> filtré par VMID."
},
{
"section": "Commandes d'alimentation (Démarrer / Arrêt forcé / Redémarrer / Éteindre)",
"endpoint": "/api/vms/<vmid>/control",
"source": "Équivalents <code>qm start|stop|reboot|shutdown</code> ou <code>pct</code>."
}
],
"codeComment1": "# Comparer les données du tableau de bord à PVE",
"codeComment2": "# Examiner la configuration de l'invité telle que la fenêtre la voit",
"codeComment3": "# VM",
"codeComment4": "# CT"
},
"whereNext": {
"heading": "Où aller ensuite",
"items": [
{
"label": "Moniteur de santé",
"href": "/docs/monitor/health-monitor",
"tailRich": " — catégorie VM et conteneurs : échecs de démarrage, délais QMP dépassés et échecs d'arrêt CT."
},
{
"label": "Notifications",
"href": "/docs/monitor/notifications",
"tailRich": "— ce que déclenchent les événements <code>vm_*</code>, <code>ct_*</code>, <code>migration_*</code> et <code>backup_*</code> en aval."
},
{
"label": "Référence de l’API",
"href": "/docs/monitor/api",
"tailRich": " — points de terminaison des VM et des sauvegardes."
},
{
"label": "Index du tableau de bord",
"href": "/docs/monitor/dashboard",
"tailRich": "— les autres onglets."
},
{
"label": "ProxMenux → Créer VM",
"href": "/docs/create-vm",
"tailRich": " — création de systèmes : modèles NAS (Synology et autres), VM Linux/Windows et valeurs adaptées à Proxmox."
}
]
}
}