From c1fb72ed0ea486caca0105a217dfd78774619016 Mon Sep 17 00:00:00 2001 From: MacRimi <123239993+MacRimi@users.noreply.github.com> Date: Sun, 18 Oct 2026 17:16:51 +0200 Subject: [PATCH] Describe the Monitor pages as the code behaves --- web/messages/de/docs/monitor/access-auth.json | 22 ++++++------ .../de/docs/monitor/ai-assistant.json | 6 ++-- .../de/docs/monitor/api-reference.json | 4 +-- .../de/docs/monitor/architecture.json | 12 +++---- .../de/docs/monitor/dashboard/network.json | 2 +- .../de/docs/monitor/dashboard/security.json | 2 +- .../de/docs/monitor/dashboard/settings.json | 10 +++--- .../de/docs/monitor/dashboard/storage.json | 6 ++-- .../de/docs/monitor/dashboard/vms-lxcs.json | 12 +++---- .../de/docs/monitor/health-monitor.json | 12 +++---- web/messages/de/docs/monitor/index.json | 4 +-- .../de/docs/monitor/integrations.json | 2 +- .../de/docs/monitor/notifications.json | 8 ++--- web/messages/en/docs/monitor/access-auth.json | 22 ++++++------ .../en/docs/monitor/ai-assistant.json | 6 ++-- .../en/docs/monitor/api-reference.json | 4 +-- .../en/docs/monitor/architecture.json | 12 +++---- .../en/docs/monitor/dashboard/network.json | 2 +- .../en/docs/monitor/dashboard/security.json | 2 +- .../en/docs/monitor/dashboard/settings.json | 10 +++--- .../en/docs/monitor/dashboard/storage.json | 6 ++-- .../en/docs/monitor/dashboard/vms-lxcs.json | 12 +++---- .../en/docs/monitor/health-monitor.json | 12 +++---- web/messages/en/docs/monitor/index.json | 4 +-- .../en/docs/monitor/integrations.json | 2 +- .../en/docs/monitor/notifications.json | 8 ++--- web/messages/es/docs/monitor/access-auth.json | 34 +++++++++---------- .../es/docs/monitor/ai-assistant.json | 10 +++--- .../es/docs/monitor/api-reference.json | 22 ++++++------ .../es/docs/monitor/architecture.json | 14 ++++---- .../es/docs/monitor/audit-report/index.json | 2 +- .../es/docs/monitor/audit-report/policy.json | 2 +- .../es/docs/monitor/dashboard/hardware.json | 8 ++--- .../es/docs/monitor/dashboard/network.json | 2 +- .../es/docs/monitor/dashboard/security.json | 2 +- .../es/docs/monitor/dashboard/settings.json | 16 ++++----- .../es/docs/monitor/dashboard/storage.json | 16 ++++----- .../docs/monitor/dashboard/system-logs.json | 8 ++--- .../monitor/dashboard/vms-lxcs-updates.json | 12 +++---- .../es/docs/monitor/dashboard/vms-lxcs.json | 24 ++++++------- .../es/docs/monitor/health-monitor.json | 12 +++---- web/messages/es/docs/monitor/index.json | 4 +-- .../es/docs/monitor/integrations.json | 4 +-- .../es/docs/monitor/notifications.json | 30 ++++++++-------- web/messages/fr/docs/monitor/access-auth.json | 24 ++++++------- .../fr/docs/monitor/ai-assistant.json | 6 ++-- .../fr/docs/monitor/api-reference.json | 4 +-- .../fr/docs/monitor/architecture.json | 12 +++---- .../fr/docs/monitor/dashboard/network.json | 2 +- .../fr/docs/monitor/dashboard/security.json | 2 +- .../fr/docs/monitor/dashboard/settings.json | 10 +++--- .../fr/docs/monitor/dashboard/storage.json | 6 ++-- .../fr/docs/monitor/dashboard/vms-lxcs.json | 12 +++---- .../fr/docs/monitor/health-monitor.json | 12 +++---- web/messages/fr/docs/monitor/index.json | 4 +-- .../fr/docs/monitor/integrations.json | 2 +- .../fr/docs/monitor/notifications.json | 8 ++--- web/messages/it/docs/monitor/access-auth.json | 24 ++++++------- .../it/docs/monitor/ai-assistant.json | 6 ++-- .../it/docs/monitor/api-reference.json | 4 +-- .../it/docs/monitor/architecture.json | 12 +++---- .../it/docs/monitor/dashboard/network.json | 2 +- .../it/docs/monitor/dashboard/security.json | 2 +- .../it/docs/monitor/dashboard/settings.json | 10 +++--- .../it/docs/monitor/dashboard/storage.json | 6 ++-- .../it/docs/monitor/dashboard/vms-lxcs.json | 12 +++---- .../it/docs/monitor/health-monitor.json | 12 +++---- web/messages/it/docs/monitor/index.json | 4 +-- .../it/docs/monitor/integrations.json | 2 +- .../it/docs/monitor/notifications.json | 8 ++--- web/messages/pt/docs/monitor/access-auth.json | 24 ++++++------- .../pt/docs/monitor/ai-assistant.json | 6 ++-- .../pt/docs/monitor/api-reference.json | 4 +-- .../pt/docs/monitor/architecture.json | 12 +++---- .../pt/docs/monitor/dashboard/network.json | 2 +- .../pt/docs/monitor/dashboard/security.json | 2 +- .../pt/docs/monitor/dashboard/settings.json | 10 +++--- .../pt/docs/monitor/dashboard/storage.json | 6 ++-- .../pt/docs/monitor/dashboard/vms-lxcs.json | 12 +++---- .../pt/docs/monitor/health-monitor.json | 12 +++---- web/messages/pt/docs/monitor/index.json | 4 +-- .../pt/docs/monitor/integrations.json | 2 +- .../pt/docs/monitor/notifications.json | 8 ++--- web/messages/sk/docs/monitor/access-auth.json | 24 ++++++------- .../sk/docs/monitor/ai-assistant.json | 6 ++-- .../sk/docs/monitor/api-reference.json | 4 +-- .../sk/docs/monitor/architecture.json | 12 +++---- .../sk/docs/monitor/dashboard/network.json | 2 +- .../sk/docs/monitor/dashboard/security.json | 2 +- .../sk/docs/monitor/dashboard/settings.json | 10 +++--- .../sk/docs/monitor/dashboard/storage.json | 6 ++-- .../sk/docs/monitor/dashboard/vms-lxcs.json | 12 +++---- .../sk/docs/monitor/health-monitor.json | 12 +++---- web/messages/sk/docs/monitor/index.json | 4 +-- .../sk/docs/monitor/integrations.json | 2 +- .../sk/docs/monitor/notifications.json | 8 ++--- web/messages/sv/docs/monitor/access-auth.json | 24 ++++++------- .../sv/docs/monitor/ai-assistant.json | 6 ++-- .../sv/docs/monitor/api-reference.json | 4 +-- .../sv/docs/monitor/architecture.json | 12 +++---- .../sv/docs/monitor/dashboard/network.json | 2 +- .../sv/docs/monitor/dashboard/security.json | 2 +- .../sv/docs/monitor/dashboard/settings.json | 10 +++--- .../sv/docs/monitor/dashboard/storage.json | 6 ++-- .../sv/docs/monitor/dashboard/vms-lxcs.json | 12 +++---- .../sv/docs/monitor/health-monitor.json | 12 +++---- web/messages/sv/docs/monitor/index.json | 4 +-- .../sv/docs/monitor/integrations.json | 2 +- .../sv/docs/monitor/notifications.json | 8 ++--- 109 files changed, 473 insertions(+), 473 deletions(-) diff --git a/web/messages/de/docs/monitor/access-auth.json b/web/messages/de/docs/monitor/access-auth.json index c35012e4..305456c1 100644 --- a/web/messages/de/docs/monitor/access-auth.json +++ b/web/messages/de/docs/monitor/access-auth.json @@ -19,7 +19,7 @@ "reaching": { "heading": "Dashboard öffnen", "intro": "ProxMenux Monitor lauscht auf 0.0.0.0:8008. Drei übliche Zugriffswege:", - "outro": "Direktzugriff entspricht der Standard-systemd-Unit. Reverse-Proxy und Secure Gateway werden unten beschrieben. Client-IPs aus X-Forwarded-For werden nur mit PROXMENUX_TRUST_PROXY=1 und einem von Ihnen kontrollierten Proxy verwendet. X-Forwarded-Proto oder X-Forwarded-Host allein aktivieren dieses Vertrauen nicht; das Frontend erstellt API-URLs aus dem Ursprung des Browsers." + "outro": "Direktzugriff entspricht der Standard-systemd-Unit. Reverse-Proxy und Secure Gateway werden unten beschrieben. Das Vertrauen in Client-IPs aus X-Forwarded-For erfordert PROXMENUX_TRUST_PROXY=1 und einen von Ihnen kontrollierten Proxy. X-Forwarded-Proto oder X-Forwarded-Host allein aktivieren das Proxy-Vertrauen nicht. Auf den Ports 80/443 verwendet das Frontend relative /api/*-URLs; auf jedem anderen Port ruft es Port 8008 unter demselben Hostnamen auf." }, "firstLaunch": { "heading": "Ablauf beim ersten Start", @@ -117,8 +117,8 @@ "loginImageCaption": "Sobald die Authentifizierung konfiguriert ist, beginnt hier jeder Besuch des Dashboards. Wenn 2FA aktiviert ist, fragt der Bildschirm in einem zweiten Schritt nach dem akzeptierten Passwort nach dem 6-stelligen Code.", "loginFlowTitle": "Loginfluss", "twofaIntro": "Mit 2FA antwortet derselbe Aufruf zunächst mit requires_totp: true. Senden Sie ihn erneut mit dem sechsstelligen Code:", - "publicTitle": "Öffentlicher Zugriff und geschützte Prüfungen", - "publicIntro": "Anmeldung und Authentifizierungsstatus sind öffentlich. Die Ersteinrichtung ist möglich, solange Benutzername und Passwort fehlen, auch nach abgelehntem Schutz. Systemdaten benötigen bei aktiviertem Schutz eine Authentifizierung:", + "publicTitle": "Öffentliche Endpunkte (ohne Token)", + "publicIntro": "Anmeldung, Authentifizierungsstatus, Ersteinrichtung und der leichte Endpunkt /api/system-info sind öffentlich:", "publicItems": [ "/api/auth/login und /api/auth/status sind öffentlich. /api/auth/setup erstellt das erste Konto und lehnt das Überschreiben vorhandener Zugangsdaten ab.", "/api/system-info ist ein öffentlicher Endpunkt für grundlegende Systemdaten einschließlich health.status. Er verlangt kein Token. Auch /api/auth/status ist öffentlich und eignet sich für eine Erreichbarkeitsprüfung." @@ -146,7 +146,7 @@ }, { "asset": "2FA-TOTP-Geheimnis", - "algorithm": "Standard-TOTP (RFC 6238) mit Base32-kodiertem Geheimnis. Die acht Wiederherstellungscodes sind einmalig und werden als SHA-256-Hashes gespeichert.", + "algorithm": "Standard-TOTP (RFC 6238) mit Base32-kodiertem Geheimnis. Die acht Backup-Codes sind einmalig und werden als SHA-256-Hashes gespeichert.", "where": "auth.json → totp_secret + backup_codes[]" }, { @@ -243,17 +243,17 @@ } ], "backupTitle": "Warum Sicherungen wichtig sind", - "backupBody": "Bei Verlust des Authenticator-Geräts einen gesicherten Wiederherstellungscode verwenden oder eine zuvor eingerichtete App-Sicherung wiederherstellen. Cloud-Synchronisierung und lokale Exporte unterscheiden sich je nach App; prüfen Sie, ob die TOTP-Geheimnisse tatsächlich wiederhergestellt werden. Mit Root-Zugang zum Host ist die unten beschriebene Wiederherstellung ebenfalls möglich. Bewahren Sie eine separate, sichere Kopie auf.", + "backupBody": "Bei Verlust des Authenticator-Geräts einen gesicherten Backup-Code verwenden oder die App aus einer zuvor eingerichteten Sicherung wiederherstellen. Cloud-Synchronisierung und lokale Exporte unterscheiden sich je nach App; prüfen Sie, ob die gewählte Methode die TOTP-Geheimnisse tatsächlich wiederherstellt. Mit Root-Zugang zum Host ist die unten beschriebene Wiederherstellung ebenfalls möglich. Bewahren Sie eine separate, sichere Kopie auf.", "setupTitle": "Schritt-für-Schritt-Setup aus dem Dashboard", "setupImageAlt": "Einrichtungsbildschirm 2FA mit QR-Code und Backup-Codes", - "setupImageCaption": "Der 2FA-Dialog zeigt QR-Code, Base32-Geheimnis zur manuellen Eingabe und acht einmalige Wiederherstellungscodes. Vor dem Schließen kopieren; sie werden nicht erneut angezeigt.", + "setupImageCaption": "Der 2FA-Einrichtungsdialog zeigt QR-Code, Base32-Geheimnis zur manuellen Eingabe und nach der Überprüfung acht einmalige Backup-Codes. Die Codes vor dem Schließen des Dialogs kopieren; sie werden nicht erneut angezeigt.", "setupSteps": [ "Installieren Sie die Authenticator-App auf Ihrem Telefon (oder öffnen Sie Ihren Passwort-Manager). Eine der Apps aus der Tabelle oben. Sie müssen dies nur einmal tun - die gleiche app enthält codes für jeden dienst, den sie schützen.", "Am Dashboard anmelden mit Benutzername und Passwort.", - "Sicherheit öffnen und 2FA aktivieren wählen. Der Dialog zeigt QR-Code, Base32-Geheimnis und acht Wiederherstellungscodes.", + "Registerkarte Sicherheit öffnen in der Seitenleiste des Dashboards, dann auf 2FA aktivieren und Einrichtung starten klicken. Der Dialog zeigt QR-Code und manuellen Schlüssel; die acht Backup-Codes erscheinen, nachdem der Code überprüft wurde.", "Fügen Sie den Eintrag zur Authenticator-App hinzu:", - "Wiederherstellungscodes sichern. Alle acht in einem Passwortmanager, einer verschlüsselten Notiz oder einem sicheren Ausdruck aufbewahren. Jeder funktioniert einmal, wenn der Authenticator fehlt.", "Bestätigen Sie, indem Sie den aktuellen 6-stelligen Code aus der App in das Feld \"Verifizierungscode\" des Setup-Dialogs eingeben und senden. Codes aktualisieren alle 30 Sekunden, wenn es also abläuft, während Sie tippen, geben Sie einfach den nächsten ein.", + "Backup-Codes sichern. Nach der Überprüfung alle acht sicher in einem Passwortmanager, einer verschlüsselten Notiz oder einem sicheren Ausdruck aufbewahren. Jeder funktioniert einmal, wenn der Authenticator nicht verfügbar ist.", "Fertig. 2FA ist aktiv. Bei der nächsten Anmeldung wird zuerst das Passwort und danach der aktuelle sechsstellige Code abgefragt." ], "setupStep4Sub": [ @@ -261,17 +261,17 @@ "Manuelle Alternative, falls Scannen nicht möglich ist, etwa auf demselben Telefon: Konto hinzufügen → Einrichtungsschlüssel eingeben. Einen Namen wie Proxmox Monitor wählen, Base32-Geheimnis einfügen, Typ auf Zeitbasiert belassen und speichern." ], "testTitle": "Test vor dem Abmelden", - "testBody": "Die bestehende Sitzung geöffnet lassen und sofort in einem privaten Fenster eine neue Anmeldung testen. Bei abgelehntem Code zuerst Server- und Telefonuhr prüfen, bevor Sie die funktionierende Sitzung schließen. Bei bereits verlorenem Zugang Wiederherstellungscode verwenden oder auth.json in der Host-Shell bearbeiten.", + "testBody": "Die bestehende Sitzung geöffnet lassen und sofort nach der Einrichtung in einem privaten Fenster eine neue Anmeldung testen. Bei abgelehntem Code zuerst Server- und Telefonuhr prüfen, bevor Sie sich aus der funktionierenden Sitzung abmelden. Bei bereits verlorenem Zugang einen Backup-Code verwenden oder auth.json in der Host-Shell bearbeiten.", "lostTitle": "Verlorener Authentifikator", "lostIntro": "Drei Wiederherstellungswege, von geringem bis stärkerem Eingriff:", "lostItems": [ - "Wiederherstellungscode verwenden. Einen der acht gesicherten Codes im TOTP-Feld eingeben. Jeder funktioniert einmal; unbenutzte bleiben gültig. Danach 2FA in den Einstellungen neu einrichten, um acht neue Codes zu erhalten.", + "Backup-Code verwenden. Einen der acht gesicherten Codes im TOTP-Feld eingeben. Er funktioniert einmal; unbenutzte Codes bleiben gültig. Nach der Anmeldung Sicherheit öffnen, zuerst 2FA deaktivieren und danach 2FA aktivieren wählen, um acht neue Codes zu erhalten.", "Authenticator aus Cloud oder Sicherung wiederherstellen. Bei eingerichteter Cloud-Synchronisierung die App auf dem neuen Gerät installieren und anmelden, etwa Google, Microsoft, Authy, Apple Passwords über iCloud-Schlüsselbund, Ente oder 2FAS. Bei einer Exportdatei, etwa aus Aegis, Raivo oder FreeOTP+, die App installieren und die Datei importieren.", "Deaktivieren Sie 2FA von der Host-Shell. Wenn die vorherigen Optionen nicht verfügbar sind, bearbeiten Sie /root/.config/proxmenux-monitor/auth.json auf dem Proxmox-Host (Sie benötigen SSH oder Konsolenzugriff), setzen Sie totp_enabled auf false, speichern und starten Sie den Dienst neu:" ], "lostShellOutro": "Sie können sich nur mit Benutzername + Passwort anmelden und dann 2FA aus Einstellungen wieder aktivieren.", "disableTitle": "Deaktivieren Sie 2FA", - "disableBody": "Sicherheit öffnen und 2FA deaktivieren wählen. POST /api/auth/totp/disable benötigt Passwort und gültigen TOTP- oder Wiederherstellungscode. Danach werden Geheimnis und Wiederherstellungscodes gelöscht. Alten Eintrag auch in der App entfernen.", + "disableBody": "Sicherheit öffnen und 2FA deaktivieren wählen. POST /api/auth/totp/disable benötigt das aktuelle Passwort und einen gültigen TOTP- oder Backup-Code. Dabei werden TOTP-Geheimnis und Backup-Codes gelöscht. Den alten Eintrag auch in der Authenticator-App entfernen.", "rejectedTitle": "Der 6-stellige Code wird immer abgelehnt", "rejectedIntro": "TOTP ist zeitbasiert. Server- und Telefonuhr dürfen nur etwa 30 Sekunden voneinander abweichen. Zwei Prüfungen:", "rejectedItems": [ diff --git a/web/messages/de/docs/monitor/ai-assistant.json b/web/messages/de/docs/monitor/ai-assistant.json index eb3b0679..5bf8a164 100644 --- a/web/messages/de/docs/monitor/ai-assistant.json +++ b/web/messages/de/docs/monitor/ai-assistant.json @@ -14,7 +14,7 @@ }, "intro": { "title": "Standardmäßig aus, mit einem Schalter aktivieren", - "body": "Die KI-Umschreibung ist standardmäßig aus. Aktivieren Sie sie unter Einstellungen → Benachrichtigungen → Erweitert: KI-Verbesserung. Schlagen Kontextanreicherung oder Umschreibung fehl, wird die ursprüngliche Vorlage gesendet. Nach spätestens 25 Sekunden Wartezeit pro Umschreibung wird auf die Vorlage zurückgegriffen." + "body": "Die KI-Umschreibung ist standardmäßig aus. Aktivieren Sie sie unter Einstellungen → Benachrichtigungen → Erweitert: KI-Verbesserung. Schlagen Kontextanreicherung oder Umschreibung fehl, sendet der Dispatcher die ursprüngliche Vorlage. Umschreibungen in der Versandwarteschlange für Ereignisse haben ein Zeitlimit von 25 Sekunden; wird es erreicht, wird die Vorlage gesendet, statt weiter zu warten." }, "howItWorks": { "heading": "Wie es funktioniert", @@ -109,7 +109,7 @@ ], "customNote": "Der benutzerdefinierte Eingabeaufforderungsmodus verwendet eine feste Obergrenze von 500-Ausgabetoken unabhängig von der Detailstufe - die benutzerdefinierte Eingabeaufforderung ist in Ihrer Kontrolle und die Obergrenze schützt vor außer Kontrolle geratenen Antworten.", "sizingTitle": "Praktische Dimensionierung", - "sizingBody": "Schätzen Sie den Verbrauch als umgeschriebene Ereignisse × KI-Kanäle × Eingabe- und Ausgabe-Token je Aufruf. Beispiel: 50 Ereignisse × ein Kanal × (500 Eingabe + 300 Ausgabe) ergeben 40.000 Token täglich. Verbrauch und Kosten hängen von Modell, Kontext, Cache und Anbieterlimits ab. Detailstufe pro Kanal erklärt brief für Chats statt standard, bei weiterhin ausführlichen E-Mails." + "sizingBody": "Schätzen Sie den Verbrauch als umgeschriebene Ereignisse × KI-Kanäle × Eingabe- und Ausgabe-Token je Aufruf. Beispiel: 50 Ereignisse × ein Kanal × (2.000 Eingabe + 300 Ausgabe) ergeben etwa 115.000 Token täglich, da allein der Standard-Systemprompt rund 1.500 Token umfasst. Tatsächlicher Verbrauch und Kosten hängen von Modell, Kontext, Cache und Anbieterlimits ab. Der Abschnitt Detailstufe pro Kanal erklärt brief für Chats statt standard, bei weiterhin ausführlichen E-Mail-Berichten." }, "providers": { "heading": "KI-Anbieter", @@ -142,7 +142,7 @@ "items": [ "API-Schlüssel: console.anthropic.com/settings/keys", "Beispiele aus der mitgelieferten Modellliste: claude-haiku-4-5-20251001, claude-sonnet-4-6, claude-opus-4-6.", - "Mitgelieferte Empfehlung: claude-haiku-4-5-20251001. Dieser genaue Snapshot ist als Empfehlung konfiguriert; die älteren Claude-3.5-Einträge stehen nicht mehr in der mitgelieferten Liste." + "Mitgelieferte Empfehlung: claude-haiku-4-5-20251001, ein fest angehefteter Snapshot statt eines wechselnden Alias." ] }, "gemini": { diff --git a/web/messages/de/docs/monitor/api-reference.json b/web/messages/de/docs/monitor/api-reference.json index 03b616d5..8581cd36 100644 --- a/web/messages/de/docs/monitor/api-reference.json +++ b/web/messages/de/docs/monitor/api-reference.json @@ -162,7 +162,7 @@ { "endpoint": "/api/vms//backup", "method": "POST", - "use": "Erstellt eine vzdump-Sicherung einer VM oder eines LXC. Optionale, an den Speicher anzupassende Felder: storage (PVE-Ziel), mode (snapshot, suspend oder stop), compress (zstd, lzo, gzip oder none), protected (true oder false), notes, notification (auto, always, failure oder never) und pbs_change_detection (default, legacy oder data). Liefert die UPID des PVE-Tasks." + "use": "Erstellt eine vzdump-Sicherung einer VM oder eines LXC. Felder im Body, alle optional, sofern die Vorgaben zum Speicheraufbau passen: storage (ein PVE-Speicher), mode (snapshot, suspend oder stop), compress (zstd, lzo, gzip oder none), protected (true oder false), notes und pbs_change_detection (default, legacy oder data). Liefert die UPID des PVE-Tasks." }, { "endpoint": "/api/vms//backups", @@ -286,7 +286,7 @@ { "endpoint": "/api/storage/smart//test", "method": "POST", - "use": "Startet einen SMART-Selbsttest. Anfrageschema: '{'\"type\":\"short\"|\"long\"'}'." + "use": "Startet einen SMART-Selbsttest. Anfrageschema: '{'\"test_type\":\"short\"|\"long\"'}'." }, { "endpoint": "/api/storage/smart/schedules", diff --git a/web/messages/de/docs/monitor/architecture.json b/web/messages/de/docs/monitor/architecture.json index 385a3e2a..be93e6be 100644 --- a/web/messages/de/docs/monitor/architecture.json +++ b/web/messages/de/docs/monitor/architecture.json @@ -73,13 +73,13 @@ "intro": "Das AppImage enthält ein beim Start eingehängtes Dateisystem. AppRun im Wurzelverzeichnis bereitet die Umgebung vor und startet flask_server.py:", "consequencesIntro": "Zwei Konsequenzen dieses Layouts:", "consequences": [ - "Mitgelieferte Python-Umgebung. Interpreter und Pakete liegen im AppImage; eine Installation in das System-Python entfällt. Die Anwendung nutzt weiterhin Kernel-Schnittstellen und externe Host-Werkzeuge.", + "Mitgelieferte Python-Pakete. Die Python-Pakete liegen im AppImage und laufen mit dem Python-Interpreter des Hosts, 3.11 (PVE 8) oder 3.13 (PVE 9), ohne dass etwas in das System-Python des Hosts installiert wird. Die Anwendung nutzt weiterhin Kernel-Schnittstellen des Hosts und externe Host-Werkzeuge.", "Hardware-Clients sind enthalten. Mitgeliefert werden ipmitool, lm-sensors und upsc. Messwerte erfordern unterstützte Hardware, Sensorzugriff und für USV-Daten einen eingerichteten NUT-Server." ] }, "flask": { "heading": "Struktur der Flask-Anwendung", - "intro": "flask_server.py erstellt eine Flask(__name__)-Instanz mit begrenztem CORS, registriert neun Blueprints direkt und initialisiert Terminalrouten. Die Tabelle zeigt Hauptmodule; Audit, VM-Sicherung und PBS sind ebenfalls registriert. PVE-Vorwärmer laufen nur auf PVE-Hosts.", + "intro": "flask_server.py erstellt eine Flask(__name__)-Instanz mit eingeschränkten CORS-Ursprüngen, registriert zehn Blueprints direkt und initialisiert Terminalrouten. Die Tabelle zeigt die Hauptmodule; die Blueprints für PBS, Monitor-Links, Audit und VM-Sicherung sind ebenfalls registriert. PVE-spezifische Vorwärmer laufen nur auf PVE-Hosts.", "headerBlueprint": "Blueprint / Modul", "headerPrefix": "Routenpräfix", "headerOwns": "Zuständigkeit", @@ -242,10 +242,10 @@ "Updates: ausstehende Paketaktualisierungen und Sicherheitspatches.", "Protokolle: anhaltende Muster, Spitzen und Kaskaden im Systemjournal.", "Arbeitsspeicher: OOM-Killer-Aktivität und anhaltender Speicherdruck.", - "Temperatur: CPU- und Datenträgerwerte im Vergleich zu Überwachungsschwellen; verfügbare Sensoren hängen von der Hardware ab.", + "CPU: Auslastung und CPU-Temperatur im Vergleich zu den konfigurierbaren Schwellen; verfügbare Sensoren hängen von der Hardware ab.", "Sicherheit: Anmeldefehler, Sperrereignisse und Fail2Ban-Jail-Zustand." ], - "afterIntro": "Befunde verwenden stabile error_key, Kategorie und Schweregrad. Vorhandene Zeilen in errors erhalten last_seen und Zähleraktualisierungen statt Duplikaten. Der Benachrichtigungsversand hat eigene Fingerabdrücke und Wartezeiten.", + "afterIntro": "Befunde verwenden stabile error_key, Kategorie und Schweregrad. Vorhandene Einträge in errors werden an Ort und Stelle aktualisiert (last_seen, Schweregrad, Grund), statt dupliziert zu werden. Der Benachrichtigungsversand hat zudem eigene Regeln für Fingerabdrücke und Wartezeiten.", "cycleEnd": "Die Bereinigung kann alte Fehler anhand der Unterdrückungsdauer je Kategorie und Zustandsregeln auflösen, verwaiste Einträge entfernter Ressourcen entfernen und events über 30 Tage löschen. Kategorien erklärt Dashboard → Health Monitor." }, "notifications": { @@ -264,9 +264,9 @@ "intro": "Die Registerkarte Terminal verbindet einen schlanken xterm.js-Client über WebSocket mit einem serverseitigen PTY. Es gibt zwei Betriebsarten:", "items": [ "HTTP-Modus, Standard: Der integrierte Flask-Server verarbeitet mit flask-sock WebSocket-Upgrade-Anfragen.", - "HTTPS-/WSS-Modus: Verwendet gevent.pywsgi.WSGIServer mit geventwebsocket.handler.WebSocketHandler für WebSocket über TLS." + "HTTPS-/WSS-Modus: Der TLS-Server verwendet gevent.pywsgi.WSGIServer mit dessen Standard-Handler; flask-sock verarbeitet WebSocket-Verbindungen über TLS." ], - "outro": "Terminalprozesse erben User=root. Bei aktiver Authentifizierung braucht WebSocket ein kurzlebiges Einmalticket vom authentifizierten Ticket-Endpunkt mit Verwaltungsrechten. Ist Authentifizierung deaktiviert oder abgelehnt, folgt der Verbindungsaufbau diesem unauthentifizierten Modus.", + "outro": "Terminal-Kindprozesse erben User=root vom Dienst. Das Öffnen eines WebSockets erfordert ein kurzlebiges Einmalticket vom authentifizierten Terminal-Ticket-Endpunkt mit Verwaltungsrechten.", "proxyNote": "Beim Reverse-Proxy muss WebSocket-Weiterleitung mit den Headern Upgrade und Connection funktionieren. Das Terminal benötigt diese Weiterleitung." }, "proxy": { diff --git a/web/messages/de/docs/monitor/dashboard/network.json b/web/messages/de/docs/monitor/dashboard/network.json index 4ddd73fb..0196266b 100644 --- a/web/messages/de/docs/monitor/dashboard/network.json +++ b/web/messages/de/docs/monitor/dashboard/network.json @@ -162,7 +162,7 @@ } ], "reportTitle": "Netzwerklatenzbericht (PDF)", - "reportIntro": "Beide Modi haben neben der Zielauswahl eine Schaltfläche Bericht. Sie erzeugt ein PDF der Messungen als möglichen Anhang für eine Störungsmeldung beim Internetanbieter.", + "reportIntro": "Beide Modi haben neben der Zielauswahl eine Schaltfläche Bericht. Sie öffnet einen druckbaren Bericht der Messungen; speichern Sie ihn über den Druckdialog des Browsers als PDF und hängen Sie ihn an eine Störungsmeldung beim Internetanbieter an.", "reportPreviewAlt": "Erste PDF-Seite des Latenzberichts mit Zusammenfassung, Messanzeige, Statistik, Diagramm und Schwellenwerten", "reportPreviewCaption": "Die erste Seite enthält Zusammenfassung, Messanzeige, Hauptstatistik, Latenzverlauf und Schwellenwerte. Ab Seite 2 folgen die Messwerttabelle und die Methodik.", "downloadLabel": "Beispiel-Latenzbericht herunterladen (PDF)", diff --git a/web/messages/de/docs/monitor/dashboard/security.json b/web/messages/de/docs/monitor/dashboard/security.json index 9a626db3..2ba938e6 100644 --- a/web/messages/de/docs/monitor/dashboard/security.json +++ b/web/messages/de/docs/monitor/dashboard/security.json @@ -136,7 +136,7 @@ "configCaption": "Jail sshd bearbeiten: Wählen Sie einen niedrigeren Wert für Max Retries, wenn SSH nur aus Ihrem Subnetz genutzt wird, oder verlängern Sie Ban Time für ein öffentlich erreichbares Dashboard.", "outro": "Die Anleitung Installation, Konfiguration und Deinstallation behandelt auch die manuelle Installation, die Änderung von SSH MaxAuthTries und das Protokoll proxmenux-auth.log. Sie finden sie unter ProxMenux → Sicherheit → Fail2Ban.", "calloutTitle": "Ohne Fail2Ban sperrt dieser Mechanismus keine IPs", - "calloutBody": "ProxMenux Monitor prüft die von Fail2Ban gesperrten IPs auf Anwendungsebene, bevor Flask-Anfragen verarbeitet werden. Es fragt fail2ban-client ab und speichert das Ergebnis 30 Sekunden zwischen; eine SQL-Sperrtabelle wird nicht gelesen. Ohne Fail2Ban werden fehlgeschlagene Anmeldungen in proxmenux-auth.log protokolliert, dieser Mechanismus sperrt dann aber keine IPs." + "calloutBody": "ProxMenux Monitor prüft die im Fail2Ban-Jail proxmenux gesperrten IPs auf Anwendungsebene, bevor Flask-Anfragen verarbeitet werden, und speichert das Ergebnis 30 Sekunden zwischen. Ohne Fail2Ban werden fehlgeschlagene Anmeldungen in proxmenux-auth.log protokolliert und der Login-Endpunkt ist auf 5 Versuche pro IP alle 5 Minuten begrenzt, es wird aber keine IP gesperrt." }, "lynis": { "heading": "Lynis-Sicherheitsprüfung", diff --git a/web/messages/de/docs/monitor/dashboard/settings.json b/web/messages/de/docs/monitor/dashboard/settings.json index 77cefc51..56d6cb32 100644 --- a/web/messages/de/docs/monitor/dashboard/settings.json +++ b/web/messages/de/docs/monitor/dashboard/settings.json @@ -76,7 +76,7 @@ }, "thresholds": { "heading": "Health-Monitor-Schwellenwerte", - "intro": "Die vorige Karte regelt die Ruhezeit nach einer Unterdrückung; diese bestimmt den Auslösewert einer Warnung. Die meisten Schwellenprüfungen bieten anpassbare Werte für Warnung und Kritisch. Die Tabelle erklärt Ausnahmen wie die kombinierte Swap-Regel und den aktuellen RAM-Detektor.", + "intro": "Die vorige Karte regelt die Ruhezeit nach einer Unterdrückung; diese bestimmt den Auslösewert einer Warnung. Die meisten Schwellenprüfungen bieten anpassbare Werte für Warnung und Kritisch. Die Tabelle unten erklärt Ausnahmen wie die kombinierte Swap-Regel.", "whatForTitle": "Wozu es dient", "whatForIntro": "Die Standardwerte sind ein Ausgangspunkt, aber jede Umgebung hat eigene Betriebsbedingungen:", "whatForItems": [ @@ -85,7 +85,7 @@ "Wählen Sie Temperaturschwellen anhand der Laufwerksspezifikationen und tatsächlichen Bedingungen. Passive oder aktive Kühlung allein bestimmt keine allgemein niedrigere oder höhere sichere Grenze.", "Ein stark virtualisierter Host kann bei Builds CPU-Spitzen erreichen, ohne für jeden 80-%-Peak zu warnen; anhaltende Überlast muss weiter gemeldet werden." ], - "whatForOutro": "Unterstützte Änderungen gelten bei der nächsten Prüfung. Der Health Monitor liest /usr/local/share/proxmenux/health_thresholds.json in jedem Zyklus ohne Neustart. Einige Anzeigen wie die Datenträgertemperatur verwenden diese Werte; manche Kapazitätsbalken haben eigene Grenzen. Die RAM-Zeile beschreibt eine aktuelle Ausnahme.", + "whatForOutro": "Unterstützte Schwellenänderungen gelten bei der nächsten Prüfung. Der Health Monitor liest /usr/local/share/proxmenux/health_thresholds.json in jedem Zyklus ohne Neustart. Ausgewählte Anzeigen, darunter die Datenträgertemperatur, verwenden diese Werte; manche Kapazitätsbalken behalten eigene visuelle Grenzen.", "coloursTitle": "Statusfarben für Warnung und Kritisch", "coloursIntro": "Widgets mit dem konfigurierten Paar Warnung/Kritisch verwenden die drei folgenden Zustände. Andere Anzeigen, etwa PVE-Kapazitätsbalken, haben eigene Grenzen; ihre Farbe allein belegt keine Health-Monitor-Warnung.", "headerColour": "Farbe", @@ -125,7 +125,7 @@ "section": "Arbeitsspeicher", "warning": "85 %", "critical": "95 %", - "gates": "RAM-Druck des Hosts. Der konfigurierbare Standard zeigt Kritisch bei 95 %, doch der aktuelle Detektor verwendet fest 90 % über längere Zeit; diese Einstellung ändert diesen Laufzeitzweig derzeit nicht." + "gates": "RAM-Druck des Hosts." }, { "section": "Swap (nur kritischer Schwellenwert)", @@ -185,7 +185,7 @@ "section": "PVE-Speicher", "warning": "85 %", "critical": "95 %", - "gates": "Von PVE verwaltete Speicher: LVM, LVM-thin, ZFS-pool, RBD/Ceph und PBS. Nicht alle sind Blockspeicher." + "gates": "Nur PVE-Speicher der Typen LVM, LVM-thin, ZFS-pool, RBD, CephFS und PBS. Verzeichnis-, NFS- und CIFS-Speicher deckt die Zeile zum Host-Speicherplatz ab." }, { "section": "ZFS-Pool", @@ -218,7 +218,7 @@ "toggleTitle": "Benachrichtigungsschalter bei aktiver Erkennung", "toggleBody": "Der Schalter lxc_updates_available je Kanal unter Benachrichtigungen → Dienste erscheint nur bei aktiver Erkennung. Beim Abschalten verschwindet die Zeile in allen Kanälen. Die Datenbank bewahrt die Einstellung; beim Einschalten kehrt der bisherige Wert zurück.", "purgeTitle": "Was beim Abschalten der Erkennung gelöscht wird", - "purgeBody": "Das Abschalten entfernt sofort alle type=lxc-Einträge aus /usr/local/share/proxmenux/managed_installs.json. Hardware zeigt beim nächsten Neuladen keine LXC-Updatezähler mehr. Nach dem Einschalten füllt der nächste Erkennungszyklus den Bestand erneut; ein manueller API-Aufruf kann dies vorziehen." + "purgeBody": "Das Abschalten entfernt sofort alle type=lxc-Einträge aus /usr/local/share/proxmenux/managed_installs.json. Die LXC-Updatezähler auf der Registerkarte VMs und LXCs verschwinden beim nächsten Neuladen des Dashboards. Nach dem Einschalten füllt der nächste Erkennungszyklus den Bestand erneut; ein manueller API-Aufruf kann dies vorziehen." }, "storageExclusions": { "heading": "Ausschlüsse von Remote-Speicher", diff --git a/web/messages/de/docs/monitor/dashboard/storage.json b/web/messages/de/docs/monitor/dashboard/storage.json index e3f1c1a1..3f75c928 100644 --- a/web/messages/de/docs/monitor/dashboard/storage.json +++ b/web/messages/de/docs/monitor/dashboard/storage.json @@ -70,7 +70,7 @@ "items": [ "Gerätepfad — /dev/sda, /dev/nvme0n1.", "Typkennzeichnung — SATA / NVMe und passendes Symbol.", - "Systemkennzeichnung — orange Markierung für erkannte Betriebssystemlaufwerke. Die Erkennung verwendet die Einhängepunkte / und /boot; zugehörige Laufwerke erhalten System. Eine fehlende Markierung beweist nicht, dass das Laufwerk gefahrlos gelöscht oder anders verwendet werden kann.", + "Systemkennzeichnung — orange Markierung für Laufwerke, die der Host verwendet: Systemeinhängepunkte (/, /boot, /usr, /var…), aktiver Swap, ZFS-Poolmitglieder, physische LVM-Volumes, aktive RAID-Mitglieder oder Bezeichnungen von Systempartitionen. Eine fehlende Markierung beweist nicht, dass das Laufwerk gefahrlos gelöscht oder anders verwendet werden kann.", "Modell — Hersteller und Modell aus smartctl -i.", "Kapazität — in gut lesbaren Einheiten.", "Temperatur — aktueller Wert in °C, eingefärbt nach Laufwerkstyp; NVMe verwendet höhere Schwellen als SATA.", @@ -112,7 +112,7 @@ "pdfPreviewAlt": "Erste Seite des SMART-Berichts mit Zusammenfassung, PASSED-Ring und Laufwerksinformationen", "pdfPreviewCaption": "Erste Seite: Zusammenfassung, PASSED-Ring und vollständige Laufwerksinformationen. Das Beispiel-PDF enthält SSD-Verschleiß, alle SMART-Attribute und den Testverlauf.", "pdfDownloadLabel": "Beispiel-SMART-Bericht herunterladen (PDF)", - "pdfSectionsIntro": "Der Bericht hat sechs Hauptabschnitte:", + "pdfSectionsIntro": "Der Bericht enthält diese Hauptabschnitte:", "pdfSections": [ "Zusammenfassung — PASSED/FAILED, verständliche Zustandsbewertung — in Ordnung, Verschleiß oder Ausfall — und vier Angaben: Berichtszeit, letzter Testtyp, Ergebnis und geprüfte Attribute.", "Laufwerksinformationen — Modell, Seriennummer, Kapazität, Typ HDD/SSD/NVMe, Familie, Bauform, Schnittstelle (SATA 3.3 · 6.0 Gb/s, …), TRIM, Temperatur und optimale Schwelle, Betriebsstunden, Einschaltzyklen, SMART, ausstehende/neu zugewiesene Sektoren und CRC-Fehler.", @@ -127,7 +127,7 @@ "historyImageCaption": "SMART-Testverlauf des Laufwerks. Jede Zeile zeigt Typ, Zeit, Alter, Markierung des neuesten Tests sowie Download der smartctl-Ausgabe und Löschen.", "historyIntro": "Aufbewahrte abgeschlossene kurze und erweiterte Tests des Laufwerks. Jeder Eintrag enthält die ursprüngliche smartctl-Ausgabe und die von Monitor für das Dashboard ausgewerteten Felder. Aktionen je Zeile:", "historyItems": [ - "Herunterladen — speichert den JSON-Snapshot mit den vom Bericht verwendeten smartctl -a-Daten. Hilfreich, wenn der Herstellersupport die ursprünglichen Diagnosefelder benötigt.", + "Herunterladen — speichert den JSON-Snapshot dieses Tests (Ausgabe von smartctl -a --json oder bei NVMe nvme smart-log, wenn smartctl fehlschlägt). Hilfreich, wenn der Herstellersupport die ursprünglichen Diagnosefelder benötigt.", "Löschen — entfernt einen Test manuell aus dem Verlauf. Die Aufbewahrung im Zeitplan (letzte 5 / 10 / 20) löscht automatisch die ältesten." ], "scheduleTitle": "Registerkarte 4 — Zeitplan", diff --git a/web/messages/de/docs/monitor/dashboard/vms-lxcs.json b/web/messages/de/docs/monitor/dashboard/vms-lxcs.json index 70551ce1..53ab3b16 100644 --- a/web/messages/de/docs/monitor/dashboard/vms-lxcs.json +++ b/web/messages/de/docs/monitor/dashboard/vms-lxcs.json @@ -1,16 +1,16 @@ { "meta": { "title": "ProxMenux Monitor — Dashboard: VMs und LXCs | ProxMenux-Dokumentation", - "description": "Inventar aller Gäste mit CPU, Arbeitsspeicher und Datenträgern in Echtzeit. Die Details zeigen Konfiguration, Ressourcen, Sicherungen, aktuelle Proxmox-Protokollergebnisse, Notizen und Starten / Herunterfahren / Neustart / Stopp." + "description": "Die Registerkarte VMs und LXCs listet alle Gäste des Hosts mit CPU-, Arbeitsspeicher- und Datenträgernutzung in Echtzeit. Die Details je Gast zeigen Konfiguration, Ressourcen, Sicherungen, das Konsolenprotokoll von OCI-Containern, Notizen und die Steuerung Starten / Herunterfahren / Neustart / Stopp erzwingen." }, "header": { "title": "Dashboard: VMs und LXCs", - "description": "Vollständiges Gastinventar des Knotens: vier Kennzahlen oben, eine sortierbare VM-/LXC-Liste darunter und Gastdetails mit Konfiguration, Ressourcen, Sicherungen, Protokollen sowie Starten/Herunterfahren/Neustart/Stopp.", + "description": "Vollständiges Gastinventar des Knotens: vier Kennzahlen oben, eine sortierbare Liste aller VMs und LXCs darunter und Gastdetails mit Konfiguration, Ressourcen, Sicherungen, dem Konsolenprotokoll von OCI-Containern sowie den vier Lebenszyklus-Steuerungen (Starten / Herunterfahren / Neustart / Stopp erzwingen).", "section": "ProxMenux Monitor · Übersicht" }, "intro": { "title": "Steuerung der Gäste", - "body": "Hier steuern Sie den Lebenszyklus der Gäste. Aktionen laufen nach ausdrücklicher Bestätigung über POST /api/vms/<vmid>/control und aktualisieren die Gastzeile. Erzwungenes Ausschalten erfordert die eigene Schaltfläche Stopp erzwingen." + "body": "Hier steuern Sie den Lebenszyklus der Gäste. Lebenszyklusaktionen laufen über POST /api/vms/<vmid>/control; bei Neustart und Stopp erzwingen geben Sie zur Bestätigung die VMID ein, und die Antwort wird in der Gastzeile angezeigt. Erzwungenes Ausschalten erfordert die eigene Schaltfläche Stopp erzwingen." }, "topRow": { "heading": "Obere Reihe: vier Stat-Karten", @@ -186,9 +186,9 @@ "source": "PVE RRD-Daten (pvesh get /nodes/<node>/qemu/<id>/rrddata) werden zu einer chartfreundlichen Form verdichtet." }, { - "section": "Aktuelle Proxmox-Protokollergebnisse", - "endpoint": "/api/vms//logs", - "source": "pvesh get /nodes/<node>/<qemu|lxc>/<vmid>/log --start 0 --limit 1000. Bei Befehlsfehlern wird eine leere Liste zurückgegeben; dies sind keine vollständigen Systemprotokolle aus dem Gast." + "section": "OCI-Konsolenprotokoll (Registerkarte Logs)", + "endpoint": "/api/lxc//console-log", + "source": "Konsolenausgabe des Hauptprozesses des Images, gelesen aus /var/log/proxmenux/oci/<vmid>.console.log auf dem Host. Nur für OCI-Container angezeigt." }, { "section": "Backups für Gäste verfügbar", diff --git a/web/messages/de/docs/monitor/health-monitor.json b/web/messages/de/docs/monitor/health-monitor.json index f3ddf6d6..6f3d16d5 100644 --- a/web/messages/de/docs/monitor/health-monitor.json +++ b/web/messages/de/docs/monitor/health-monitor.json @@ -68,7 +68,7 @@ { "category": "Speicher", "checks": "Proxmox-Speicher, Root-Dateisystem", - "events": "Konfigurierte Belegungsschwellen auf Root oder anderen überwachten Dateisystemen überschritten (standardmäßig 85% Warnung / 95% kritisch); NFS-Freigabe offline; CIFS-Anmeldung fehlgeschlagen; LVM-thin-Pool voll." + "events": "Konfigurierte Belegungsschwellen auf Root oder anderen überwachten Dateisystemen überschritten (standardmäßig 85% Warnung / 95% kritisch); nicht verfügbare PVE-Speicher; hängende oder unerwartet schreibgeschützte NFS-/CIFS-Einhängungen; LVM-thin- und andere Pool-Speicher, die dieselben Schwellen überschreiten." }, { "category": "Platten und SMART", @@ -98,7 +98,7 @@ { "category": "Systemaktualisierungen", "checks": "Ausstehende Updates, Sicherheitsupdates, Kernel / PVE-Version, Systemalter", - "events": "Ausstehende Sicherheits- oder Kernelupdates; lange nicht aktualisiertes System. Bei verfügbaren Updates erscheint in der Übersicht Jetzt aktualisieren. Die Schaltfläche startet den vollständigen ProxMenux-Updateablauf. Beim Schließen wird der Zustand mit ?refresh=1 neu abgefragt, damit die Anzeige ohne Warten auf den nächsten Zyklus aktualisiert wird." + "events": "Ausstehende Sicherheits- oder Kernelupdates; lange nicht aktualisiertes System. Die Kategorie Updates im Dialog zum Gesundheitszustand zeigt bei ausstehenden Updates die Schaltfläche Jetzt aktualisieren. Sie startet den vollständigen ProxMenux-Updateablauf direkt im Dialog; beim Schließen wird der Zustand mit ?refresh=1 neu abgefragt, damit die Anzeige den neuen Zustand ohne Warten auf den nächsten Zyklus widerspiegelt." }, { "category": "Sicherheit & Zertifikate", @@ -158,7 +158,7 @@ }, "dismiss": { "heading": "Warnungen bestätigen und die Unterdrückungsdauer", - "intro": "Manche Ereignisse bleiben lange bestehen: Systemupdates: Updates verfügbar gilt bis zur Aktualisierung des Hosts. Dafür ist nicht alle fünf Minuten eine neue Nachricht nötig. Jetzt aktualisieren in der Übersicht behebt diesen Fall direkt. Für andere Fälle oder aufgeschobene Updates bietet die Zustandsüberwachung zwei verbundene Möglichkeiten zum Unterdrücken von Meldungen:", + "intro": "Manche Ereignisse bleiben naturgemäß lange bestehen: Systemupdates: Updates verfügbar gilt bis zur Aktualisierung des Hosts, und eine Nachricht alle fünf Minuten über eine ganze Woche ist nicht erwünscht. Die Schaltfläche Jetzt aktualisieren in der Kategorie Updates des Dialogs zum Gesundheitszustand behebt genau diesen Fall direkt. Für andere Fälle oder aufgeschobene Updates bietet die Zustandsüberwachung zudem zwei verbundene Möglichkeiten zum Unterdrücken von Meldungen:", "step1": "Einzelnes Ereignis bestätigen im Dialog. Das Menü bietet 24 Stunden, 7 Tage oder Dauerhaft, unabhängig vom Kategoriestandard. Die Auswahl sendet POST /api/health/acknowledge mit error_key und gewählten suppression_hours (-1 für dauerhaft). Das Ereignis wechselt mit Zeitstempel acknowledged_at in die unterdrückte Liste.", "dropdownImageAlt": "Menü zum Unterdrücken einer Warnung: 24 Stunden, 7 Tage oder dauerhaft", "dropdownImageCaption": "Die gewählte Dauer gilt nur für diese Warnung; ohne Einzelauswahl greift der Kategoriestandard. Dauerhafte Bestätigungen erhalten die bernsteinfarbene Markierung Dauerhaft und lösen normalerweise nicht erneut aus. Eine Ausnahme ist die unten beschriebene kritische CPU-Temperatur.", @@ -187,7 +187,7 @@ }, { "finding": "ZFS pool DEGRADED / FAULTED", - "why": "ZFS-Poolbelegungsprüfungen erlauben ausdrücklich die Bestätigung. Andere Poolbefunde folgen ihrem eigenen Kennzeichen. Bestätigen repariert keinen beeinträchtigten oder ausgefallenen Pool." + "why": "Befunde zum ZFS-Poolzustand (DEGRADED, FAULTED, UNAVAIL) erlauben ausdrücklich die Bestätigung, ebenso Prüfungen der Poolbelegung. Bestätigen repariert keinen beeinträchtigten oder ausgefallenen Pool." }, { "finding": "Festplatten-I/O-Fehler mit SMART FAILED", @@ -289,7 +289,7 @@ }, "rest": { "heading": "REST-Endpunkte", - "intro": "Die Dialogaktionen sind per API für Skripte, Dashboards und Chatbots verfügbar. Bei aktiver Monitor-Authentifizierung benötigen Aufrufe ein gültiges Bearer-Token aus Anmeldung oder API-Tokenverwaltung. Änderungen wie Bestätigen, Speichern oder Bereinigen verwaister Fehler erfordern full_admin; read_only erhält 403. Bei deaktivierter oder abgelehnter Authentifizierung erlauben diese Prüfungen Zugriff ohne Token.", + "intro": "Die Dialogaktionen sind auch per API für Skripte, eigene Dashboards und Chatbots verfügbar. Aufrufe benötigen ein gültiges Bearer-Token aus Anmeldung oder API-Tokenverwaltung. Änderungen wie das Bestätigen von Warnungen, das Speichern von Unterdrückungseinstellungen oder das Bereinigen verwaister Fehler erfordern den Bereich full_admin; read_only erhält 403.", "headerEndpoint": "Endpunkt", "headerMethod": "Methode", "headerUse": "Verwendung", @@ -297,7 +297,7 @@ { "endpoint": "/api/health", "method": "GET", - "use": "Leichte Zustandsabfrage mit JSON-Feldern status, timestamp und version. Für Schlüsselwortprüfungen in Uptime Kuma geeignet; bei aktiver Monitor-Authentifizierung muss der Client einen Bearer-Header senden." + "use": "Leichte Zustandsabfrage mit JSON-Feldern status, timestamp und version. Für Schlüsselwortprüfungen in Uptime Kuma geeignet; der Client muss einen Bearer-Header senden." }, { "endpoint": "/api/health/status", diff --git a/web/messages/de/docs/monitor/index.json b/web/messages/de/docs/monitor/index.json index 883aa0c9..4039ab4a 100644 --- a/web/messages/de/docs/monitor/index.json +++ b/web/messages/de/docs/monitor/index.json @@ -52,7 +52,7 @@ }, { "name": "Terminal", - "description": "Browser-Shell für den Host und unterstützte VM-/CT-Konsolen über xterm.js und WebSockets. Es gilt der konfigurierte Authentifizierungsmodus: Bei deaktivierter oder abgelehnter Anmeldung können erreichbare Clients Sitzungen ohne Login öffnen. Das bedeutet keine Protokollierung jedes Befehls." + "description": "Browser-Shell für den Host und unterstützte VM-/CT-Konsolen über xterm.js und WebSockets. Sitzungen werden nicht pro Befehl protokolliert." }, { "name": "Sicherheit", @@ -114,7 +114,7 @@ "heading": "REST API und Integrationen", "intro": "REST-Endpunkte liefern Überwachungsdaten als JSON über HTTP/HTTPS für Homepage, Home Assistant, Uptime Kuma und eigene Skripte. Grafana kann den separaten Prometheus-Textexporter unter /api/prometheus nutzen. Anfragen sind mit curl möglich.", "tokens": "Langlebige API-Tokens (365 Tage) werden aus Einstellungen → API Zugriffstokens oder über POST /api/auth/generate-api-token generiert.", - "bearer": "Token werden als Authorization: Bearer … gesendet. Der öffentliche Endpunkt /api/health eignet sich für Verfügbarkeitsprüfungen ohne Zugangsdaten. Unter /api/auth/* liegen öffentliche Setup-/Login-/Statusrouten und geschützte Konto-/Tokenverwaltung; nicht alle sind anonym.", + "bearer": "Token werden als Authorization: Bearer … gesendet. Auch /api/health erwartet den Bearer-Header, daher benötigen Verfügbarkeitsprüfungen ein read_only-Token. Unter /api/auth/* liegen sowohl öffentliche Setup-/Login-/Statusrouten als auch geschützte Routen der Konto-/Tokenverwaltung; nicht alle sind anonym.", "catalog": "Der vollständige Endpunktkatalog, Anleitungen zur Token-Rotation und Best Practices für die Sicherheit finden Sie in der API-Referenz; Vorgefertigte Beispiele für Homepage, Home Assistant, Grafana, Uptime Kuma und ein generisches cURL-Muster finden Sie in Integrationen." }, "serviceControl": { diff --git a/web/messages/de/docs/monitor/integrations.json b/web/messages/de/docs/monitor/integrations.json index 526758fd..72610b7c 100644 --- a/web/messages/de/docs/monitor/integrations.json +++ b/web/messages/de/docs/monitor/integrations.json @@ -220,7 +220,7 @@ "heading": "n8n, Zapier und eigene Skripte", "intro": "Workflow-Werkzeuge und Skripte können mit POST an /api/notifications/send Meldungen senden, etwa bei CI-Fehlern oder langen Cronjobs. Der direkte Versand umgeht Ereigniswarteschlange und Fingerprint-Sperrzeit. Kanalformatierung, optionale KI und Versand bleiben erhalten. Erforderliche Duplikatkontrolle übernimmt der Aufrufer.", "n8nBody": "Nutzen Sie in n8n einen HTTP Request-Knoten mit POST, obiger URL und demselben JSON wie curl. Wählen Sie generische Header-Auth-Zugangsdaten mit Authorization und Bearer YOUR_API_TOKEN; ersetzen Sie den Platzhalter. Ein Zeitplan, Webhook oder vorheriger Knoten löst die Anfrage aus.", - "severityBody": "Schweregrade sind INFO, WARNING oder CRITICAL in Großbuchstaben. data liefert Kontext. Die KI nutzt gerenderten Titel und Text sowie unterstützte Ergänzungen; beliebige Felder erscheinen nicht garantiert in Prompt oder Ausgabe. Siehe Benachrichtigungen → Ereigniskatalog." + "severityBody": "Schweregrade sind INFO, WARNING oder CRITICAL in Großbuchstaben. Das Objekt data liefert Ereigniskontext und Vorlagenfelder. An diesem Endpunkt erhält die KI-Umschreibung nur Titel und Text; Felder in data werden nicht an den Anbieter gesendet. Zur Bedeutung der Ereignisse siehe Benachrichtigungen → Ereigniskatalog." }, "pveWebhook": { "heading": "Nativer Proxmox-VE-Webhook (eingehend)", diff --git a/web/messages/de/docs/monitor/notifications.json b/web/messages/de/docs/monitor/notifications.json index 27b9f274..075809d1 100644 --- a/web/messages/de/docs/monitor/notifications.json +++ b/web/messages/de/docs/monitor/notifications.json @@ -171,7 +171,7 @@ "Öffnen Sie account.microsoft.com/security und ermöglichen Sie eine zweistufige Verifizierung.", "Falls angeboten, unter Erweiterte Sicherheitsoptionen → App-Passwörter die Option Neues App-Passwort erstellen wählen. Das garantiert keine Unterstützung für SMTP mit Passwort.", "Falls ein App-Passwort erzeugt wird, kopieren und die SMTP-Zulässigkeit prüfen.", - "Nur bei erlaubtem Passwort-SMTP die genehmigten Werte eintragen: Host smtp.office365.com für Exchange Online, Port 587, TLS-Modus STARTTLS, Benutzername die Mailadresse und Passwort die erlaubte SMTP-Zugangsinformation. Persönliches Outlook.com hat andere Einstellungen und Anforderungen." + "Nur wenn Ihr Anbieter Passwort-SMTP erlaubt, die genehmigten Werte eintragen: SMTP-Host smtp.office365.com für Exchange Online, Port 587, TLS-Modus STARTTLS, Benutzername Ihre Postfachadresse und Passwort die erlaubte SMTP-Zugangsinformation. Persönliches Outlook.com hat andere Einstellungen und Authentifizierungsanforderungen; gehen Sie nicht davon aus, dass diese Zugangsdaten funktionieren." ], "relayTitle": "Selbst gehostetes SMTP-Relay", "relayBody": "Den Monitor auf ein eigenes SMTP-Relay wie Postfix richten. Das Relay authentifiziert sich beim Anbieter. Authentifizierung und TLS des Monitors müssen zum Relay passen; ein lokales Relay deaktiviert die Verschlüsselung nicht automatisch." @@ -266,7 +266,7 @@ "howItems": [ "Je Kanal aktivieren. Standardmäßig aus. Nur gewünschte Kanäle zusammenfassen; andere weiter direkt beliefern.", "Zustellzeit in lokaler Zeitzone, standardmäßig 09:00. Der Versand erfolgt etwa innerhalb von 60 s um diese Minute.", - "Enthalten: geeignete allgemeine Ereignisse mit Schwere INFO, etwa App-Update verfügbar, Tailscale-Update verfügbar, ProxMenux-Optimierungsupdate verfügbar, APT-Sicherheitsupdates ausstehend oder Meldung zur Versandbegrenzung. Sicherungsergebnisse und ausgenommene Aktionen bleiben direkt.", + "In der Zusammenfassung enthalten: geeignete allgemeine Ereignisse mit Schwere INFO. Beispiele sind App-Update verfügbar, Tailscale-Update verfügbar, ProxMenux-Optimierungsupdate verfügbar und APT-Sicherheitsupdates ausstehend. Sicherungsergebnisse und andere ausgenommene Aktionsereignisse bleiben direkt.", "Was ist nie verzögert:", "Dauerhafte Speicherung. Ausstehende Ereignisse bleiben bis zur Zustellzeit in digest_pending in SQLite und überstehen Neustarts.", "Leere Tage sind still. Wenn nichts INFO-Level passiert ist, wird kein Digest gesendet - der Kanal bleibt ruhig, anstatt eine Nachricht \"keine Ereignisse zu melden\" zu erhalten." @@ -301,7 +301,7 @@ { "stage": "Wartezeit für Wiederholungen", "what": "Nach erfolgreichem Versand werden Wiederholungen unterdrückt; der Zustand steht in notification_last_sent. Basiswerte für CRITICAL, WARNING, INFO, resources und updates: 86400 s. Ausnahmen: 5 s für VM/CT-Aktionen und Host-Neustart/Abschaltung, 10 s für Sicherungs-/Replikationsergebnisse, 1800–3600 s für mehrere Gesundheitskategorien. Explizite Ereignis-/Gruppeneinstellungen haben Vorrang.", - "tunable": "Ja — ausdrückliche Konfigurationswerte je Ereignis oder Gruppe überschreiben die Vorgaben." + "tunable": "Nur über die Einstellungs-API — ein Schlüssel cooldown.<event_type> oder cooldown.<group> überschreibt die Vorgaben; in der Oberfläche gibt es dafür kein Steuerelement." }, { "stage": "Zusammenfassung von Ereignisspitzen", @@ -330,7 +330,7 @@ "Methode und URL. POST http://127.0.0.1:8008/api/notifications/webhook ohne Monitor-HTTPS; mit HTTPS der gesonderte lokale HTTP-Port 8009. Beide bleiben auf demselben Host.", "Nachrichtenvorlage. JSON mit nativen Handlebars-Helfern von PVE, in der Konfiguration als Base64 gespeichert. Dekodiert ergibt es:", "Matcher. Ein Begleiter matcher: proxmenux-matcher Block mit mode all, so dass jede PVE-Benachrichtigung das Ziel erreicht.", - "Private Konfiguration. Einrichtung schreibt webhook: proxmenux-webhook in /etc/pve/priv/notifications.cfg, einschließlich Base64-kodiertem gemeinsamem Geheimnis. Das öffentliche Ziel nutzt es für X-Webhook-Secret. Der Block ist nicht leer." + "Private Konfiguration. Die Einrichtung schreibt den passenden Block webhook: proxmenux-webhook in /etc/pve/priv/notifications.cfg mit einem Base64-kodierten secret-Eintrag namens X-Webhook-Secret. Der öffentliche Zielblock enthält nur Body-Vorlage, Methode und URL. Der private Block ist kein leerer Platzhalter." ], "securityTitle": "Wie der Empfänger gesichert ist", "securityIntro": "Der webhook-Empfänger bei POST /api/notifications/webhook verwendet verschiedene Sicherheitsschichten, je nachdem, woher die Anforderung stammt:", diff --git a/web/messages/en/docs/monitor/access-auth.json b/web/messages/en/docs/monitor/access-auth.json index 8cef948e..62606548 100644 --- a/web/messages/en/docs/monitor/access-auth.json +++ b/web/messages/en/docs/monitor/access-auth.json @@ -19,7 +19,7 @@ "reaching": { "heading": "Reaching the dashboard", "intro": "ProxMenux Monitor binds to 0.0.0.0:8008. There are three common ways to reach it:", - "outro": "Direct access matches the default systemd unit. Reverse-proxy and Secure Gateway access are described below. Trust for client IPs in X-Forwarded-For requires PROXMENUX_TRUST_PROXY=1 and a proxy you control. The presence of X-Forwarded-Proto or X-Forwarded-Host alone does not enable proxy trust; the frontend builds API URLs from the browser’s origin." + "outro": "Direct access matches the default systemd unit. Reverse-proxy and Secure Gateway access are described below. Trust for client IPs in X-Forwarded-For requires PROXMENUX_TRUST_PROXY=1 and a proxy you control. The presence of X-Forwarded-Proto or X-Forwarded-Host alone does not enable proxy trust. On ports 80/443 the frontend uses relative /api/* URLs; on any other port it calls port 8008 on the same host name." }, "firstLaunch": { "heading": "First-launch flow", @@ -117,8 +117,8 @@ "loginImageCaption": "Once authentication is configured, every visit to the dashboard starts here. With 2FA enabled, the screen asks for the 6-digit code in a second step after the password is accepted.", "loginFlowTitle": "Login flow", "twofaIntro": "With 2FA enabled, the same call returns requires_totp: true first. Re-issue with the 6-digit code:", - "publicTitle": "Public access and protected probes", - "publicIntro": "Login and authentication status are public. Initial setup is available while no username and password are stored, including after declining protection. System-data probes require authentication when protection is enabled:", + "publicTitle": "Public endpoints (no token)", + "publicIntro": "Login, authentication status, initial setup and the lightweight /api/system-info endpoint are public:", "publicItems": [ "/api/auth/login and /api/auth/status are public. /api/auth/setup creates the initial account and rejects attempts to overwrite existing credentials.", "/api/system-info is a public lightweight system-information endpoint, including health.status. It is not decorated with the token requirement. /api/auth/status is another public endpoint suitable for a reachability check." @@ -146,7 +146,7 @@ }, { "asset": "2FA TOTP secret", - "algorithm": "Standard TOTP (RFC 6238), with a base32-encoded secret. The eight recovery codes are single-use and stored as SHA-256 hashes.", + "algorithm": "Standard TOTP (RFC 6238), with a base32-encoded secret. The eight backup codes are single-use and stored as SHA-256 hashes.", "where": "auth.json → totp_secret + backup_codes[]" }, { @@ -243,17 +243,17 @@ } ], "backupTitle": "What \"backup\" really matters for", - "backupBody": "If you lose the authenticator device, use a saved recovery code or restore the app from a backup you configured beforehand. Cloud sync and local exports differ by app; check that your chosen method actually restores the TOTP secrets. Root access to the host also allows recovery, as explained below. Keep a separate, secure backup.", + "backupBody": "If you lose the authenticator device, use a saved backup code or restore the app from a backup you configured beforehand. Cloud sync and local exports differ by app; check that your chosen method actually restores the TOTP secrets. Root access to the host also allows recovery, as explained below. Keep a separate, secure backup.", "setupTitle": "Step-by-step setup from the dashboard", "setupImageAlt": "2FA setup screen with QR code and backup codes", - "setupImageCaption": "The 2FA setup dialog shows a QR code, a Base32 secret for manual entry, and eight one-time recovery codes. Copy the codes before closing the dialog; they are not displayed again.", + "setupImageCaption": "The 2FA setup dialog shows a QR code, a Base32 secret for manual entry and, after verification, eight one-time backup codes. Copy the codes before closing the dialog; they are not displayed again.", "setupSteps": [ "Install the authenticator app on your phone (or open your password manager). One of the apps from the table above. You only need to do this once — the same app will hold codes for every service you protect.", "Log into the dashboard with your username and password.", - "Open the Security tab in the dashboard sidebar, then click Enable 2FA. A dialog shows a QR code, the Base32 secret and eight recovery codes.", + "Open the Security tab in the dashboard sidebar, then click Enable 2FA and Start setup. The dialog shows a QR code and the manual key; the eight backup codes appear after the code is verified.", "Add the entry to the authenticator app:", - "Save the recovery codes. Store all eight safely in a password manager, encrypted note or secure printed copy. Each works once if your authenticator is unavailable.", "Confirm by typing the current 6-digit code from the app into the \"Verification code\" field of the setup dialog and submit. Codes refresh every 30 seconds, so if it expires while you're typing, just enter the next one.", + "Save the backup codes. After verification, store all eight safely in a password manager, encrypted note or secure printed copy. Each works once if your authenticator is unavailable.", "Done. 2FA is now active. Next time you log in, the dashboard asks for the password first; once it's accepted it asks for the current 6-digit code." ], "setupStep4Sub": [ @@ -261,17 +261,17 @@ "Manual fallback (when scanning isn't possible — e.g. setting up on the same phone you opened the dashboard with): tap Add account → Enter setup key. Type any name (e.g. Proxmox Monitor), paste the Base32 string from the dialog, leave Type as Time-based, save." ], "testTitle": "Test before logging out", - "testBody": "Keep your current session open and test a new login in a private window immediately after setup. If the code is rejected, check the server and phone clocks before logging out of the working session. If access is already lost, use a recovery code or edit auth.json from the host shell.", + "testBody": "Keep your current session open and test a new login in a private window immediately after setup. If the code is rejected, check the server and phone clocks before logging out of the working session. If access is already lost, use a backup code or edit auth.json from the host shell.", "lostTitle": "Lost authenticator", "lostIntro": "Three escape hatches, in order of how disruptive they are:", "lostItems": [ - "Use a recovery code. Enter one of the eight saved codes in the TOTP field. It works once; unused codes remain valid. After logging in, set up 2FA again from Settings to obtain eight new codes.", + "Use a backup code. Enter one of the eight saved codes in the TOTP field. It works once; unused codes remain valid. After logging in, open Security, choose Disable 2FA and then Enable 2FA to obtain eight new codes.", "Restore the authenticator from cloud / backup. If your app has a cloud sync (Google, Microsoft, Authy, Apple Passwords via iCloud Keychain, Ente, 2FAS) install it on a new device, sign in, and the entries reappear. If your app uses an encrypted export file (Aegis, Raivo, FreeOTP+), install the app on the new device and import the file.", "Disable 2FA from the host shell. When the previous options aren't available, edit /root/.config/proxmenux-monitor/auth.json on the Proxmox host (you need root SSH or console access), set totp_enabled to false, save, and restart the service:" ], "lostShellOutro": "You can log in with username + password only, then re-enable 2FA from Settings.", "disableTitle": "Disable 2FA", - "disableBody": "Open Security and choose Disable 2FA. POST /api/auth/totp/disable requires the current password and a valid TOTP or recovery code. It removes the TOTP secret and recovery codes. Remove the old entry from your authenticator app too.", + "disableBody": "Open Security and choose Disable 2FA. POST /api/auth/totp/disable requires the current password and a valid TOTP or backup code. It removes the TOTP secret and backup codes. Remove the old entry from your authenticator app too.", "rejectedTitle": "The 6-digit code is always rejected", "rejectedIntro": "TOTP is time-based — server clock and phone clock must agree to within ~30 s. Two checks:", "rejectedItems": [ diff --git a/web/messages/en/docs/monitor/ai-assistant.json b/web/messages/en/docs/monitor/ai-assistant.json index f0dcbe59..93b8368b 100644 --- a/web/messages/en/docs/monitor/ai-assistant.json +++ b/web/messages/en/docs/monitor/ai-assistant.json @@ -14,7 +14,7 @@ }, "intro": { "title": "Off by default, single switch to enable", - "body": "AI rewriting is off by default. Enable it in Settings → Notifications → Advanced: AI Enhancement. If enrichment or rewriting fails, the dispatcher sends the original template. Each rewrite has a 25-second dispatch timeout; reaching it falls back to the template instead of waiting indefinitely." + "body": "AI rewriting is off by default. Enable it in Settings → Notifications → Advanced: AI Enhancement. If enrichment or rewriting fails, the dispatcher sends the original template. Rewrites in the event dispatch queue have a 25-second timeout; reaching it sends the template instead of waiting." }, "howItWorks": { "heading": "How it works", @@ -109,7 +109,7 @@ ], "customNote": "Custom prompt mode uses a fixed cap of 500 output tokens regardless of detail level — the custom prompt is in your control and the cap protects against runaway responses.", "sizingTitle": "Practical sizing", - "sizingBody": "Estimate usage as rewritten events × AI-enabled channels × input-plus-output tokens per call. For example, 50 events × one channel × (500 input + 300 output tokens) is 40,000 tokens per day, not a few thousand. Actual usage and charges depend on model, context, caching and provider limits. The Detail level per channel section shows how to use brief for chat instead of standard, while keeping detailed email reports." + "sizingBody": "Estimate usage as rewritten events × AI-enabled channels × input-plus-output tokens per call. For example, 50 events × one channel × (2,000 input + 300 output tokens) is about 115,000 tokens per day, since the default system prompt alone is roughly 1,500 tokens. Actual usage and charges depend on model, context, caching and provider limits. The Detail level per channel section shows how to use brief for chat instead of standard, while keeping detailed email reports." }, "providers": { "heading": "AI providers", @@ -142,7 +142,7 @@ "items": [ "API key: console.anthropic.com/settings/keys", "Examples from the bundled model list: claude-haiku-4-5-20251001, claude-sonnet-4-6, claude-opus-4-6.", - "Bundled recommendation: claude-haiku-4-5-20251001. This exact snapshot is the configured recommendation; the older Claude 3.5 entries shown in earlier documentation are no longer in the bundled list." + "Bundled recommendation: claude-haiku-4-5-20251001, a pinned snapshot rather than a moving alias." ] }, "gemini": { diff --git a/web/messages/en/docs/monitor/api-reference.json b/web/messages/en/docs/monitor/api-reference.json index bad1193f..eb5e3ff4 100644 --- a/web/messages/en/docs/monitor/api-reference.json +++ b/web/messages/en/docs/monitor/api-reference.json @@ -162,7 +162,7 @@ { "endpoint": "/api/vms//backup", "method": "POST", - "use": "Create a vzdump backup of a VM or LXC. Body fields, all optional unless the defaults do not match the storage layout: storage (a PVE storage), mode (snapshot, suspend or stop), compress (zstd, lzo, gzip or none), protected (true or false), notes, notification (auto, always, failure or never) and pbs_change_detection (default, legacy or data). Returns the PVE task UPID." + "use": "Create a vzdump backup of a VM or LXC. Body fields, all optional unless the defaults do not match the storage layout: storage (a PVE storage), mode (snapshot, suspend or stop), compress (zstd, lzo, gzip or none), protected (true or false), notes and pbs_change_detection (default, legacy or data). Returns the PVE task UPID." }, { "endpoint": "/api/vms//backups", @@ -286,7 +286,7 @@ { "endpoint": "/api/storage/smart//test", "method": "POST", - "use": "Start a SMART self-test. Body schema: '{'\"type\":\"short\"|\"long\"'}'." + "use": "Start a SMART self-test. Body schema: '{'\"test_type\":\"short\"|\"long\"'}'." }, { "endpoint": "/api/storage/smart/schedules", diff --git a/web/messages/en/docs/monitor/architecture.json b/web/messages/en/docs/monitor/architecture.json index 8cf9181d..d8415fa6 100644 --- a/web/messages/en/docs/monitor/architecture.json +++ b/web/messages/en/docs/monitor/architecture.json @@ -73,13 +73,13 @@ "intro": "The AppImage is a self-mounting filesystem. AppRun at the root sets up the environment and execs flask_server.py:", "consequencesIntro": "Two consequences of this layout:", "consequences": [ - "Bundled Python environment. The interpreter and Python packages are shipped inside the AppImage, avoiding installation into the host’s system Python environment. The application still uses host kernel interfaces and external host tools.", + "Bundled Python packages. Python packages ship inside the AppImage and run on the host's own Python 3.11 (PVE 8) or 3.13 (PVE 9) interpreter, without installing anything into the host's system Python. The application still uses host kernel interfaces and external host tools.", "Hardware clients are bundled too. ipmitool, lm-sensors and upsc are included. Readings still depend on supported hardware, access to sensors and, for UPS data, a configured NUT server." ] }, "flask": { "heading": "Flask app structure", - "intro": "flask_server.py creates one Flask(__name__) instance with restricted CORS origins, registers nine blueprints directly and initializes terminal routes. The table highlights the main modules; audit, VM-backup and PBS blueprints are also registered. PVE-specific prewarmers run only on PVE hosts.", + "intro": "flask_server.py creates one Flask(__name__) instance with restricted CORS origins, registers ten blueprints directly and initializes terminal routes. The table highlights the main modules; PBS, Monitor links, audit and VM-backup blueprints are also registered. PVE-specific prewarmers run only on PVE hosts.", "headerBlueprint": "Blueprint / module", "headerPrefix": "Routes prefix", "headerOwns": "Owns", @@ -242,10 +242,10 @@ "Updates: pending package upgrades and security patches.", "Logs: persistent / spike / cascade pattern detection in the system journal.", "Memory: OOM killer activity, sustained high pressure.", - "Temperature: CPU and disk readings checked against monitoring thresholds; available sensors depend on the hardware.", + "CPU: usage and CPU temperature checked against the configurable thresholds; available sensors depend on the hardware.", "Security: authentication failures, ban events, fail2ban jail status." ], - "afterIntro": "Findings use a stable error_key, category and severity. Existing records in errors are updated with last_seen and occurrence counts rather than duplicated. Notification delivery also has its own fingerprint and cooldown rules.", + "afterIntro": "Findings use a stable error_key, category and severity. Existing records in errors are updated in place (last_seen, severity, reason) rather than duplicated. Notification delivery also has its own fingerprint and cooldown rules.", "cycleEnd": "Cleanup can auto-resolve stale errors using category Suppression Duration values and state-based rules, remove orphan records for resources that were removed, and prune events older than 30 days. The categories and dashboard are described in Dashboard → Health Monitor." }, "notifications": { @@ -264,9 +264,9 @@ "intro": "The Terminal tab in the dashboard is a thin xterm.js client wired to a server-side PTY through a WebSocket. Two transport modes:", "items": [ "HTTP mode (default): the built-in Flask server with flask-sock handles WebSocket upgrade requests.", - "HTTPS / WSS mode: the TLS server uses gevent.pywsgi.WSGIServer with geventwebsocket.handler.WebSocketHandler for WebSocket connections over TLS." + "HTTPS / WSS mode: the TLS server uses gevent.pywsgi.WSGIServer with its default handler; flask-sock handles WebSocket connections over TLS." ], - "outro": "Terminal child processes inherit User=root from the service. With authentication enabled, opening a WebSocket requires a short-lived, single-use ticket obtained from the authenticated terminal-ticket endpoint with administrative scope. When authentication is disabled or declined, the handshake follows that unauthenticated mode.", + "outro": "Terminal child processes inherit User=root from the service. Opening a WebSocket requires a short-lived, single-use ticket obtained from the authenticated terminal-ticket endpoint with administrative scope.", "proxyNote": "If you access the Monitor through a reverse proxy, make sure WebSocket forwarding is enabled (the Upgrade and Connection headers). Without it the terminal won't work." }, "proxy": { diff --git a/web/messages/en/docs/monitor/dashboard/network.json b/web/messages/en/docs/monitor/dashboard/network.json index 24757003..1bb47040 100644 --- a/web/messages/en/docs/monitor/dashboard/network.json +++ b/web/messages/en/docs/monitor/dashboard/network.json @@ -162,7 +162,7 @@ } ], "reportTitle": "Network Latency Report (PDF)", - "reportIntro": "Both modes have a Report button beside the target selector. It generates a PDF of the measurements that you can attach to a troubleshooting request to your ISP.", + "reportIntro": "Both modes have a Report button beside the target selector. It opens a printable report of the measurements; save it as PDF from the browser's print dialog and attach it to a troubleshooting request to your ISP.", "reportPreviewAlt": "First page of the Network Latency Report PDF — Executive Summary with the gauge, latency statistics, the latency graph and the threshold guide", "reportPreviewCaption": "The first page of the Network Latency Report contains the executive summary, gauge, main statistics, time-series latency graph and threshold guide. Page 2 onwards contains the per-sample table and methodology.", "downloadLabel": "Download sample Network Latency report (PDF)", diff --git a/web/messages/en/docs/monitor/dashboard/security.json b/web/messages/en/docs/monitor/dashboard/security.json index 1cedc7f2..36ac8340 100644 --- a/web/messages/en/docs/monitor/dashboard/security.json +++ b/web/messages/en/docs/monitor/dashboard/security.json @@ -136,7 +136,7 @@ "configCaption": "Editing the sshd jail — pick a stricter Max Retries for SSH if you only ever log in from your own subnet, or extend Ban Time for the public-facing dashboard.", "outro": "The full What it installs / how it's configured / how to uninstall walkthrough — including the manual install path, the SSH MaxAuthTries side effect, and the relationship with the proxmenux-auth.log journal — is in ProxMenux → Security → Fail2Ban.", "calloutTitle": "Without Fail2Ban, this mechanism does not block IPs", - "calloutBody": "ProxMenux Monitor checks Fail2Ban’s banned IPs at the application level before handling Flask requests. It queries fail2ban-client and caches the result for 30 seconds; it does not read a SQL bans table. Without Fail2Ban, failed logins are recorded in proxmenux-auth.log, but this mechanism does not actively block IPs." + "calloutBody": "ProxMenux Monitor checks the IPs banned in Fail2Ban's proxmenux jail at the application level before handling Flask requests, caching the result for 30 seconds. Without Fail2Ban, failed logins are recorded in proxmenux-auth.log and the login endpoint is limited to 5 attempts per IP every 5 minutes, but no IP is banned." }, "lynis": { "heading": "Lynis Security Audit", diff --git a/web/messages/en/docs/monitor/dashboard/settings.json b/web/messages/en/docs/monitor/dashboard/settings.json index d05425ec..66abb836 100644 --- a/web/messages/en/docs/monitor/dashboard/settings.json +++ b/web/messages/en/docs/monitor/dashboard/settings.json @@ -76,7 +76,7 @@ }, "thresholds": { "heading": "Health Monitor Thresholds", - "intro": "The previous card sets how long to stay quiet after a dismiss; this one sets the value at which an alert is raised. Most threshold-based checks have adjustable Warning and Critical values. The table below explains exceptions such as the combined swap rule and the current RAM detector.", + "intro": "The previous card sets how long to stay quiet after a dismiss; this one sets the value at which an alert is raised. Most threshold-based checks have adjustable Warning and Critical values. The table below explains exceptions such as the combined swap rule.", "whatForTitle": "What it is for", "whatForIntro": "Defaults that ship with ProxMenux are sane for the average Proxmox host, but every environment has its own envelope:", "whatForItems": [ @@ -85,7 +85,7 @@ "Choose drive-temperature thresholds using the drive’s specifications and observed operating conditions. Passive versus forced-air cooling alone does not determine a universally lower or higher safe limit.", "A heavily-virtualized host that pegs CPU during builds should not page on every 80 % spike, but must still alert on sustained pressure." ], - "whatForOutro": "Supported threshold changes take effect on the next scan. The Health Monitor reads /usr/local/share/proxmenux/health_thresholds.json each cycle without a restart. Selected widgets, including disk temperature, use these values; some capacity bars retain separate visual cutoffs. See the RAM row below for a current runtime exception.", + "whatForOutro": "Supported threshold changes take effect on the next scan. The Health Monitor reads /usr/local/share/proxmenux/health_thresholds.json each cycle without a restart. Selected widgets, including disk temperature, use these values; some capacity bars retain separate visual cutoffs.", "coloursTitle": "Status colours: how Warning and Critical render in the dashboard", "coloursIntro": "Widgets that use the configured Warning/Critical pair follow the three-state classification below. Some visual indicators, including the PVE storage capacity bars, use their own cutoffs; do not infer a Health Monitor alert solely from their colour.", "headerColour": "Colour", @@ -125,7 +125,7 @@ "section": "Memory", "warning": "85 %", "critical": "95 %", - "gates": "Host RAM pressure. The configurable Critical default shown here is 95 %, but the current detector uses a hard-coded 90 % sustained RAM rule; changing that setting does not currently change this runtime branch." + "gates": "Host RAM pressure." }, { "section": "Swap (critical only)", @@ -185,7 +185,7 @@ "section": "PVE storage", "warning": "85 %", "critical": "95 %", - "gates": "PVE-managed storages, including LVM, LVM-thin, ZFS-pool, RBD/Ceph and PBS. These are not all block-storage backends." + "gates": "Only PVE storages of type LVM, LVM-thin, ZFS-pool, RBD, CephFS and PBS. Directory, NFS and CIFS storages are covered by the host disk-space row." }, { "section": "ZFS pool", @@ -218,7 +218,7 @@ "toggleTitle": "Conditional notification toggle", "toggleBody": "The lxc_updates_available per-channel notification toggle in Notifications → Services only renders while detection is enabled. When you turn detection OFF, that row disappears from every channel's category list — but its stored preference is preserved in the DB, so re-enabling detection brings the toggle back at the value it had before.", "purgeTitle": "What gets purged when you disable detection", - "purgeBody": "Turning the switch OFF immediately removes every type=lxc entry from /usr/local/share/proxmenux/managed_installs.json. LXC update counts on the Hardware tab clear on the next dashboard refresh. Turning it back ON repopulates the registry on the next detection cycle, or sooner with a manual API refresh." + "purgeBody": "Turning the switch OFF immediately removes every type=lxc entry from /usr/local/share/proxmenux/managed_installs.json. LXC update counts in the VMs & LXCs tab clear on the next dashboard refresh. Turning it back ON repopulates the registry on the next detection cycle, or sooner with a manual API refresh." }, "storageExclusions": { "heading": "Remote Storage Exclusions", diff --git a/web/messages/en/docs/monitor/dashboard/storage.json b/web/messages/en/docs/monitor/dashboard/storage.json index 29faff4a..146d165d 100644 --- a/web/messages/en/docs/monitor/dashboard/storage.json +++ b/web/messages/en/docs/monitor/dashboard/storage.json @@ -70,7 +70,7 @@ "items": [ "Device path — /dev/sda, /dev/nvme0n1.", "Type badge — SATA / NVMe (and the relevant icon).", - "System badge — orange tag for disks identified as hosting the OS. Detection uses the mountpoints of / and /boot; physical disks hosting them receive the System tag. A missing tag does not prove a disk is safe to erase or repurpose.", + "System badge — orange tag for disks in use by the host: system mountpoints (/, /boot, /usr, /var…), active swap, ZFS pool members, LVM physical volumes, active RAID members or system partition labels. A missing tag does not prove a disk is safe to erase or repurpose.", "Model — vendor + model string from smartctl -i.", "Capacity — formatted human-readable.", "Temperature — current °C, coloured by the disk-type threshold (NVMe runs warmer than SATA).", @@ -112,7 +112,7 @@ "pdfPreviewAlt": "First page of the generated SMART Health Report PDF — Executive Summary with the PASSED ring + Disk Information block", "pdfPreviewCaption": "First page of the SMART Health Report — Executive Summary with the PASSED ring and the full Disk Information block. The full PDF below has the SSD wear ring, every SMART attribute and the test history.", "pdfDownloadLabel": "Download sample SMART report (PDF)", - "pdfSectionsIntro": "The report has six main sections:", + "pdfSectionsIntro": "The report includes these main sections:", "pdfSections": [ "Executive Summary — large PASSED / FAILED verdict, plain-language disk health assessment paragraph (\"your disk is healthy / showing signs of wear / failing\"), and four quick stats (report timestamp, last-test type, test result, attributes checked).", "Disk Information — model, serial, capacity, type (HDD / SSD / NVMe), family, form factor, interface (SATA 3.3 · 6.0 Gb/s, …), TRIM support, current temperature with the optimal threshold, power-on time, power cycles, SMART status, plus the headline counters (pending sectors, CRC errors, reallocated sectors).", @@ -127,7 +127,7 @@ "historyImageCaption": "History tab — every retained SMART test for this disk. Per row: type, timestamp, \"X days ago\" tag, latest marker, download (raw smartctl output) and delete actions.", "historyIntro": "The retained pool of SMART tests for this disk — both short and extended runs that completed. Each entry is the raw smartctl output captured at run time, plus the structured fields the Monitor parsed out for the dashboard. Per-row actions:", "historyItems": [ - "Download — saves the retained JSON snapshot with the smartctl -a data used by the report. Useful when vendor support needs the original diagnostic fields.", + "Download — saves that test's JSON snapshot (smartctl -a --json output, or nvme smart-log on NVMe when smartctl fails). Useful when vendor support needs the original diagnostic fields.", "Delete — removes the test from history. The retention limit set in the Schedule tab (Last 5 / 10 / 20) deletes oldest-first automatically; this action is the manual override." ], "scheduleTitle": "Tab 4 — Schedule", diff --git a/web/messages/en/docs/monitor/dashboard/vms-lxcs.json b/web/messages/en/docs/monitor/dashboard/vms-lxcs.json index e7ce2c34..7c4b14b3 100644 --- a/web/messages/en/docs/monitor/dashboard/vms-lxcs.json +++ b/web/messages/en/docs/monitor/dashboard/vms-lxcs.json @@ -1,16 +1,16 @@ { "meta": { "title": "ProxMenux Monitor — Dashboard: VMs & LXCs tab | ProxMenux Documentation", - "description": "The VMs & LXCs tab inventories every guest on the host with live CPU / memory / disk usage. Per-guest details show configuration, resources, backups, recent Proxmox log results, notes, and Start / Shutdown / Reboot / Stop controls." + "description": "The VMs & LXCs tab inventories every guest on the host with live CPU / memory / disk usage. Per-guest details show configuration, resources, backups, the console log of OCI containers, notes, and Start / Shutdown / Reboot / Force Stop controls." }, "header": { "title": "Dashboard: VMs & LXCs tab", - "description": "The full inventory of guests on the node. Four headline metrics across the top, a sortable list of every VM and LXC below, and a drill-in per guest with config, resources, backups, logs and the four lifecycle controls (Start / Shutdown / Reboot / Stop).", + "description": "The full inventory of guests on the node. Four headline metrics across the top, a sortable list of every VM and LXC below, and a drill-in per guest with config, resources, backups, the console log of OCI containers and the four lifecycle controls (Start / Shutdown / Reboot / Force Stop).", "section": "ProxMenux Monitor · Dashboard" }, "intro": { "title": "The control surface for guests", - "body": "Use this tab to control guest lifecycles. Lifecycle actions go through POST /api/vms/<vmid>/control with an explicit confirmation and the response is reflected back in the guest’s row. Force shutdown requires the dedicated Force Stop button." + "body": "Use this tab to control guest lifecycles. Lifecycle actions go through POST /api/vms/<vmid>/control; Reboot and Force Stop ask you to type the VMID to confirm, and the response is reflected back in the guest’s row. Force shutdown requires the dedicated Force Stop button." }, "topRow": { "heading": "Top row: four stat cards", @@ -186,9 +186,9 @@ "source": "PVE RRD data (pvesh get /nodes/<node>/qemu/<id>/rrddata) condensed to a chart-friendly shape." }, { - "section": "Recent Proxmox log results", - "endpoint": "/api/vms//logs", - "source": "pvesh get /nodes/<node>/<qemu|lxc>/<vmid>/log --start 0 --limit 1000. A command failure returns an empty list; this does not provide complete in-guest system logs." + "section": "OCI console log (Logs tab)", + "endpoint": "/api/lxc//console-log", + "source": "Console output of the image's main process, read from /var/log/proxmenux/oci/<vmid>.console.log on the host. Shown for OCI containers only." }, { "section": "Backups available for guest", diff --git a/web/messages/en/docs/monitor/health-monitor.json b/web/messages/en/docs/monitor/health-monitor.json index 732e0290..c4c3c725 100644 --- a/web/messages/en/docs/monitor/health-monitor.json +++ b/web/messages/en/docs/monitor/health-monitor.json @@ -68,7 +68,7 @@ { "category": "Storage", "checks": "Proxmox storages, root filesystem", - "events": "Root or other monitored filesystems crossing configured space thresholds (85% warning / 95% critical by default); offline NFS export; CIFS authentication failure; full LVM-thin pool." + "events": "Root or other monitored filesystems crossing configured space thresholds (85% warning / 95% critical by default); unavailable PVE storages; stale or unexpectedly read-only NFS/CIFS mounts; LVM-thin and other pool storages crossing the same thresholds." }, { "category": "Disks & SMART", @@ -98,7 +98,7 @@ { "category": "System Updates", "checks": "Pending updates, security updates, kernel / PVE version, system age", - "events": "Pending security or running-kernel updates; a system not updated for a long time. The Overview header shows an Update Now button when updates are pending. It runs the full ProxMenux update flow inline; closing it refreshes health with ?refresh=1 so the badge reflects the new state without waiting for the next cycle." + "events": "Pending security or running-kernel updates; a system not updated for a long time. The Updates category of the Health Status modal shows an Update Now button when updates are pending. It runs the full ProxMenux update flow inline; closing it refreshes health with ?refresh=1 so the badge reflects the new state without waiting for the next cycle." }, { "category": "Security & Certificates", @@ -158,7 +158,7 @@ }, "dismiss": { "heading": "Dismissing alerts and the Suppression Duration", - "intro": "Some events are noisy by nature — a System Updates: pending updates available stays true until you patch the host, and you don't want a notification every five minutes for a week. The Update Now button in the Overview header is the direct shortcut to resolve that specific case in place; for everything else, or when patching is deferred, the Health Monitor also offers two coupled silencing mechanisms:", + "intro": "Some events are noisy by nature — a System Updates: pending updates available stays true until you patch the host, and you don't want a notification every five minutes for a week. The Update Now button in the Updates category of the Health Status modal is the direct shortcut to resolve that specific case in place; for everything else, or when patching is deferred, the Health Monitor also offers two coupled silencing mechanisms:", "step1": "Per-event Dismiss action in the modal. The Dismiss button opens a small dropdown with three options — 24 hours, 7 days or Permanently — letting you choose how long this specific alert stays silenced regardless of the category's default. Picking one calls POST /api/health/acknowledge with the error_key and the chosen suppression_hours (-1 for permanent). The event moves to the Dismissed list with a timestamped acknowledged_at.", "dropdownImageAlt": "Dismiss dropdown on a Health Monitor alert — 24 hours, 7 days or Permanently", "dropdownImageCaption": "Per-event Dismiss dropdown. The chosen window applies to this single alert; without a per-event choice the category default is used. Permanent dismissals have an amber Permanent badge and normally do not re-fire. The critical CPU-temperature override described below is an exception.", @@ -187,7 +187,7 @@ }, { "finding": "ZFS pool DEGRADED / FAULTED", - "why": "ZFS pool-capacity checks explicitly allow dismissal. Other pool findings follow their own flag. Acknowledgment does not repair a degraded or faulted pool." + "why": "ZFS pool-state findings (DEGRADED, FAULTED, UNAVAIL) explicitly allow dismissal, as do pool-capacity checks. Acknowledgment does not repair a degraded or faulted pool." }, { "finding": "Disk I/O errors with SMART FAILED", @@ -289,7 +289,7 @@ }, "rest": { "heading": "REST endpoints", - "intro": "The modal actions are also available through the API for scripts, custom dashboards or chatbots. When Monitor authentication is enabled, calls need a valid bearer token, either from login or the API-token screen. Changes such as acknowledging alerts, saving suppression settings or cleaning orphan errors require full_admin scope; read_only receives 403. When authentication is disabled or declined, these decorators allow access without a token.", + "intro": "The modal actions are also available through the API for scripts, custom dashboards or chatbots. Calls need a valid bearer token, either from login or the API-token screen. Changes such as acknowledging alerts, saving suppression settings or cleaning orphan errors require full_admin scope; read_only receives 403.", "headerEndpoint": "Endpoint", "headerMethod": "Method", "headerUse": "Use", @@ -297,7 +297,7 @@ { "endpoint": "/api/health", "method": "GET", - "use": "Lightweight health probe returning JSON with status, timestamp and version. Suitable for Uptime Kuma keyword checks; when Monitor authentication is enabled, the client must send a bearer header." + "use": "Lightweight health probe returning JSON with status, timestamp and version. Suitable for Uptime Kuma keyword checks; the client must send a bearer header." }, { "endpoint": "/api/health/status", diff --git a/web/messages/en/docs/monitor/index.json b/web/messages/en/docs/monitor/index.json index 1b2408ed..2613e500 100644 --- a/web/messages/en/docs/monitor/index.json +++ b/web/messages/en/docs/monitor/index.json @@ -52,7 +52,7 @@ }, { "name": "Terminal", - "description": "Browser shell for the host and supported VM/CT console access, powered by xterm.js over WebSockets. It follows the configured authentication mode: when authentication is disabled or declined, reachable clients can open a session without login. This description does not imply per-command auditing." + "description": "Browser shell for the host and supported VM/CT console access, powered by xterm.js over WebSockets. Sessions are not audited per command." }, { "name": "Security", @@ -114,7 +114,7 @@ "heading": "REST API and integrations", "intro": "The dashboard’s REST endpoints expose monitoring data as JSON over HTTP/HTTPS for Homepage widgets, Home Assistant sensors, Uptime Kuma probes and custom scripts. Grafana can use the separate Prometheus text exporter at /api/prometheus. Requests can be made with curl.", "tokens": "Long-lived API tokens (365 days) are generated from Settings → API Access Tokens or via POST /api/auth/generate-api-token.", - "bearer": "Send tokens as Authorization: Bearer …. The public /api/health endpoint is suitable for external uptime probes without credentials. Routes under /api/auth/* include both public setup/login/status routes and protected account/token management routes; they are not all anonymous.", + "bearer": "Send tokens as Authorization: Bearer …. /api/health also expects the bearer header, so uptime probes need a read_only token. Routes under /api/auth/* include both public setup/login/status routes and protected account/token management routes; they are not all anonymous.", "catalog": "The full endpoint catalog, token rotation guidance and security best-practices live in API Reference; ready-made examples for Homepage, Home Assistant, Grafana, Uptime Kuma and a generic cURL pattern are in Integrations." }, "serviceControl": { diff --git a/web/messages/en/docs/monitor/integrations.json b/web/messages/en/docs/monitor/integrations.json index 415a2088..d0b5a0bd 100644 --- a/web/messages/en/docs/monitor/integrations.json +++ b/web/messages/en/docs/monitor/integrations.json @@ -220,7 +220,7 @@ "heading": "n8n, Zapier and custom scripts", "intro": "Workflow tools and scripts can send notifications through a POST to /api/notifications/send, for example after a CI failure or an overlong cron job. This is a direct send: it bypasses the event queue and fingerprint cooldown. It still uses channel formatting, optional AI rewriting and delivery to configured channels. Apply any required duplicate control in the caller.", "n8nBody": "In n8n, use an HTTP Request node with POST, the URL above and the same JSON body as curl. Choose generic Header Auth credentials: set the header name to Authorization and its value to Bearer YOUR_API_TOKEN, replacing the placeholder. Connect a schedule, webhook or other preceding node to trigger the request.", - "severityBody": "Severity values are INFO, WARNING or CRITICAL in uppercase. The data object supplies event context. AI rewriting uses the rendered title and message plus supported enrichment; arbitrary fields are not guaranteed to appear in its prompt or output. See Notifications → Event catalogue for event semantics." + "severityBody": "Severity values are INFO, WARNING or CRITICAL in uppercase. The data object supplies event context and template fields. On this endpoint, AI rewriting receives only the title and message; fields in data are not sent to the provider. See Notifications → Event catalogue for event semantics." }, "pveWebhook": { "heading": "Native Proxmox VE webhook (inbound)", diff --git a/web/messages/en/docs/monitor/notifications.json b/web/messages/en/docs/monitor/notifications.json index 8112cd6c..3a26f7d9 100644 --- a/web/messages/en/docs/monitor/notifications.json +++ b/web/messages/en/docs/monitor/notifications.json @@ -171,7 +171,7 @@ "Open account.microsoft.com/security and enable two-step verification.", "If your account offers Advanced security options → App passwords, choose Create a new app password. This option alone does not establish that your mail service accepts password-based SMTP.", "If Microsoft generates an app password, copy it and verify that your SMTP service accepts it.", - "Only if your provider permits password-based SMTP, fill in its approved settings: Host smtp.office365.com for Exchange Online, Port 587, TLS Mode STARTTLS, Username your mailbox address, and Password the permitted SMTP credential. Personal Outlook.com settings and authentication requirements are different; do not assume these credentials will work." + "Only if your provider permits password-based SMTP, fill in its approved settings: SMTP host smtp.office365.com for Exchange Online, Port 587, TLS mode STARTTLS, Username your mailbox address, and Password the permitted SMTP credential. Personal Outlook.com settings and authentication requirements are different; do not assume these credentials will work." ], "relayTitle": "Self-hosted SMTP relay", "relayBody": "Point the Monitor at an SMTP relay you control, such as Postfix. The relay handles upstream authentication. Configure the Monitor’s authentication and TLS mode to match the relay; using a local relay does not itself disable encryption." @@ -266,7 +266,7 @@ "howItems": [ "Per-channel opt-in. Off by default — Telegram doesn't silently batch your alerts. You enable it on the channels where you want a digest, leaving others on live delivery.", "Delivery time in your local timezone. Defaults to 09:00 but you can pick any time; the dispatcher fires the digest within ~60 s of that minute.", - "Included in the digest: eligible generic events with severity INFO. Examples include application update available, Tailscale update available, ProxMenux optimisation update available, APT security updates pending and rate-limit notice. Backup results and other exempt action events remain live.", + "Included in the digest: eligible generic events with severity INFO. Examples include application update available, Tailscale update available, ProxMenux optimisation update available and APT security updates pending. Backup results and other exempt action events remain live.", "What is never delayed:", "Persistence. Pending events sit in a SQLite table (digest_pending) until the configured hour. The Monitor can restart freely without losing what the digest will eventually contain.", "Empty days are silent. If nothing INFO-level happened, no digest is sent — the channel stays quiet rather than receiving a \"no events to report\" message." @@ -301,7 +301,7 @@ { "stage": "Cooldown", "what": "After successful delivery, repeated fingerprints are suppressed and the state is saved in notification_last_sent. Base defaults for CRITICAL, WARNING and INFO are 86 400 s, as are resources and updates. Exceptions include 5 s for VM/CT actions and host shutdown/reboot, 10 s for backup/replication results, and 1 800–3 600 s for several health-state categories. Explicit event/group settings can override these values.", - "tunable": "Yes — explicit cooldown settings for an event type or group override the defaults; these are dispatcher configuration values." + "tunable": "Only through the settings API — a cooldown.<event_type> or cooldown.<group> key overrides the defaults; there is no control in the UI." }, { "stage": "Burst aggregation", @@ -330,7 +330,7 @@ "Method and URL. POST http://127.0.0.1:8008/api/notifications/webhook when Monitor HTTPS is off. With HTTPS enabled, the target uses the separate HTTP loopback listener on port 8009. Both stay on the same host.", "Body template. A JSON body using PVE's native Handlebars helpers — stored base64-encoded in the config file by PVE, but it expands to:", "Matcher. A companion matcher: proxmenux-matcher block with mode all so every PVE notification reaches the target.", - "Private configuration. Setup writes the matching webhook: proxmenux-webhook block in /etc/pve/priv/notifications.cfg, including the shared secret encoded in base64. The public target references that secret to send X-Webhook-Secret. The block is not an empty stub." + "Private configuration. Setup writes the matching webhook: proxmenux-webhook block in /etc/pve/priv/notifications.cfg with a secret entry named X-Webhook-Secret, encoded in base64. The public target block holds only the body template, method and URL. The private block is not an empty stub." ], "securityTitle": "How the receiver is secured", "securityIntro": "The webhook receiver at POST /api/notifications/webhook applies different security layers depending on where the request comes from:", diff --git a/web/messages/es/docs/monitor/access-auth.json b/web/messages/es/docs/monitor/access-auth.json index 36f245e1..9c8ae824 100644 --- a/web/messages/es/docs/monitor/access-auth.json +++ b/web/messages/es/docs/monitor/access-auth.json @@ -19,7 +19,7 @@ "reaching": { "heading": "Cómo llegar al panel", "intro": "ProxMenux Monitor escucha en 0.0.0.0:8008. Hay tres formas habituales de llegar a él:", - "outro": "El acceso directo corresponde a la unidad systemd predeterminada. El proxy inverso y Secure Gateway se describen más abajo. Para confiar en la IP de X-Forwarded-For se requiere PROXMENUX_TRUST_PROXY=1 y un proxy que controles. La presencia de X-Forwarded-Proto o X-Forwarded-Host no activa esa confianza; el frontend construye las URL de la API a partir del origen del navegador." + "outro": "El acceso directo corresponde a la unidad systemd predeterminada. El proxy inverso y Secure Gateway se describen más abajo. Para confiar en la IP de X-Forwarded-For se requiere PROXMENUX_TRUST_PROXY=1 y un proxy que controles. La presencia de X-Forwarded-Proto o X-Forwarded-Host no activa esa confianza. En los puertos 80/443 el frontend usa URL relativas /api/*; en cualquier otro puerto llama al puerto 8008 del mismo nombre de host." }, "firstLaunch": { "heading": "Flujo de primer arranque", @@ -117,14 +117,14 @@ "loginImageCaption": "Una vez configurada la autenticación, cada visita al panel empieza aquí. Con 2FA activado, la pantalla pide el código de 6 dígitos en un segundo paso tras aceptar la contraseña.", "loginFlowTitle": "Flujo de login", "twofaIntro": "Con 2FA activado, la misma llamada devuelve primero requires_totp: true. Reemite con el código de 6 dígitos:", - "publicTitle": "Acceso público y sondas protegidas", - "publicIntro": "El inicio de sesión y su estado son públicos. Puedes crear la cuenta mientras no haya usuario y contraseña guardados, incluso tras rechazar la protección. Las sondas de datos del sistema requieren autenticación cuando la protección está activa:", + "publicTitle": "Endpoints públicos (sin token)", + "publicIntro": "El inicio de sesión, su estado, la configuración inicial y el endpoint ligero /api/system-info son públicos:", "publicItems": [ "/api/auth/login y /api/auth/status son públicos. /api/auth/setup crea la cuenta inicial y rechaza sobrescribir credenciales existentes.", "/api/system-info es un endpoint público de información básica del sistema, incluido health.status. No lleva el requisito de token. /api/auth/status también es público y sirve para comprobar disponibilidad." ], "cryptoTitle": "Criptografía y almacenamiento", - "cryptoIntro": "ProxMenux Monitor es código abierto — nada de esto es secreto. Documentar el stack aquí de forma explícita es una decisión deliberada: los operadores que guardan credenciales en su host merecen saber cómo se protegen esas credenciales antes de decidir confiar en ellas. Los algoritmos de abajo son los mismos que usa el código en scripts/auth_manager.py; esta sección es un contrato, no una promesa de marketing.", + "cryptoIntro": "ProxMenux Monitor es código abierto — nada de esto es secreto. Documentar el stack aquí de forma explícita es una decisión deliberada: los usuarios que guardan credenciales en su host merecen saber cómo se protegen esas credenciales antes de decidir confiar en ellas. Los algoritmos de abajo son los mismos que usa el código en scripts/auth_manager.py; esta sección es un contrato, no una promesa de marketing.", "headerAsset": "Elemento", "headerAlgo": "Algoritmo", "headerWhere": "Ubicación", @@ -146,7 +146,7 @@ }, { "asset": "Secret TOTP de 2FA", - "algorithm": "TOTP estándar (RFC 6238), con secreto codificado en base32. Los ocho códigos de recuperación son de un solo uso y se almacenan como hashes SHA-256.", + "algorithm": "TOTP estándar (RFC 6238), con secreto codificado en base32. Los ocho códigos de backup son de un solo uso y se almacenan como hashes SHA-256.", "where": "auth.json → totp_secret + backup_codes[]" }, { @@ -158,9 +158,9 @@ "authJsonTitle": "auth.json — qué contiene y cómo se protege", "authJsonBody": "Todo lo que ProxMenux Monitor necesita para autenticarte vive en un único archivo: /root/.config/proxmenux-monitor/auth.json, modo 0600, propietario root. El archivo guarda hashes (PBKDF2) y material de firma (jwt_secret, totp_secret) — nunca una contraseña en texto plano. Trátalo como cualquier otro secreto de solo-root: si haces backup o replicas el host, cifra el destino y nunca lo subas a control de versiones.", "rotateTitle": "Rotar jwt_secret invalida todos los JWTs existentes", - "rotateBody": "Si auth.json se regenera (borrado manual, reinstalación, restauración desde un backup con un secret distinto) el jwt_secret cambia y cada JWT previamente emitido — tanto sesiones interactivas como API tokens de larga duración — falla la verificación con \"Invalid or expired token\". La UI marca los API tokens afectados con un badge Invalid — regenerate para que el operador sepa que tiene que revocarlos y volver a emitirlos; Home Assistant / scripts / cualquier cliente externo necesita un token fresco después de eso.", + "rotateBody": "Si auth.json se regenera (borrado manual, reinstalación, restauración desde un backup con un secret distinto) el jwt_secret cambia y cada JWT previamente emitido — tanto sesiones interactivas como API tokens de larga duración — falla la verificación con \"Invalid or expired token\". La UI marca los API tokens afectados con un badge Invalid — regenerate para que el usuario sepa que tiene que revocarlos y volver a emitirlos; Home Assistant / scripts / cualquier cliente externo necesita un token fresco después de eso.", "recoverTitle": "Recuperar una contraseña perdida", - "recoverIntro": "No hay un flujo online de \"olvidé mi contraseña\" — por diseño, ya que el panel corre en el propio host del operador y el camino de recuperación es acceso shell a ese host. ProxMenux trae un reset guiado dentro del menú de configuración para que no tengas que editar a mano auth.json:", + "recoverIntro": "No hay un flujo online de \"olvidé mi contraseña\" — por diseño, ya que el panel corre en el propio host del usuario y el camino de recuperación es acceso shell a ese host. ProxMenux trae un reset guiado dentro del menú de configuración para que no tengas que editar a mano auth.json:", "survivesTitle": "Qué sobrevive al reset", "survivesBody": "Solo el login interactivo se borra. El jwt_secret y los api_tokens registrados se preservan — así que Home Assistant y cualquier otro script que use un API token de larga duración siguen funcionando sin reconfiguración. Si quieres una pizarra totalmente limpia (también rotar el secret JWT), borra auth.json manualmente y reinicia el servicio. El siguiente arranque genera un secret fresco y todos los tokens viejos se vuelven inválidos.", "physicalTitle": "Prerrequisito de acceso físico", @@ -170,7 +170,7 @@ "heading": "Autenticación de dos factores (TOTP)", "intro": "El 2FA añade un segundo factor encima de tu contraseña: un código de 6 dígitos que rota cada 30 segundos, generado en un móvil o gestor de contraseñas que controlas. Aunque alguien obtenga la contraseña, sigue sin poder entrar sin el código de tu dispositivo. ProxMenux Monitor implementa el protocolo estándar TOTP (RFC 6238), así que cualquier app autenticadora funciona.", "pickTitle": "Elige una app autenticadora", - "pickIntro": "Si ya tienes una aplicación TOTP, puedes usarla aquí. La tabla recoge opciones habituales: algunas son gratuitas y otras requieren suscripción. También cambian las plataformas y los métodos de copia de seguridad.", + "pickIntro": "Si ya tienes una aplicación TOTP, puedes usarla aquí. La tabla recoge opciones habituales: algunas son gratuitas y otras requieren suscripción. También cambian las plataformas y los métodos de backup.", "headerApp": "Aplicación", "headerPlatforms": "Plataformas", "headerAppNotes": "Notas", @@ -243,17 +243,17 @@ } ], "backupTitle": "Para qué importa realmente el \"backup\"", - "backupBody": "Si pierdes el dispositivo autenticador, usa un código de recuperación guardado o restaura una copia que hubieras configurado previamente. La sincronización en la nube y las exportaciones varían según la aplicación; comprueba que restauren los secretos TOTP. El acceso root al host también permite recuperar el acceso, como se explica abajo. Conserva una copia separada y segura.", + "backupBody": "Si pierdes el dispositivo autenticador, usa un código de backup guardado o restaura un backup de la app que hubieras configurado previamente. La sincronización en la nube y las exportaciones varían según la aplicación; comprueba que restauren los secretos TOTP. El acceso root al host también permite recuperar el acceso, como se explica abajo. Conserva un backup separado y seguro.", "setupTitle": "Configuración paso a paso desde el panel", "setupImageAlt": "Pantalla de configuración de 2FA con código QR y códigos de backup", - "setupImageCaption": "El diálogo de 2FA muestra un código QR, el secreto Base32 para introducirlo manualmente y ocho códigos de recuperación de un solo uso. Cópialos antes de cerrar; no volverán a mostrarse.", + "setupImageCaption": "El diálogo de 2FA muestra un código QR, el secreto Base32 para introducirlo manualmente y, tras la verificación, ocho códigos de backup de un solo uso. Cópialos antes de cerrar; no volverán a mostrarse.", "setupSteps": [ "Instala la app autenticadora en tu móvil (o abre tu gestor de contraseñas). Una de las apps de la tabla de arriba. Solo necesitas hacerlo una vez — la misma app guardará códigos para cada servicio que protejas.", "Loguéate en el panel con tu usuario y contraseña.", - "Abre la pestaña Seguridad en la barra lateral y pulsa Activar 2FA. El diálogo muestra un QR, el secreto Base32 y ocho códigos de recuperación.", + "Abre la pestaña Seguridad en la barra lateral y pulsa Activar 2FA y Iniciar configuración. El diálogo muestra un QR y la clave manual; los ocho códigos de backup aparecen tras verificar el código.", "Añade la entrada a la app autenticadora:", - "Guarda los códigos de recuperación. Conserva los ocho en un gestor de contraseñas, nota cifrada o copia impresa segura. Cada uno funciona una vez si no tienes el autenticador.", - "Confirma escribiendo el código actual de 6 dígitos de la app en el campo \"Código de verificación\" del diálogo de setup y envía. Los códigos se refrescan cada 30 segundos, así que si caduca mientras escribes, simplemente introduce el siguiente.", + "Confirma escribiendo el código actual de 6 dígitos de la app en el campo \"Código de verificación\" del diálogo de configuración y envía. Los códigos se renuevan cada 30 segundos, así que si caduca mientras escribes, introduce el siguiente.", + "Guarda los códigos de backup. Tras la verificación, conserva los ocho en un gestor de contraseñas, nota cifrada o copia impresa segura. Cada uno funciona una vez si no tienes el autenticador.", "Hecho. El 2FA está ahora activo. La próxima vez que te logues, el panel pide primero la contraseña; una vez aceptada pide el código actual de 6 dígitos." ], "setupStep4Sub": [ @@ -261,17 +261,17 @@ "Plan B manual (cuando escanear no es posible — p. ej. configurando en el mismo móvil con el que abriste el panel): pulsa Añadir cuenta → Introducir clave de setup. Escribe cualquier nombre (p. ej. Proxmox Monitor), pega la cadena Base32 del diálogo, deja Tipo como Basado en tiempo, guarda." ], "testTitle": "Prueba antes de cerrar sesión", - "testBody": "Mantén la sesión actual abierta y prueba un nuevo acceso en una ventana privada inmediatamente después de configurar 2FA. Si el código falla, comprueba los relojes del servidor y del móvil antes de cerrar la sesión válida. Si ya perdiste el acceso, usa un código de recuperación o edita auth.json desde la consola del host.", + "testBody": "Mantén la sesión actual abierta y prueba un nuevo acceso en una ventana privada inmediatamente después de configurar 2FA. Si el código falla, comprueba los relojes del servidor y del móvil antes de cerrar la sesión válida. Si ya perdiste el acceso, usa un código de backup o edita auth.json desde la consola del host.", "lostTitle": "Autenticador perdido", "lostIntro": "Tres salidas de emergencia, en orden de cuán disruptivas son:", "lostItems": [ - "Usa un código de recuperación. Introduce uno de los ocho códigos guardados en el campo TOTP. Funciona una vez; los no usados siguen siendo válidos. Tras entrar, configura 2FA de nuevo desde Ajustes para obtener ocho códigos nuevos.", + "Usa un código de backup. Introduce uno de los ocho códigos guardados en el campo TOTP. Funciona una vez; los no usados siguen siendo válidos. Tras entrar, abre Seguridad, elige Desactivar 2FA y después Activar 2FA para obtener ocho códigos nuevos.", "Restaura el autenticador desde la nube / backup. Si tu app tiene sync en la nube (Google, Microsoft, Authy, Apple Passwords vía iCloud Keychain, Ente, 2FAS) instálala en un dispositivo nuevo, loguéate y las entradas reaparecen. Si tu app usa un archivo de exportación cifrado (Aegis, Raivo, FreeOTP+), instala la app en el dispositivo nuevo e importa el archivo.", "Desactiva el 2FA desde la shell del host. Cuando las opciones anteriores no están disponibles, edita /root/.config/proxmenux-monitor/auth.json en el host Proxmox (necesitas SSH root o acceso por consola), pon totp_enabled a false, guarda y reinicia el servicio:" ], "lostShellOutro": "Puedes loguearte con usuario + contraseña solo, luego reactivar el 2FA desde Settings.", "disableTitle": "Desactivar el 2FA", - "disableBody": "Abre Seguridad y elige Desactivar 2FA. POST /api/auth/totp/disable exige la contraseña actual y un código TOTP o de recuperación válido. Elimina el secreto TOTP y los códigos de recuperación. Borra también la entrada antigua en la aplicación autenticadora.", + "disableBody": "Abre Seguridad y elige Desactivar 2FA. POST /api/auth/totp/disable exige la contraseña actual y un código TOTP o de backup válido. Elimina el secreto TOTP y los códigos de backup. Elimina también la entrada antigua en la aplicación autenticadora.", "rejectedTitle": "El código de 6 dígitos se rechaza siempre", "rejectedIntro": "El TOTP está basado en tiempo — el reloj del servidor y el del móvil deben coincidir dentro de unos ~30 s. Dos comprobaciones:", "rejectedItems": [ @@ -316,7 +316,7 @@ "calloutBody": "Monitor puede usar un certificado gestionado por Proxmox o archivos de certificados propios. No emite certificados ACME. Para emitirlos y renovarlos automáticamente, usa ACME de Proxmox o un proxy inverso como Caddy, Traefik o Nginx y asegúrate de cargar los certificados renovados." }, "gateway": { - "heading": "Pasarela segura (Tailscale)", + "heading": "Secure Gateway (Tailscale)", "intro": "Un proxy inverso es una opción de acceso remoto. Secure Gateway permite acceder sin exponer TCP 8008: despliega un LXC Alpine con Tailscale como router de subred. El acceso a la IP LAN del host depende de las rutas aprobadas y de las reglas de acceso de la tailnet.", "calloutTitle": "Por qué esto es cómodo", "calloutBody": "Usa la URL LAN http://<proxmox-lan-ip>:8008 mediante la ruta de subred aprobada. Tailscale usa SNAT por defecto, por lo que Monitor suele ver la IP LAN de la pasarela, no la dirección 100.x.y.z del cliente. Los registros y Fail2Ban identifican la dirección de origen que recibe el host.", diff --git a/web/messages/es/docs/monitor/ai-assistant.json b/web/messages/es/docs/monitor/ai-assistant.json index 05492b10..78ab18ca 100644 --- a/web/messages/es/docs/monitor/ai-assistant.json +++ b/web/messages/es/docs/monitor/ai-assistant.json @@ -14,7 +14,7 @@ }, "intro": { "title": "Desactivado por defecto, un solo interruptor para activarlo", - "body": "La reescritura con IA viene desactivada. Actívala en Ajustes → Notificaciones → Avanzado: mejora con IA. Si falla el enriquecimiento o la reescritura, se envía la plantilla original. Cada reescritura tiene un tiempo límite de 25 segundos; al alcanzarlo se usa la plantilla en lugar de esperar indefinidamente." + "body": "La reescritura con IA viene desactivada. Actívala en Ajustes → Notificaciones → Avanzado: mejora con IA. Si falla el enriquecimiento o la reescritura, se envía la plantilla original. Las reescrituras de la cola de eventos tienen un tiempo límite de 25 segundos; al alcanzarlo se envía la plantilla en lugar de esperar." }, "howItWorks": { "heading": "Cómo funciona", @@ -83,7 +83,7 @@ "intro1": "Cada proveedor comercial cobra por token, así que merece la pena entender qué es un token antes de elegir un plan. Un token son aproximadamente cuatro caracteres de texto en inglés o unas tres cuartas partes de una palabra. La frase \"Backup completed on storage local-bak\" son unos ocho tokens. Un extracto corto de journal de diez líneas puede ser 200-400 tokens según la densidad técnica.", "intro2": "Se facturan dos cosas en cada llamada:", "items": [ - "Tokens de entrada: incluyen las instrucciones del sistema y el mensaje de usuario: severidad, título, texto de la plantilla y contexto adicional. La cantidad depende del prompt y del evento. Cada canal reescrito puede consumir sus propios tokens de entrada; los informes de copia completada y fallida omiten la IA.", + "Tokens de entrada: incluyen las instrucciones del sistema y el mensaje de usuario: severidad, título, texto de la plantilla y contexto adicional. La cantidad depende del prompt y del evento. Cada canal reescrito puede consumir sus propios tokens de entrada; los informes de backup completado y fallido omiten la IA.", "Tokens de salida — lo que el modelo escribe de vuelta. El Monitor lo limita con max_tokens (mira la tabla de abajo). El límite es un tope, no un cargo: si el modelo produce 250 tokens con un tope de 1500, pagas 250." ], "capsIntro": "Estos son los topes reales que aplica el dispatcher, tomados directamente de AI_DETAIL_TOKENS en notification_templates.py:", @@ -109,7 +109,7 @@ ], "customNote": "El modo de prompt personalizado usa un tope fijo de 500 tokens de salida independientemente del nivel de detalle — el prompt personalizado está bajo tu control y el tope protege contra respuestas descontroladas.", "sizingTitle": "Dimensionamiento práctico", - "sizingBody": "Estima el consumo como eventos reescritos × canales con IA × tokens de entrada y salida por llamada. Por ejemplo: 50 eventos × un canal × (500 de entrada + 300 de salida) son 40.000 tokens al día. El consumo y coste reales dependen del modelo, contexto, caché y límites del proveedor. Nivel de detalle por canal explica cómo usar brief para chat en lugar de standard, manteniendo informes detallados por correo." + "sizingBody": "Estima el consumo como eventos reescritos × canales con IA × tokens de entrada y salida por llamada. Por ejemplo: 50 eventos × un canal × (2.000 de entrada + 300 de salida) son unos 115.000 tokens al día, porque el prompt de sistema predeterminado ya ocupa unos 1.500 tokens. El consumo y coste reales dependen del modelo, contexto, caché y límites del proveedor. Nivel de detalle por canal explica cómo usar brief para chat en lugar de standard, manteniendo informes detallados por correo." }, "providers": { "heading": "Proveedores de IA", @@ -142,7 +142,7 @@ "items": [ "Clave API: console.anthropic.com/settings/keys", "Ejemplos de la lista de modelos incluida: claude-haiku-4-5-20251001, claude-sonnet-4-6, claude-opus-4-6.", - "Recomendación incluida: claude-haiku-4-5-20251001. Esta versión exacta figura como recomendada; los modelos Claude 3.5 de la documentación anterior ya no están en la lista incluida." + "Recomendación incluida: claude-haiku-4-5-20251001, una versión fija y no un alias que cambie." ] }, "gemini": { @@ -215,7 +215,7 @@ "shareTitle": "Compartir prompts con la comunidad", "shareIntro": "El botón Export escribe tu prompt personalizado actual en un archivo (.txt / .md) que puedes guardar como backup o pasar a otra persona. Import lo trae de vuelta. El tercer botón al lado enlaza con una galería comunitaria pública en GitHub:", "shareLinkLabel": "github.com/MacRimi/ProxMenux/discussions — Comparte prompts personalizados para notificaciones de IA", - "shareOutro": "Navega la discusión para ver qué han construido otros operadores — alertas escuetas tipo pager, reportes técnicos verbosos, variantes específicas por idioma. Si tuneas el tuyo y te gusta el resultado, publícalo allí: incluso una descripción de un párrafo de para qué optimiza tu prompt ayuda a la gente a elegir un buen punto de partida. El feedback sobre lo que funciona y lo que no es igualmente bienvenido." + "shareOutro": "Navega la discusión para ver qué han construido otros usuarios — alertas escuetas tipo pager, reportes técnicos verbosos, variantes específicas por idioma. Si tuneas el tuyo y te gusta el resultado, publícalo allí: incluso una descripción de un párrafo de para qué optimiza tu prompt ayuda a la gente a elegir un buen punto de partida. El feedback sobre lo que funciona y lo que no es igualmente bienvenido." }, "suggestions": { "heading": "Sugerencias de IA (BETA)", diff --git a/web/messages/es/docs/monitor/api-reference.json b/web/messages/es/docs/monitor/api-reference.json index c95dbcbe..480e144f 100644 --- a/web/messages/es/docs/monitor/api-reference.json +++ b/web/messages/es/docs/monitor/api-reference.json @@ -1,7 +1,7 @@ { "meta": { "title": "API de Proxmox Monitor — Referencia de integración | ProxMenux", - "description": "Endpoints HTTP de ProxMenux Monitor para Home Assistant, Homepage, Grafana, Prometheus, n8n y paneles propios. Consulta el estado y ejecuta operaciones documentadas: control de VM, inicio de copias, notificaciones y confirmación de alertas.", + "description": "Endpoints HTTP de ProxMenux Monitor para Home Assistant, Homepage, Grafana, Prometheus, n8n y paneles propios. Consulta el estado y ejecuta operaciones documentadas: control de VM, inicio de backups, notificaciones y confirmación de alertas.", "ogTitle": "API de Proxmox Monitor — Referencia de integración", "ogDescription": "Endpoints de ProxMenux Monitor para Home Assistant, Homepage, Grafana, Prometheus, n8n y paneles propios.", "twitterTitle": "API de Proxmox Monitor | ProxMenux", @@ -14,7 +14,7 @@ }, "intro": { "title": "Para qué es esta página", - "body": "Esta página reúne endpoints para integraciones externas: datos de lectura y operaciones como iniciar copias, enviar avisos y confirmar alertas. La API usa el mismo proceso Flask que sirve el panel en TCP 8008. La dirección de escucha y TLS se explican en Acceso y autenticación." + "body": "Esta página reúne endpoints para integraciones externas: datos de lectura y operaciones como iniciar backups, enviar avisos y confirmar alertas. La API usa el mismo proceso Flask que sirve el panel en TCP 8008. La dirección de escucha y TLS se explican en Acceso y autenticación." }, "headerEndpoint": "Endpoint", "headerMethod": "Método", @@ -102,9 +102,9 @@ }, "actions": { "heading": "Acciones del sistema", - "intro": "Estas acciones asíncronas se ejecutan en unidades systemd transitorias. Con autenticación activa, sus rutas de escritura exigen full_admin; read_only puede consultar .../status. El inicio aceptado devuelve HTTP 202 y estado; consulta .../status para el progreso. El control de invitados y las copias usan respuestas distintas, explicadas abajo.", + "intro": "Estas acciones asíncronas se ejecutan en unidades systemd transitorias. Con autenticación activa, sus rutas de escritura exigen full_admin; read_only puede consultar .../status. El inicio aceptado devuelve HTTP 202 y estado; consulta .../status para el progreso. El control de invitados y los backups usan respuestas distintas, explicadas abajo.", "shapeTitle": "Formato de respuesta común", - "shapeIntro": "Las acciones asíncronas del sistema comparten este objeto JSON de estado. El control de invitados y las copias tienen formatos distintos:", + "shapeIntro": "Las acciones asíncronas del sistema comparten este objeto JSON de estado. El control de invitados y los backups tienen formatos distintos:", "shapeCode": "{\n \"unit\": \"proxmenux-action-pve-update.service\",\n \"state\": \"idle | running | success | failed | cancelled\",\n \"started_at\": \"Sat 2026-08-01 11:01:32 CEST\",\n \"finished_at\": null,\n \"exit_code\": null,\n \"result\": null\n}", "concurrencyTitle": "Concurrencia y cancelación", "concurrencyBody": "Iniciar otra ejecución de la misma acción activa devuelve HTTP 409. Solo se cancela si hay una ruta DELETE documentada, como en la actualización PVE. Su estado pasa a cancelled y conserva fechas. Los estados finales se guardan en memoria del proceso y pueden perderse al reiniciar Monitor.", @@ -162,7 +162,7 @@ { "endpoint": "/api/vms//backup", "method": "POST", - "use": "Crea una copia vzdump de una VM o LXC. Campos opcionales, ajustables según el almacenamiento: storage (destino PVE), mode (snapshot, suspend o stop), compress (zstd, lzo, gzip o none), protected (true o false), notes, notification (auto, always, failure o never) y pbs_change_detection (default, legacy o data). Devuelve el UPID de la tarea PVE." + "use": "Crea un backup vzdump de una VM o LXC. Campos opcionales, ajustables según el almacenamiento: storage (destino PVE), mode (snapshot, suspend o stop), compress (zstd, lzo, gzip o none), protected (true o false), notes y pbs_change_detection (default, legacy o data). Devuelve el UPID de la tarea PVE." }, { "endpoint": "/api/vms//backups", @@ -171,7 +171,7 @@ } ], "syncVsAsyncTitle": "Dos tipos de acción", - "syncVsAsyncBody": "Encendido, apagado y actualizaciones del host usan unidades systemd transitorias con .../status. Solo la actualización PVE tiene aquí una ruta de cancelación DELETE. El control VM/LXC devuelve una tarea que debe consultarse; la copia devuelve un UPID de trabajo en segundo plano. Aceptar la petición no equivale a terminarla. Autenticación y permisos dependen de la ruta.", + "syncVsAsyncBody": "Encendido, apagado y actualizaciones del host usan unidades systemd transitorias con .../status. Solo la actualización PVE tiene aquí una ruta de cancelación DELETE. El control VM/LXC devuelve una tarea que debe consultarse; el backup devuelve un UPID de trabajo en segundo plano. Aceptar la petición no equivale a terminarla. Autenticación y permisos dependen de la ruta.", "curlTitle": "Ejemplo curl", "curlBody": "Inicia una actualización PVE y consulta hasta que termine: la secuencia que usaría una automatización Home Assistant o un playbook Ansible.", "curlCode": "TOKEN=\n\ncurl -sSf -X POST \\\n -H \"Authorization: Bearer $TOKEN\" \\\n https://:8008/api/system/pve-update/run\n\nwhile true; do\n state=$(curl -sSf -H \"Authorization: Bearer $TOKEN\" \\\n https://:8008/api/system/pve-update/status | jq -r .state)\n [ \"$state\" != \"running\" ] && break\n sleep 30\ndone\necho \"final state: $state\"", @@ -286,7 +286,7 @@ { "endpoint": "/api/storage/smart//test", "method": "POST", - "use": "Inicia una prueba SMART. Esquema del cuerpo: '{'\"type\":\"short\"|\"long\"'}'." + "use": "Inicia una prueba SMART. Esquema del cuerpo: '{'\"test_type\":\"short\"|\"long\"'}'." }, { "endpoint": "/api/storage/smart/schedules", @@ -356,7 +356,7 @@ { "endpoint": "/api/vms//backups", "method": "GET", - "use": "Copias de seguridad conservadas para este invitado." + "use": "Backups conservados para este invitado." }, { "endpoint": "/api/vms//control", @@ -381,17 +381,17 @@ ] }, "backups": { - "heading": "Copias de seguridad", + "heading": "Backups", "rows": [ { "endpoint": "/api/backups", "method": "GET", - "use": "Copias encontradas en almacenamientos dir, NFS, CIFS y PBS consultados desde el nodo local. No explora todos los nodos del clúster." + "use": "Backups encontrados en almacenamientos dir, NFS, CIFS y PBS consultados desde el nodo local. No explora todos los nodos del clúster." }, { "endpoint": "/api/backup-storages", "method": "GET", - "use": "Almacenamientos que admiten copias de seguridad, con espacio libre." + "use": "Almacenamientos que admiten backups, con espacio libre." } ] }, diff --git a/web/messages/es/docs/monitor/architecture.json b/web/messages/es/docs/monitor/architecture.json index f7821bee..7dd9fce6 100644 --- a/web/messages/es/docs/monitor/architecture.json +++ b/web/messages/es/docs/monitor/architecture.json @@ -73,13 +73,13 @@ "intro": "AppImage es un sistema de archivos que se monta al ejecutarlo. AppRun en su raíz prepara el entorno y lanza flask_server.py:", "consequencesIntro": "Dos consecuencias de esta estructura:", "consequences": [ - "Entorno Python incluido. El intérprete y sus paquetes vienen en AppImage, evitando instalarlos en Python del host. La aplicación sigue usando interfaces del kernel y herramientas externas del host.", + "Paquetes Python incluidos. Los paquetes Python vienen en la AppImage y se ejecutan con el intérprete Python 3.11 (PVE 8) o 3.13 (PVE 9) del propio host, sin instalar nada en su Python del sistema. La aplicación sigue usando interfaces del kernel y herramientas externas del host.", "Clientes de hardware incluidos. Contiene ipmitool, lm-sensors y upsc. Las lecturas dependen del hardware compatible, acceso a sensores y, para el SAI, un servidor NUT configurado." ] }, "flask": { "heading": "Estructura de la aplicación Flask", - "intro": "flask_server.py crea una instancia Flask(__name__) con CORS restringido, registra directamente nueve blueprints e inicializa el terminal. La tabla destaca módulos principales; también registra auditoría, copias VM y PBS. Las precargas PVE solo se ejecutan en hosts PVE.", + "intro": "flask_server.py crea una instancia Flask(__name__) con CORS restringido, registra directamente diez blueprints e inicializa el terminal. La tabla destaca módulos principales; también registra PBS, enlaces del Monitor, auditoría y backups de VM. Las precargas PVE solo se ejecutan en hosts PVE.", "headerBlueprint": "Blueprint / módulo", "headerPrefix": "Prefijo de rutas", "headerOwns": "Responsabilidad", @@ -242,17 +242,17 @@ "Actualizaciones: paquetes pendientes y parches de seguridad.", "Registros: patrones persistentes, picos y cascadas en el journal del sistema.", "Memoria: actividad del OOM killer y presión RAM sostenida.", - "Temperatura: lecturas CPU y discos frente a umbrales de monitorización; los sensores disponibles dependen del hardware.", + "CPU: uso y temperatura de la CPU frente a los umbrales configurables; los sensores disponibles dependen del hardware.", "Seguridad: fallos de acceso, bloqueos y estado del jail Fail2Ban." ], - "afterIntro": "Los hallazgos usan error_key, categoría y gravedad estables. Las filas de errors se actualizan con last_seen y recuentos, sin duplicarlas. El envío de avisos tiene además sus propias huellas y tiempos de espera.", + "afterIntro": "Los hallazgos usan error_key, categoría y gravedad estables. Las filas de errors se actualizan en el sitio (last_seen, gravedad, motivo), sin duplicarlas. El envío de avisos tiene además sus propias huellas y tiempos de espera.", "cycleEnd": "La limpieza puede resolver errores obsoletos con la duración de silenciamiento por categoría y reglas de estado, retirar registros huérfanos de recursos eliminados y borrar events de más de 30 días. Las categorías se explican en Panel → Health Monitor." }, "notifications": { "heading": "Motor de notificaciones", "intro": "notification_manager.py coordina el envío: carga canales, gestiona la cola y ofrece una API Python para Flask y Health Monitor, además de una entrada de consola para los hooks .sh de ProxMenux.", "items": [ - "Los observadores generan eventos: JournalWatcher sigue el journal, TaskWatcher consulta tareas Proxmox, ProxmoxHookWatcher recibe hooks de copias, replicación y snapshots, y PollingCollector gestiona fuentes lentas.", + "Los observadores generan eventos: JournalWatcher sigue el journal, TaskWatcher consulta tareas Proxmox, ProxmoxHookWatcher recibe hooks de backups, replicación y snapshots, y PollingCollector gestiona fuentes lentas.", "Las plantillas convierten eventos en título y texto. El proveedor de IA configurado (OpenAI / Anthropic / Gemini / Groq / Ollama / OpenRouter) puede reformularlos en lenguaje natural. Ambas versiones se guardan en notification_history.", "Los canales envían por Telegram, Discord, correo, Gotify, Pushover y Apprise, entre otros. Las implementaciones en notification_channels.py comparten create_channel() / send().", "Cifrado. Los ajustes sensibles (telegram.bot_token, discord.webhook_url, pushover.user_key, pushover.api_token, ai_api_key_*, email.password) se cifran con la clave de .notification_key antes de guardarse en la base de datos y se muestran enmascarados en la interfaz." @@ -264,9 +264,9 @@ "intro": "La pestaña Terminal conecta un cliente ligero xterm.js a un PTY del servidor por WebSocket. Hay dos modos:", "items": [ "Modo HTTP, predeterminado: el servidor Flask incluido y flask-sock gestionan el cambio de protocolo a WebSocket.", - "Modo HTTPS / WSS: usa gevent.pywsgi.WSGIServer con geventwebsocket.handler.WebSocketHandler para conexiones WebSocket sobre TLS." + "Modo HTTPS / WSS: usa gevent.pywsgi.WSGIServer con su gestor predeterminado; flask-sock atiende las conexiones WebSocket sobre TLS." ], - "outro": "Los procesos del terminal heredan User=root. Con autenticación activa, abrir WebSocket exige un ticket breve y de un solo uso, obtenido del endpoint de tickets autenticado con permisos administrativos. Si la autenticación está desactivada o se rechazó configurarla, la conexión sigue ese modo sin autenticación.", + "outro": "Los procesos del terminal heredan User=root. Abrir WebSocket exige un ticket breve y de un solo uso, obtenido del endpoint de tickets autenticado con permisos administrativos.", "proxyNote": "Si usas un proxy inverso, permite el tráfico WebSocket y sus cabeceras Upgrade y Connection. El terminal necesita ese reenvío." }, "proxy": { diff --git a/web/messages/es/docs/monitor/audit-report/index.json b/web/messages/es/docs/monitor/audit-report/index.json index b4bf8e0c..c97f501f 100644 --- a/web/messages/es/docs/monitor/audit-report/index.json +++ b/web/messages/es/docs/monitor/audit-report/index.json @@ -34,7 +34,7 @@ { "icon": "fileText", "title": "Política: ¿qué se espera?", - "body": "Declara qué invitados necesitan copia de seguridad o deben arrancar con el host, qué almacenamiento es esencial y los umbrales de las comprobaciones." + "body": "Declara qué invitados necesitan backup o deben arrancar con el host, qué almacenamiento es esencial y los umbrales de las comprobaciones." } ] } diff --git a/web/messages/es/docs/monitor/audit-report/policy.json b/web/messages/es/docs/monitor/audit-report/policy.json index b8463cb0..e7c33e31 100644 --- a/web/messages/es/docs/monitor/audit-report/policy.json +++ b/web/messages/es/docs/monitor/audit-report/policy.json @@ -1,7 +1,7 @@ { "meta": { "title": "Política | Auditoría e informes", - "description": "Política del nodo en Auditoría e informes: copias de seguridad, arranque automático y objetivo de recuperación de cada invitado, función de cada almacenamiento y umbrales de comprobación." + "description": "Política del nodo en Auditoría e informes: backups, arranque automático y objetivo de recuperación de cada invitado, función de cada almacenamiento y umbrales de comprobación." }, "header": { "title": "Política", diff --git a/web/messages/es/docs/monitor/dashboard/hardware.json b/web/messages/es/docs/monitor/dashboard/hardware.json index 167d8ddb..d0259219 100644 --- a/web/messages/es/docs/monitor/dashboard/hardware.json +++ b/web/messages/es/docs/monitor/dashboard/hardware.json @@ -31,7 +31,7 @@ "Placa base: fabricante, modelo, versión y fecha de BIOS y UUID SMBIOS. Sirve para localizar la página de descarga correcta del fabricante al buscar firmware." ], "memoryTitle": "Módulos de memoria", - "memoryBody": "Una fila por ranura ocupada según dmidecode: etiqueta, capacidad del módulo, tipo (DDR4 / DDR5 / variantes ECC), velocidad configurada y nominal, fabricante, referencia y número de serie. Las ranuras vacías aparecen atenuadas para mostrar el margen de ampliación.", + "memoryBody": "Una fila por slot ocupado según dmidecode: etiqueta, capacidad del módulo, tipo (DDR4 / DDR5 / variantes ECC), velocidad configurada y nominal, fabricante, referencia y número de serie. Los slots vacíos aparecen atenuados para mostrar el margen de ampliación.", "thermalTitle": "Monitoreo Térmico", "thermalIntro": "Siete bloques alimentados por lm-sensors, sysfs y lectores específicos de cada herramienta. Los sensores hwmon de almacenamiento se asocian al dispositivo de bloques físico, con su modelo y ruta /dev/.... Cada bloque se oculta si no hay sensores en su categoría.", "thermalItems": [ @@ -52,7 +52,7 @@ "lxcImageAlt": "Tarjetas gráficas: iGPU Intel UHD Graphics con i915 y NVIDIA Quadro P1000 con nvidia, ambas listas para contenedores LXC", "lxcImageCaption": "Mismo nodo después de devolver la tarjeta NVIDIA al driver nativo — ambas GPUs ahora Ready for LXC containers.", "realtimeTitle": "Ventana de monitorización en tiempo real", - "realtimeBody": "Pulsa una GPU para abrir su monitorización por ranura, que consulta la herramienta del fabricante cada tres segundos. Muestra fabricante, tipo, ranura PCI, controlador, módulos del kernel, uso de motores (Render/3D, Video, Blitter, VideoEnhance), frecuencias de gráficos y memoria, temperatura, consumo si está disponible, VRAM y procesos activos con carga por proceso. Datos de /api/gpu/<slot>/realtime.", + "realtimeBody": "Pulsa una GPU para abrir su monitorización por slot, que consulta la herramienta del fabricante cada tres segundos. Muestra fabricante, tipo, slot PCI, controlador, módulos del kernel, uso de motores (Render/3D, Video, Blitter, VideoEnhance), frecuencias de gráficos y memoria, temperatura, consumo si está disponible, VRAM y procesos activos con carga por proceso. Datos de /api/gpu/<slot>/realtime.", "toolsIntro": "Herramienta del fabricante usada para cada GPU:", "headerVendor": "Proveedor", "headerTool": "Herramienta", @@ -123,9 +123,9 @@ "intro": "Todos los dispositivos de bloques conocidos por el kernel, agrupados por tipo. Cada disco muestra su nombre (sda, nvme0n1, zram0…), tipo (SSD, HDD, NVMe SSD), modelo y enlace negociado. Pulsa para abrir modelo, número de serie, capacidad, interfaz y velocidad actual y máxima.", "imageAlt": "Tarjeta Storage Summary listando once dispositivos de bloque (SSDs SATA, HDDs SATA, SSDs NVMe y zram) con cadenas de modelo y velocidades de enlace negociadas; los dos discos NVMe muestran 3.0 x4 con la velocidad actual resaltada", "imageCaption": "Once dispositivos en este nodo. Los enlaces SATA aparecen como SATA <version>, <Gb/s> (current: ...); los NVMe como <PCIe gen> x<width>.", - "nvmeBody": "La línea de cada NVMe compara el enlace negociado con el máximo admitido. Si difieren, como un SSD Gen3 x4 funcionando a 3.0 x1 en una ranura de un solo carril, el valor actual aparece en ámbar. Permite detectar enlaces limitados al investigar discos lentos o cambios de carriles tras actualizar BIOS.", + "nvmeBody": "La línea de cada NVMe compara el enlace negociado con el máximo admitido. Si difieren, como un SSD Gen3 x4 funcionando a 3.0 x1 en un slot de un solo carril, el valor actual aparece en ámbar. Permite detectar enlaces limitados al investigar discos lentos o cambios de carriles tras actualizar BIOS.", "nvmeModalAlt": "Modal de detalle de disco NVMe para nvme0n1: tipo NVMe SSD, 953.9 GB de capacidad, velocidad actual de enlace 3.0 x1 resaltada en ámbar, velocidad máxima 3.0 x4, modelo WDC CL SN720, número de serie, interfaz PCIe/NVMe", - "nvmeModalCaption": "Detalles NVMe con enlace limitado: el disco admite x4, pero la ranura está conectada a x1.", + "nvmeModalCaption": "Detalles NVMe con enlace limitado: el disco admite x4, pero el slot está conectado a x1.", "outro": "Los datos SMART, autopruebas, historial e informe PDF están en Panel: Almacenamiento. Los mismos datos alimentan Salud y pruebas SMART de discos. Una prueba larga desde el script escribe el JSON mostrado por Monitor en Almacenamiento → Historial." }, "pci": { diff --git a/web/messages/es/docs/monitor/dashboard/network.json b/web/messages/es/docs/monitor/dashboard/network.json index 540d4847..20109a23 100644 --- a/web/messages/es/docs/monitor/dashboard/network.json +++ b/web/messages/es/docs/monitor/dashboard/network.json @@ -162,7 +162,7 @@ } ], "reportTitle": "Informe de latencia de red (PDF)", - "reportIntro": "Ambos modos tienen un botón Informe junto al selector de destino. Genera un PDF de las mediciones que puedes adjuntar a una solicitud de asistencia a tu proveedor de Internet.", + "reportIntro": "Ambos modos tienen un botón Informe junto al selector de destino. Abre un informe imprimible de las mediciones; guárdalo como PDF desde el diálogo de impresión del navegador y adjúntalo a una solicitud de asistencia a tu proveedor de Internet.", "reportPreviewAlt": "Primera página del informe PDF de latencia: resumen ejecutivo, indicador, estadísticas, gráfico y guía de umbrales", "reportPreviewCaption": "La primera página contiene resumen ejecutivo, indicador, estadísticas principales, serie temporal de latencia y guía de umbrales. Desde la página 2 aparecen la tabla de muestras y la metodología.", "downloadLabel": "Descargar informe de ejemplo de latencia (PDF)", diff --git a/web/messages/es/docs/monitor/dashboard/security.json b/web/messages/es/docs/monitor/dashboard/security.json index 11698780..7a09c303 100644 --- a/web/messages/es/docs/monitor/dashboard/security.json +++ b/web/messages/es/docs/monitor/dashboard/security.json @@ -136,7 +136,7 @@ "configCaption": "Edición del jail sshd: reduce Max Retries para SSH si solo accedes desde tu subred, o amplía Ban Time para el panel expuesto a Internet.", "outro": "La guía Qué instala, cómo se configura y cómo desinstalar incluye la instalación manual, el cambio de SSH MaxAuthTries y la relación con el registro proxmenux-auth.log. Consulta ProxMenux → Seguridad → Fail2Ban.", "calloutTitle": "Sin Fail2Ban, este mecanismo no bloquea las IP", - "calloutBody": "ProxMenux Monitor comprueba las IP bloqueadas por Fail2Ban a nivel de aplicación antes de procesar las peticiones de Flask. Consulta fail2ban-client y guarda el resultado en caché durante 30 segundos; no lee ninguna tabla SQL de bloqueos. Sin Fail2Ban, los intentos fallidos se registran en proxmenux-auth.log, pero este mecanismo no bloquea IPs." + "calloutBody": "ProxMenux Monitor comprueba las IP bloqueadas en la jaula proxmenux de Fail2Ban a nivel de aplicación antes de procesar las peticiones de Flask, con el resultado en caché durante 30 segundos. Sin Fail2Ban, los intentos fallidos se registran en proxmenux-auth.log y el inicio de sesión se limita a 5 intentos por IP cada 5 minutos, pero no se bloquea ninguna IP." }, "lynis": { "heading": "Auditoría de seguridad de Lynis", diff --git a/web/messages/es/docs/monitor/dashboard/settings.json b/web/messages/es/docs/monitor/dashboard/settings.json index d4d57152..c4d91dbc 100644 --- a/web/messages/es/docs/monitor/dashboard/settings.json +++ b/web/messages/es/docs/monitor/dashboard/settings.json @@ -26,7 +26,7 @@ }, "navigationOrder": { "heading": "Orden de navegación", - "intro": "Ordena los siete elementos principales: Resumen, Apps, VMs y LXCs, Nodo, Copias, Terminal y Administración. Pulsa Editar, arrastra las filas y guarda.", + "intro": "Ordena los siete elementos principales: Resumen, Apps, VMs y LXCs, Nodo, Backup, Terminal y Administración. Pulsa Editar, arrastra las filas y guarda.", "items": [ "Con el ratón, el arrastre empieza al pulsar. En pantallas táctiles requiere mantener la pulsación 250 ms para distinguirlo del desplazamiento.", "Los grupos Nodo y Administración se mueven completos; sus páginas internas conservan el orden establecido.", @@ -76,16 +76,16 @@ }, "thresholds": { "heading": "Umbrales de Health Monitor", - "intro": "La tarjeta anterior define cuánto dura el silencio tras descartar; esta define el valor que activa una alerta. La mayoría de controles tienen valores Aviso y Crítico ajustables. La tabla explica excepciones como la regla combinada de swap y el detector actual de RAM.", + "intro": "La tarjeta anterior define cuánto dura el silencio tras descartar; esta define el valor que activa una alerta. La mayoría de controles tienen valores Aviso y Crítico ajustables. La tabla explica excepciones como la regla combinada de swap.", "whatForTitle": "Para qué sirve", "whatForIntro": "Los valores predeterminados sirven como punto de partida, pero cada entorno tiene sus propias condiciones:", "whatForItems": [ - "Un homelab con un único SSD puede avisar antes de llenarse, por ejemplo al 75/90 %, para dejar margen a las instantáneas.", + "Un homelab con un único SSD puede avisar antes de llenarse, por ejemplo al 75/90 %, para dejar margen a los snapshots.", "Los umbrales de memoria deben reflejar las mediciones y la carga del host. La redundancia Ceph no justifica por sí sola relajar avisos, y el uso elevado de ARC de ZFS no equivale a memoria de trabajo irrecuperable.", "Elige umbrales de temperatura según las especificaciones del disco y sus condiciones reales. La refrigeración pasiva o forzada no determina por sí sola un límite seguro universalmente más bajo o más alto.", "Un host muy virtualizado puede alcanzar picos de CPU durante compilaciones sin necesitar avisos por cada pico del 80 %, pero debe seguir avisando de saturación sostenida." ], - "whatForOutro": "Los cambios admitidos se aplican en el siguiente análisis. Health Monitor lee /usr/local/share/proxmenux/health_thresholds.json cada ciclo sin reinicio. Algunos indicadores, como temperatura de disco, usan estos valores; ciertas barras de capacidad conservan sus propios cortes. La fila de RAM explica una excepción actual.", + "whatForOutro": "Los cambios admitidos se aplican en el siguiente análisis. Health Monitor lee /usr/local/share/proxmenux/health_thresholds.json cada ciclo sin reinicio. Algunos indicadores, como temperatura de disco, usan estos valores; ciertas barras de capacidad conservan sus propios cortes.", "coloursTitle": "Colores de estado de Aviso y Crítico", "coloursIntro": "Los widgets que usan el par Aviso/Crítico siguen los tres estados siguientes. Algunos indicadores, como las barras de capacidad PVE, tienen límites propios; su color no basta para deducir una alerta de Health Monitor.", "headerColour": "Color", @@ -125,7 +125,7 @@ "section": "Memoria", "warning": "85 %", "critical": "95 %", - "gates": "Presión de RAM del host. La configuración muestra Crítico al 95 %, pero el detector actual usa una regla fija del 90 % sostenido; cambiar ese ajuste no modifica actualmente esa rama de ejecución." + "gates": "Presión de RAM del host." }, { "section": "Uso de swap (solo crítico)", @@ -185,7 +185,7 @@ "section": "Almacenamiento PVE", "warning": "85 %", "critical": "95 %", - "gates": "Almacenamientos gestionados por PVE: LVM, LVM-thin, ZFS-pool, RBD/Ceph y PBS. No todos son backends de bloques." + "gates": "Solo almacenamientos PVE de tipo LVM, LVM-thin, ZFS-pool, RBD, CephFS y PBS. Los de tipo directorio, NFS y CIFS los cubre la fila de espacio en disco del host." }, { "section": "Pool ZFS", @@ -218,7 +218,7 @@ "toggleTitle": "Interruptor de aviso condicionado a la detección", "toggleBody": "El interruptor por canal lxc_updates_available en Notificaciones → Servicios solo aparece con la detección activa. Al desactivarla, la fila se oculta en todos los canales. Su preferencia se conserva en la base de datos y recupera el mismo valor al reactivarla.", "purgeTitle": "Qué se elimina al desactivar la detección", - "purgeBody": "Desactivarlo elimina de inmediato las entradas type=lxc de /usr/local/share/proxmenux/managed_installs.json. Los contadores de actualizaciones LXC de Hardware desaparecen en el siguiente refresco. Al reactivarlo, el próximo ciclo de detección repuebla el registro, o antes con una actualización manual de la API." + "purgeBody": "Desactivarlo elimina de inmediato las entradas type=lxc de /usr/local/share/proxmenux/managed_installs.json. Los contadores de actualizaciones LXC de la pestaña VM y LXC desaparecen en el siguiente refresco. Al reactivarlo, el próximo ciclo de detección repuebla el registro, o antes con una actualización manual de la API." }, "storageExclusions": { "heading": "Exclusiones de almacenamiento remoto", @@ -226,7 +226,7 @@ "imageCaption": "Controles Estado y Alertas por almacenamiento. Con ambos desactivados, deja de participar en Health Monitor y de enviar avisos. Sigue visible en Almacenamiento, marcado como excluido.", "intro": "Puedes excluir almacenamientos gestionados por Proxmox (NFS / CIFS / PBS / Ceph / iSCSI / etc.) con dos controles independientes:", "items": [ - "Estado — al desactivar este control, el almacenamiento deja de contar en la categoría Almacenamiento de Health Monitor. Útil para volúmenes de archivo habitualmente desconectados o destinos remotos de copia que solo se encienden según un horario.", + "Estado — al desactivar este control, el almacenamiento deja de contar en la categoría Almacenamiento de Health Monitor. Útil para volúmenes de archivo habitualmente desconectados o destinos remotos de backup que solo se encienden según un horario.", "Alertas — desactivarlo impide enviar avisos de este almacenamiento por los canales configurados, aunque los controles de estado sigan activos. Útil si quieres ver su estado en el panel sin recibir avisos." ], "outro": "Los almacenamientos excluidos siguen en la pestaña Almacenamiento con la insignia morada excluido, para mantener visible el inventario. El estado se guarda en la tabla SQLite excluded_storages." diff --git a/web/messages/es/docs/monitor/dashboard/storage.json b/web/messages/es/docs/monitor/dashboard/storage.json index 162982b3..7bb4c4ef 100644 --- a/web/messages/es/docs/monitor/dashboard/storage.json +++ b/web/messages/es/docs/monitor/dashboard/storage.json @@ -70,7 +70,7 @@ "items": [ "Ruta del dispositivo — /dev/sda, /dev/nvme0n1.", "Etiqueta de tipo: SATA / NVMe y su icono.", - "Etiqueta de sistema: marca naranja para los discos identificados como discos del SO. Se detectan mediante los montajes de / y /boot y reciben la etiqueta System. La ausencia de etiqueta no demuestra que se puedan borrar o reutilizar sin riesgo.", + "Etiqueta de sistema: marca naranja para los discos en uso por el host: montajes del sistema (/, /boot, /usr, /var…), swap activa, miembros de pools ZFS, volúmenes físicos LVM, miembros de RAID activos o etiquetas de partición del sistema. La ausencia de etiqueta no demuestra que se puedan borrar o reutilizar sin riesgo.", "Modelo: fabricante y modelo de smartctl -i.", "Capacidad: expresada en unidades legibles.", "Temperatura: °C actuales, con color según el umbral del tipo de disco; NVMe admite umbrales más altos que SATA.", @@ -84,7 +84,7 @@ }, "external": { "heading": "Almacenamiento externo (USB)", - "body": "Las unidades USB tienen una tarjeta propia, visible cuando hay alguna conectada. Muestra los mismos campos que los discos internos y una etiqueta naranja USB. Como suelen conectarse solo para copias o transferencias ocasionales, se conservan sus observaciones, pero los errores de E/S de una unidad USB desconectada no se escalan." + "body": "Las unidades USB tienen una tarjeta propia, visible cuando hay alguna conectada. Muestra los mismos campos que los discos internos y una etiqueta naranja USB. Como suelen conectarse solo para backups o transferencias ocasionales, se conservan sus observaciones, pero los errores de E/S de una unidad USB desconectada no se escalan." }, "drillIn": { "heading": "Diálogo de detalle del disco", @@ -112,14 +112,14 @@ "pdfPreviewAlt": "Primera página del informe SMART: resumen ejecutivo con indicador PASSED e información del disco", "pdfPreviewCaption": "Primera página: resumen, indicador PASSED e información completa del disco. El PDF de ejemplo incluye desgaste SSD, todos los atributos SMART e historial de pruebas.", "pdfDownloadLabel": "Descargar informe SMART de ejemplo (PDF)", - "pdfSectionsIntro": "El informe tiene seis secciones principales:", + "pdfSectionsIntro": "El informe incluye estas secciones principales:", "pdfSections": [ "Resumen ejecutivo: estado PASSED/FAILED, evaluación clara del disco —correcto, con desgaste o fallando— y cuatro datos: fecha del informe, tipo de última prueba, resultado y atributos comprobados.", "Información del disco: modelo, serie, capacidad, tipo HDD/SSD/NVMe, familia, formato, interfaz (SATA 3.3 · 6.0 Gb/s, …), TRIM, temperatura y umbral óptimo, horas y ciclos de encendido, SMART, sectores pendientes y reasignados y errores CRC.", "Desgaste y vida útil SSD (solo SSD/NVMe): indicador de vida restante, atributo de origen, desgaste actual, datos escritos y horas de encendido.", "Atributos SMART completos: ID, nombre, valor, peor valor, umbral, valor bruto y estado de cada atributo. Los principales —Reallocated Sector Ct, Power On Hours, Reported Uncorrect, UDMA CRC Error Count, Media Wearout Indicator, …— incluyen una explicación breve bajo su fila.", "Última autoprueba e historial completo: última prueba con tipo, resultado, mensaje final y horas de encendido en ese momento, más una tabla numerada de todas las pruebas conservadas.", - "Recomendaciones: acciones según el resultado. Para discos correctos: disco sano / pruebas periódicas / estrategia de copias. Si los atributos salen de rango, incluye indicaciones de sustitución." + "Recomendaciones: acciones según el resultado. Para discos correctos: disco sano / pruebas periódicas / estrategia de backups. Si los atributos salen de rango, incluye indicaciones de sustitución." ], "pdfOutro": "El navegador crea el informe imprimible; Imprimir y Guardar como PDF abren su diálogo de impresión. Elige un nombre como SMART-<short-id>.pdf. Conserva copias fechadas para comparar cambios o compartirlas con el fabricante.", "historyTitle": "Pestaña 3 — Historial", @@ -127,7 +127,7 @@ "historyImageCaption": "Historial de pruebas SMART del disco. Cada fila muestra tipo, fecha y hora, antigüedad, marca de última prueba y acciones de descarga de la salida smartctl y eliminación.", "historyIntro": "Pruebas cortas y extendidas completadas y conservadas para el disco. Cada entrada guarda la salida original de smartctl y los campos que Monitor interpreta para el panel. Acciones por fila:", "historyItems": [ - "Descargar: guarda la instantánea JSON con los datos de smartctl -a usados por el informe. Útil si el fabricante necesita los campos de diagnóstico originales.", + "Descargar: guarda el snapshot JSON de esa prueba (salida de smartctl -a --json, o nvme smart-log en NVMe cuando falla smartctl). Útil si el fabricante necesita los campos de diagnóstico originales.", "Eliminar: borra una prueba del historial manualmente. La retención de Programación (últimas 5 / 10 / 20) elimina automáticamente las más antiguas." ], "scheduleTitle": "Pestaña 4 — Programación", @@ -160,7 +160,7 @@ "tempWhyTitle": "Por qué importa el historial", "tempWhyItems": [ "Detectar tendencias. Una lectura aislada no revela que un disco lleva semanas calentándose, por ejemplo por fallos de ventilación, polvo o calor cercano. Las vistas de 7 y 30 días permiten ver la evolución.", - "Relacionar picos. Si una copia de seguridad o reconstrucción elevó brevemente la temperatura por encima del umbral, las vistas de 1 y 24 horas muestran si fue puntual o recurrente.", + "Relacionar picos. Si un backup o una reconstrucción elevó brevemente la temperatura por encima del umbral, las vistas de 1 y 24 horas muestran si fue puntual o recurrente.", "Ajustar umbrales. Antes de cambiarlos en Ajustes → Umbrales de Health Monitor, consulta el gráfico de 30 días para conocer el rango real de funcionamiento del disco." ], "obsTitle": "Historial de observaciones en las pestañas", @@ -184,7 +184,7 @@ ], "obsDedupTitle": "Agrupación de duplicados y repetición de avisos", "obsDedupBody1": "Las observaciones se agrupan por firma, una huella estable del tipo de error, dispositivo y campos clave del mensaje. Las repeticiones aumentan occurrence_count en la fila existente. Una firma distinta crea otra observación y cuenta como evento nuevo para las notificaciones.", - "obsDedupBody2": "Para evitar avisos en cascada, la primera combinación de disco, firma y gravedad notifica al operador. La misma combinación no vuelve a avisar hasta pasadas 24 horas, aunque aumente el contador. Un cambio de WARNING a CRITICAL interrumpe esa espera y avisa del empeoramiento.", + "obsDedupBody2": "Para evitar avisos en cascada, la primera combinación de disco, firma y gravedad notifica al usuario. La misma combinación no vuelve a avisar hasta pasadas 24 horas, aunque aumente el contador. Un cambio de WARNING a CRITICAL interrumpe esa espera y avisa del empeoramiento.", "obsDismissTitle": "Historial permanente y errores activos", "obsDismissBody1": "Las observaciones no se pueden descartar, ocultar ni borrar. Cada firma tiene una tarjeta; si se repite, aumenta el contador y actualiza la última fecha. El historial sigue al número de serie: otro disco empieza vacío aunque use el mismo puerto, y un cambio de nombre del kernel no pierde el historial.", "obsDismissBody2": "Resolver o descartar un error activo en Health Monitor no modifica sus observaciones. Se conservan después de la resolución automática, de modo que un aviso transitorio de la semana pasada siga visible hoy. Consulta Health Monitor para gestionar los errores activos." @@ -218,7 +218,7 @@ { "section": "Historial de autopruebas SMART", "endpoint": "/api/storage/smart//history", - "source": "Se guarda en /usr/local/share/proxmenux/smart/<disk>/ como instantáneas JSON." + "source": "Se guarda en /usr/local/share/proxmenux/smart/<disk>/ como snapshots JSON." }, { "section": "Observaciones permanentes", diff --git a/web/messages/es/docs/monitor/dashboard/system-logs.json b/web/messages/es/docs/monitor/dashboard/system-logs.json index a618efd4..7372eee7 100644 --- a/web/messages/es/docs/monitor/dashboard/system-logs.json +++ b/web/messages/es/docs/monitor/dashboard/system-logs.json @@ -18,7 +18,7 @@ "Entradas totales: número de registros dentro del intervalo del filtro activo.", "Errores: número de entradas con severidad ≤ 3 (err / crit / alert / emerg).", "Advertencias: número de entradas con severidad 4 (warning).", - "Copias de seguridad: número de entradas de tareas vzdump / PBS en el mismo intervalo." + "Backups: número de entradas de tareas vzdump / PBS en el mismo intervalo." ] }, "subtabs": { @@ -49,7 +49,7 @@ ], "maxLevelStoreTitle": "MaxLevelStore de journald", "maxLevelStoreBody": "En una instalación nueva de Proxmox, journald usa por defecto MaxLevelStore=warning, que descarta los mensajes info. Monitor lo detecta al arrancar y añade un archivo de configuración complementario (/etc/systemd/journald.conf.d/proxmenux-loglevel.conf) con el umbral info para conservar los mensajes informativos y los de mayor gravedad. Esto no incluye debug.", - "backupsTitle": "Copias de seguridad", + "backupsTitle": "Backups", "backupsBody": "Historial de tareas de Proxmox filtrado a las entradas relacionadas con backup. Una fila por tarea (vzdump, transferencias PBS, Garbage Collect, Verify) con el estado (OK / WARNINGS / ERROR), el guest implicado, el almacenamiento de origen, la duración y el UPID. Pulsa una fila para cargar el log completo de la tarea vía GET /api/task-log/<upid> — los mismos datos que Proxmox expone a través de Datacenter → Tasks, acotado a backups.", "notificationsTitle": "Notificaciones", "notificationsBody1": "Todas las notificaciones enviadas por Monitor: Telegram, Discord, correo electrónico, Gotify, ntfy, Slack, Teams y webhook. Cada fila muestra fecha y hora, canal, tipo de evento, severidad, título y cuerpo generados y, si la IA está activa, un selector para comparar su reescritura con el original.", @@ -72,12 +72,12 @@ "source": "La misma consulta, devuelta como texto plano para grep / less." }, { - "subtab": "Copias de seguridad", + "subtab": "Backups", "endpoint": "/api/backups", "source": "Historial de tareas PVE filtrado por vzdump, transferencias PBS, Garbage Collect, Verify." }, { - "subtab": "Detalles de una tarea de copia de seguridad", + "subtab": "Detalles de una tarea de backup", "endpoint": "/api/task-log/<upid>", "source": "Log completo de la tarea en texto plano leído de /var/log/pve/tasks/<index>/<upid>." }, diff --git a/web/messages/es/docs/monitor/dashboard/vms-lxcs-updates.json b/web/messages/es/docs/monitor/dashboard/vms-lxcs-updates.json index 6770a754..a7fff483 100644 --- a/web/messages/es/docs/monitor/dashboard/vms-lxcs-updates.json +++ b/web/messages/es/docs/monitor/dashboard/vms-lxcs-updates.json @@ -19,13 +19,13 @@ "Paquetes del SO para contenedores Debian, Ubuntu y Alpine.", "Una sección por cada aplicación registrada, incluidos los registros que solo contienen enlaces.", "Una sección Docker cuando Docker está registrado, con Docker Engine y las imágenes etiquetadas dentro del mismo bloque.", - "Una Actualización en bloque configurable, seguida de las opciones de copia, reinicio y programación." + "Una Actualización en bloque configurable, seguida de las opciones de backup, reinicio y programación." ] }, "mechanisms": { "heading": "Cómo se selecciona el método", "lead": "La vía integrada de Proxmox VE Helper-Scripts sigue el mecanismo oficial update-apps. El resto de instalaciones usa el método de paquetes, Docker o el comando personalizado correspondiente.", - "officialReference": "Referencia oficial: la documentación de update-apps de Proxmox VE Helper-Scripts explica los modos interactivo y desatendido, las copias de seguridad, la simulación, los recursos temporales de compilación, los registros y los códigos de salida.", + "officialReference": "Referencia oficial: la documentación de update-apps de Proxmox VE Helper-Scripts explica los modos interactivo y desatendido, los backups, la simulación, los recursos temporales de compilación, los registros y los códigos de salida.", "colSource": "Origen", "colAction": "Acción mostrada", "colNotes": "Qué se ejecuta", @@ -126,10 +126,10 @@ "callout": "La actualización en bloque no reemplaza los botones individuales. Es un acceso opcional para una selección que debe ejecutarse junta." }, "options": { - "heading": "Opciones de copia y reinicio", + "heading": "Opciones de backup y reinicio", "lead": "Las mismas opciones se aplican a ejecuciones manuales, en bloque y programadas:", "items": [ - "Instantánea antes de aplicar crea una copia vzdump en el almacenamiento seleccionado. Si la copia solicitada falla, la actualización no comienza.", + "Backup antes de aplicar crea un backup vzdump en el almacenamiento seleccionado. Si el backup solicitado falla, la actualización no comienza.", "Reiniciar después de aplicar reinicia el LXC únicamente tras una ejecución correcta.", "Las selecciones se guardan por LXC y son independientes de la lista de objetivos." ] @@ -196,8 +196,8 @@ "caption": "La sección del sistema operativo mantiene los paquetes separados de las acciones de aplicaciones y Docker." }, "options": { - "alt": "Opciones de actualización LXC con copia previa y reinicio posterior", - "caption": "Las preferencias de copia y reinicio se aplican a ejecuciones manuales, en bloque y programadas." + "alt": "Opciones de actualización LXC con backup previo y reinicio posterior", + "caption": "Las preferencias de backup y reinicio se aplican a ejecuciones manuales, en bloque y programadas." } } } diff --git a/web/messages/es/docs/monitor/dashboard/vms-lxcs.json b/web/messages/es/docs/monitor/dashboard/vms-lxcs.json index baabcc31..c8ee65c2 100644 --- a/web/messages/es/docs/monitor/dashboard/vms-lxcs.json +++ b/web/messages/es/docs/monitor/dashboard/vms-lxcs.json @@ -1,16 +1,16 @@ { "meta": { "title": "ProxMenux Monitor — Panel: VMs y LXCs | Documentación de ProxMenux", - "description": "Inventario de todos los invitados con CPU, memoria y disco en vivo. Los detalles incluyen configuración, recursos, copias de seguridad, resultados recientes del log Proxmox, notas y controles Iniciar / Apagar / Reiniciar / Forzar parada." + "description": "Inventario de todos los invitados con CPU, memoria y disco en vivo. Los detalles incluyen configuración, recursos, backups, el log de consola de los contenedores OCI, notas y controles Iniciar / Apagar / Reiniciar / Forzar parada." }, "header": { "title": "Panel: VMs y LXCs", - "description": "Inventario completo de invitados del nodo: cuatro métricas arriba, lista ordenable de VM y LXC abajo y detalles por invitado con configuración, recursos, copias, logs y cuatro controles de ciclo de vida (Iniciar / Apagar / Reiniciar / Forzar parada).", + "description": "Inventario completo de invitados del nodo: cuatro métricas arriba, lista ordenable de VM y LXC abajo y detalles por invitado con configuración, recursos, backups, el log de consola de los contenedores OCI y cuatro controles de ciclo de vida (Iniciar / Apagar / Reiniciar / Forzar parada).", "section": "ProxMenux Monitor · Panel" }, "intro": { "title": "Controles de los invitados", - "body": "Controla el ciclo de vida de los invitados desde esta pestaña. Las acciones pasan por POST /api/vms/<vmid>/control con confirmación explícita y actualizan la fila del invitado. El apagado forzado requiere el botón específico Forzar parada." + "body": "Controla el ciclo de vida de los invitados desde esta pestaña. Las acciones pasan por POST /api/vms/<vmid>/control; Reiniciar y Forzar parada piden escribir el VMID para confirmar, y la respuesta se refleja en la fila del invitado. El apagado forzado requiere el botón específico Forzar parada." }, "topRow": { "heading": "Fila superior: cuatro tarjetas de estadísticas", @@ -108,16 +108,16 @@ "mountsCalloutBody": "Una vista veraz y consciente de la capacidad de cada sitio donde el contenedor lee o escribe. Shares NFS o CIFS montados desde dentro del CT — invisibles para la UI web de Proxmox — aparecen aquí con el mismo aspecto y la misma sonda de salud que cualquier mount point configurado. Mounts remotos stale y zombie binds salen marcados antes de que muerdan durante un backup.", "logsTitle": "Pestaña 5 — Logs (solo contenedores OCI)", "logsBody": "Solo para contenedores de OCI manager Apps. Muestra la consola del proceso principal de la imagen, guardada en /var/log/proxmenux/oci/VMID.console.log: últimas 100, 500 o 1000 líneas, seguimiento en vivo mientras está activo, filtro y descarga. Relee el archivo al abrir y funciona detenido. Más en Contenedores OCI en ProxMenux Monitor.", - "backupsTitle": "Pestaña 6 — Copias de seguridad", + "backupsTitle": "Pestaña 6 — Backups", "backupsImageAlt": "Modal de vista en detalle por guest — pestaña Backups con la lista de backups disponibles, etiqueta de destino, tamaños y el botón Create Backup", - "backupsImageCaption": "Todas las copias del invitado en almacenamientos Proxmox configurados, de más nueva a más antigua. La cabecera muestra su número.", - "backupsIntro": "Lista las copias del invitado en almacenamientos Proxmox, empezando por la más reciente. El contador del título permite comprobar si tiene copias. Cada fila muestra:", + "backupsImageCaption": "Todos los backups del invitado en almacenamientos Proxmox configurados, de más nueva a más antigua. La cabecera muestra su número.", + "backupsIntro": "Lista los backups del invitado en almacenamientos Proxmox, empezando por la más reciente. El contador del título permite comprobar si tiene backups. Cada fila muestra:", "backupsItems": [ "Fecha y hora: momento de la ejecución.", "Etiqueta de destino — el almacenamiento donde vive (PBS-Cloud, PBS-Local, NFS-Backup, …) coloreada por estado.", - "Tamaño: tamaño final en disco de la copia." + "Tamaño: tamaño final en disco del backup." ], - "backupsOutro": "+ Crear copia inicia una copia en el almacenamiento marcado «Backup target» en Proxmox. Para restaurar usa la interfaz web de Proxmox; Monitor muestra las copias recientes del invitado y permite crearlas.", + "backupsOutro": "+ Crear backup inicia un backup en el almacenamiento marcado «Backup target» en Proxmox. Para restaurar usa la interfaz web de Proxmox; Monitor muestra los backups recientes del invitado y permite crearlos.", "firewallTitle": "Pestaña 7 — Cortafuegos", "firewallIntro": "Lee el registro del cortafuegos de cada invitado directamente del host, sin servicio extra ni consultas periódicas. La pestaña siempre aparece; el contenido depende de que el cortafuegos esté activado y de que alguna regla registre paquetes.", "firewallItems": [ @@ -186,9 +186,9 @@ "source": "Datos RRD de PVE (pvesh get /nodes/<node>/qemu/<id>/rrddata) condensados a una forma amigable para gráficas." }, { - "section": "Resultados recientes del log Proxmox", - "endpoint": "/api/vms//logs", - "source": "pvesh get /nodes/<node>/<qemu|lxc>/<vmid>/log --start 0 --limit 1000. Si el comando falla devuelve una lista vacía; no proporciona todos los logs internos del invitado." + "section": "Log de consola OCI (pestaña Logs)", + "endpoint": "/api/lxc//console-log", + "source": "Salida de consola del proceso principal de la imagen, leída de /var/log/proxmenux/oci/<vmid>.console.log en el host. Solo para contenedores OCI." }, { "section": "Backups disponibles para el guest", @@ -227,7 +227,7 @@ { "label": "Referencia de la API", "href": "/docs/monitor/api", - "tailRich": " — endpoints de VM y copias de seguridad." + "tailRich": " — endpoints de VM y backups." }, { "label": "Índice del panel", diff --git a/web/messages/es/docs/monitor/health-monitor.json b/web/messages/es/docs/monitor/health-monitor.json index 6b47c0f0..7e3a2071 100644 --- a/web/messages/es/docs/monitor/health-monitor.json +++ b/web/messages/es/docs/monitor/health-monitor.json @@ -68,7 +68,7 @@ { "category": "Almacenamiento", "checks": "Almacenamientos Proxmox, sistema de archivos raíz", - "events": "Uso de espacio por encima de los umbrales configurados en la raíz u otros sistemas de archivos supervisados (85% aviso / 95% crítico por defecto); exportación NFS desconectada; fallo de autenticación CIFS; pool LVM-thin lleno." + "events": "Uso de espacio por encima de los umbrales configurados en la raíz u otros sistemas de archivos supervisados (85% aviso / 95% crítico por defecto); almacenamientos PVE no disponibles; montajes NFS/CIFS bloqueados o en solo lectura inesperada; LVM-thin y otros almacenamientos de pool que superan los mismos umbrales." }, { "category": "Discos y SMART", @@ -98,7 +98,7 @@ { "category": "Actualizaciones del sistema", "checks": "Actualizaciones pendientes, actualizaciones de seguridad, kernel / versión de PVE, antigüedad del sistema", - "events": "Actualizaciones pendientes de seguridad o del kernel en uso; sistema sin actualizar desde hace mucho tiempo. Si hay actualizaciones, la cabecera de Vista general muestra Actualizar ahora. Ejecuta todo el proceso de actualización de ProxMenux; al cerrarlo, consulta el estado con ?refresh=1 para actualizar el indicador sin esperar al próximo ciclo." + "events": "Actualizaciones pendientes de seguridad o del kernel en uso; sistema sin actualizar desde hace mucho tiempo. Si hay actualizaciones, la categoría Actualizaciones de la ventana de estado de salud muestra Actualizar ahora. Ejecuta todo el proceso de actualización de ProxMenux; al cerrarlo, consulta el estado con ?refresh=1 para actualizar el indicador sin esperar al próximo ciclo." }, { "category": "Seguridad y Certificados", @@ -158,7 +158,7 @@ }, "dismiss": { "heading": "Hacer dismiss de alertas y la Suppression Duration", - "intro": "Algunos eventos son ruidosos por naturaleza — un System Updates: actualizaciones pendientes disponibles permanece cierto hasta que parches el host, y no quieres una notificación cada cinco minutos durante una semana. El botón Update Now de la cabecera de Overview es el atajo directo para resolver ese caso concreto en sitio; para todo lo demás, o cuando el parche se aplaza, el Monitor de salud ofrece además dos mecanismos de silenciamiento acoplados:", + "intro": "Algunos eventos son ruidosos por naturaleza: System Updates: actualizaciones pendientes disponibles sigue activo hasta que actualices el host, y no quieres una notificación cada cinco minutos durante una semana. El botón Actualizar ahora de la categoría Actualizaciones de la ventana de estado de salud resuelve ese caso en el sitio; para todo lo demás, o si aplazas la actualización, el Monitor de salud ofrece además dos mecanismos de silenciado relacionados:", "step1": "Descartar un evento desde su ventana. El botón ofrece 24 horas, 7 días o Permanentemente, independientemente del valor de la categoría. Envía POST /api/health/acknowledge con el error_key y las suppression_hours elegidas (-1 para permanente). El evento pasa a Descartados con su fecha acknowledged_at.", "dropdownImageAlt": "Menú para descartar una alerta: 24 horas, 7 días o permanentemente", "dropdownImageCaption": "La duración elegida se aplica solo a esta alerta; sin una elección individual, se usa el valor de la categoría. Los descartes permanentes llevan una etiqueta ámbar Permanente y normalmente no reaparecen. La excepción de temperatura crítica de CPU se explica más abajo.", @@ -187,7 +187,7 @@ }, { "finding": "Pool ZFS DEGRADED / FAULTED", - "why": "Las comprobaciones de capacidad del pool ZFS permiten descartarse. Otros hallazgos del pool siguen su propio indicador. Confirmar no repara un pool degradado o averiado." + "why": "Los hallazgos de estado del pool ZFS (DEGRADED, FAULTED, UNAVAIL) permiten descartarse, igual que las comprobaciones de capacidad del pool. Confirmar no repara un pool degradado o averiado." }, { "finding": "Errores I/O de disco con SMART FAILED", @@ -289,7 +289,7 @@ }, "rest": { "heading": "Endpoints REST", - "intro": "Las acciones de la ventana están disponibles por API para scripts, paneles o bots. Con la autenticación del Monitor activada, las llamadas necesitan un token Bearer válido, obtenido al iniciar sesión o en la pantalla de tokens API. Los cambios, como confirmar alertas, guardar ajustes o limpiar errores huérfanos, exigen full_admin; read_only recibe 403. Si la autenticación está desactivada o se rechazó, estos controles permiten acceder sin token.", + "intro": "Las acciones de la ventana están disponibles por API para scripts, paneles o bots. Las llamadas necesitan un token Bearer válido, obtenido al iniciar sesión o en la pantalla de tokens API. Los cambios, como confirmar alertas, guardar ajustes o limpiar errores huérfanos, exigen full_admin; read_only recibe 403.", "headerEndpoint": "Endpoint", "headerMethod": "Método", "headerUse": "Uso", @@ -297,7 +297,7 @@ { "endpoint": "/api/health", "method": "GET", - "use": "Comprobación ligera que devuelve JSON con status, timestamp y version. Sirve para comprobar palabras clave con Uptime Kuma; si la autenticación del Monitor está activa, el cliente debe enviar una cabecera Bearer." + "use": "Comprobación ligera que devuelve JSON con status, timestamp y version. Sirve para comprobar palabras clave con Uptime Kuma; el cliente debe enviar una cabecera Bearer." }, { "endpoint": "/api/health/status", diff --git a/web/messages/es/docs/monitor/index.json b/web/messages/es/docs/monitor/index.json index 1f0f4033..6d56db73 100644 --- a/web/messages/es/docs/monitor/index.json +++ b/web/messages/es/docs/monitor/index.json @@ -52,7 +52,7 @@ }, { "name": "Terminal", - "description": "Shell del host y acceso a consolas VM/CT compatibles en el navegador mediante xterm.js y WebSockets. Sigue el modo de autenticación configurado: si está desactivada o rechazada, los clientes con acceso de red pueden abrir sesiones sin iniciar sesión. No implica auditoría de cada comando." + "description": "Shell del host y acceso a consolas VM/CT compatibles en el navegador mediante xterm.js y WebSockets. Las sesiones no se auditan comando a comando." }, { "name": "Seguridad", @@ -114,7 +114,7 @@ "heading": "API REST e integraciones", "intro": "Los endpoints REST ofrecen datos de monitorización JSON por HTTP/HTTPS para widgets Homepage, sensores Home Assistant, pruebas Uptime Kuma y scripts. Grafana puede usar el exportador de texto Prometheus en /api/prometheus. Las peticiones se pueden hacer con curl.", "tokens": "Los tokens API de larga duración (365 días) se generan en Configuración → Tokens de acceso API o mediante POST /api/auth/generate-api-token.", - "bearer": "Envía tokens con Authorization: Bearer …. El endpoint público /api/health permite pruebas de disponibilidad sin credenciales. Bajo /api/auth/* hay rutas públicas de configuración/inicio/estado y rutas protegidas de cuentas y tokens; no todas son anónimas.", + "bearer": "Envía tokens con Authorization: Bearer …. /api/health también espera la cabecera Bearer, así que las pruebas de disponibilidad necesitan un token read_only. Bajo /api/auth/* hay rutas públicas de configuración/inicio/estado y rutas protegidas de cuentas y tokens; no todas son anónimas.", "catalog": "El catálogo de endpoints, rotación de tokens y prácticas de seguridad están en Referencia de la API. Los ejemplos para Homepage, Home Assistant, Grafana, Uptime Kuma y cURL están en Integraciones." }, "serviceControl": { diff --git a/web/messages/es/docs/monitor/integrations.json b/web/messages/es/docs/monitor/integrations.json index 4fbf74b1..c31f56c6 100644 --- a/web/messages/es/docs/monitor/integrations.json +++ b/web/messages/es/docs/monitor/integrations.json @@ -220,11 +220,11 @@ "heading": "n8n, Zapier y scripts propios", "intro": "Las herramientas de workflow y scripts pueden enviar notificaciones con un POST a /api/notifications/send, por ejemplo por un fallo de CI o un trabajo cron demasiado largo. Es un envío directo: omite la cola y la espera entre huellas de eventos. Conserva el formato por canal, la IA opcional y la entrega a los canales configurados. Controla los duplicados desde quien llama.", "n8nBody": "En n8n, usa un nodo HTTP Request con POST, la URL anterior y el mismo JSON que curl. Elige credenciales genéricas Header Auth: nombre Authorization y valor Bearer YOUR_API_TOKEN, sustituyendo el marcador. Conecta una programación, webhook u otro nodo para disparar la petición.", - "severityBody": "La gravedad usa INFO, WARNING o CRITICAL en mayúsculas. El objeto data aporta contexto. La IA usa el título y mensaje renderizados más el enriquecimiento admitido; no se garantiza que todos los campos entren en el prompt o la salida. Consulta Notificaciones → Catálogo de eventos." + "severityBody": "La gravedad usa INFO, WARNING o CRITICAL en mayúsculas. El objeto data aporta contexto del evento y campos de plantilla. En este endpoint, la IA solo recibe el título y el mensaje; los campos de data no se envían al proveedor. Consulta Notificaciones → Catálogo de eventos." }, "pveWebhook": { "heading": "Webhook nativo de Proxmox VE (entrante)", - "intro1": "El sistema de notificaciones llegó en PVE 8.1; los destinos webhook nativos requieren Proxmox VE 8.3 o posterior. Activar notificaciones en Ajustes intenta registrar el Monitor como destino. Los avisos que PVE enruta allí, como informes de copias o replicación, entran en su flujo de envío. El alta depende de que la configuración esté disponible y permita escritura.", + "intro1": "El sistema de notificaciones llegó en PVE 8.1; los destinos webhook nativos requieren Proxmox VE 8.3 o posterior. Activar notificaciones en Ajustes intenta registrar el Monitor como destino. Los avisos que PVE enruta allí, como informes de backups o replicación, entran en su flujo de envío. El alta depende de que la configuración esté disponible y permita escritura.", "intro2": "La mecánica, la plantilla de body que PVE envía, las entradas escritas en /etc/pve/notifications.cfg y el comportamiento en clusters están documentados en Notifications → Integración del webhook de PVE." }, "whereNext": { diff --git a/web/messages/es/docs/monitor/notifications.json b/web/messages/es/docs/monitor/notifications.json index 4be8fc87..e9dd8e17 100644 --- a/web/messages/es/docs/monitor/notifications.json +++ b/web/messages/es/docs/monitor/notifications.json @@ -91,7 +91,7 @@ "heading": "Configuración de los canales", "intro": "Actualmente se admiten seis canales: Telegram, Discord, Gotify, Email (SMTP), Pushover y Apprise. Los cinco primeros son integraciones nativas con sus propios campos de configuración. Apprise funciona como un concentrador genérico que añade unos 80 servicios adicionales (ntfy, Matrix, Slack, Teams, Pushbullet, AWS SNS, Mattermost…) mediante una única URL. Todos están documentados paso a paso a continuación.", "credsTitle": "Dónde se guardan las credenciales", - "credsBody": "Los tokens, las claves, las URL de webhook y las contraseñas SMTP se guardan localmente en la base de datos SQLite del Monitor dentro de /usr/local/share/proxmenux/. Los valores sensibles están protegidos y se ocultan en la interfaz. Solo salen del host para comunicarse con el servicio correspondiente. Una copia de ese directorio permite recuperar los canales configurados." + "credsBody": "Los tokens, las claves, las URL de webhook y las contraseñas SMTP se guardan localmente en la base de datos SQLite del Monitor dentro de /usr/local/share/proxmenux/. Los valores sensibles están protegidos y se ocultan en la interfaz. Solo salen del host para comunicarse con el servicio correspondiente. Un backup de ese directorio permite recuperar los canales configurados." }, "telegram": { "heading": "Telegram", @@ -120,7 +120,7 @@ "Añade el bot al grupo como miembro (y hazlo admin si el grupo lo requiere para publicar).", "Envía cualquier mensaje en el grupo.", "Abre https://api.telegram.org/bot<YOUR_TOKEN>/getUpdates en un navegador. Busca chat.id en la respuesta JSON — para grupos es un número negativo, para supergrupos empieza con -100.", - "En supergrupos con Temas, anota el message_thread_id de destino e introdúcelo en el campo opcional ID del tema." + "En supergrupos con Temas, anota el message_thread_id de destino e introdúcelo en el campo opcional ID de tema." ], "groupAlt": "Formulario de canal Telegram con Bot Token (enmascarado), Chat ID negativo prefijado con -100 indicando un supergrupo, y Topic ID 3 configurado para entregar a un tema específico", "groupCaption": "Supergrupo — el Chat ID empieza con -100… y el Topic ID opcional apunta a un hilo específico.", @@ -171,7 +171,7 @@ "Abre account.microsoft.com/security y activa la verificación en dos pasos.", "Si tu cuenta ofrece Opciones avanzadas de seguridad → Contraseñas de aplicación, elige Crear una contraseña de aplicación. Eso no garantiza que el correo admita autenticación SMTP con contraseña.", "Si Microsoft genera la contraseña, cópiala y comprueba que tu servicio SMTP la acepte.", - "Solo si el proveedor admite SMTP con contraseña, usa sus ajustes autorizados: Servidor smtp.office365.com para Exchange Online, Puerto 587, Modo TLS STARTTLS, Usuario tu dirección y Contraseña la credencial permitida. Outlook.com personal usa requisitos y ajustes distintos; no presupongas que estas credenciales funcionen." + "Solo si el proveedor admite SMTP con contraseña, usa sus ajustes autorizados: servidor SMTP smtp.office365.com para Exchange Online, Puerto 587, modo TLS STARTTLS, Nombre de usuario tu dirección y Contraseña la credencial permitida. Outlook.com personal usa requisitos y ajustes distintos; no presupongas que estas credenciales funcionen." ], "relayTitle": "Relay SMTP autoalojado", "relayBody": "Usa un relay SMTP que controles, como Postfix. El relay gestiona la autenticación hacia el proveedor. Configura la autenticación y TLS de Monitor según lo que exija el relay; que sea local no desactiva el cifrado." @@ -215,7 +215,7 @@ "rich": { "heading": "Mensajes enriquecidos, categorías y filtros por canal", "intro": "Cada canal tiene tres controles: Mensajes enriquecidos arriba, once secciones de Categorías de notificación con interruptores por evento y Enviar prueba abajo.", - "imageAlt": "Categorías con Mensajes enriquecidos destacado, secciones de VM/CT, copias, recursos, almacenamiento, red, seguridad, clúster, servicios, salud y actualizaciones, con interruptores y contadores, y botón Enviar prueba", + "imageAlt": "Categorías con Mensajes enriquecidos destacado, secciones de VM/CT, backups, recursos, almacenamiento, red, seguridad, clúster, servicios, salud y actualizaciones, con interruptores y contadores, y botón Enviar prueba", "imageCaption": "La flecha señala Mensajes enriquecidos. Debajo están las once categorías desplegables con controles por evento. Enviar prueba está al final.", "richTitle": "Mensajes enriquecidos", "richIntro": "Con Mensajes enriquecidos, cada aviso lleva un emoji de categoría y formato nativo del canal, como HTML en Telegram o tarjetas coloreadas en Discord. Desactivado, se envía el mismo contenido en texto simple:", @@ -228,7 +228,7 @@ "Control de categoría por canal. Por ejemplo, desactivar VM/CT suprime vm_start y sus equivalentes para ese canal. Se guarda como <channel>.events.<group>.", "Control de evento por canal. En una categoría activa puedes elegir enviar backup_complete a Discord pero no a Telegram. Se guarda como <channel>.event.<event_type>." ], - "togglesOutro": "Cada categoría indica los eventos activados frente al total y permite activar o desactivar el grupo completo con un clic, por ejemplo copias info o avisos de actualización, sin abrirlo." + "togglesOutro": "Cada categoría indica los eventos activados frente al total y permite activar o desactivar el grupo completo con un clic, por ejemplo backups info o avisos de actualización, sin abrirlo." }, "quiet": { "heading": "Horas de silencio", @@ -255,7 +255,7 @@ }, "digest": { "heading": "Resumen diario de eventos INFO", - "intro1": "El resumen diario es una opción que activas expresamente: agrupa avisos INFO aptos, como actualizaciones disponibles, a las 09:00 o a la hora elegida. Los resultados de copias y replicación y las acciones en directo están excluidos. Las horas de silencio aplazan los avisos no críticos durante un intervalo.", + "intro1": "El resumen diario es una opción que activas expresamente: agrupa avisos INFO aptos, como actualizaciones disponibles, a las 09:00 o a la hora elegida. Los resultados de backups y replicación y las acciones en directo están excluidos. Las horas de silencio aplazan los avisos no críticos durante un intervalo.", "intro2": "Está debajo de las horas de silencio en la misma tarjeta; consulta la figura en Horas de silencio. Ambos se activan por separado.", "purposeTitle": "Para qué sirve", "purposeItems": [ @@ -266,7 +266,7 @@ "howItems": [ "Activación por canal. Desactivado por defecto. Actívalo solo donde quieras resúmenes y deja los otros canales con avisos directos.", "Hora de entrega en tu zona horaria local. Por defecto 09:00 pero puedes elegir cualquier hora; el dispatcher dispara el digest dentro de ~60 s de ese minuto.", - "Incluye: eventos generales aptos de nivel INFO, como actualización de aplicación disponible, actualización de Tailscale disponible, actualización de optimización de ProxMenux disponible, actualizaciones de seguridad APT pendientes y aviso de límite de envíos. Los resultados de copias y otras acciones excluidas siguen en directo.", + "Incluye: eventos generales aptos de nivel INFO, como actualización de aplicación disponible, actualización de Tailscale disponible, actualización de optimización de ProxMenux disponible y actualizaciones de seguridad APT pendientes. Los resultados de backups y otras acciones excluidas siguen en directo.", "Qué nunca se retrasa:", "Persistencia. Los pendientes se guardan en SQLite, tabla digest_pending, hasta la hora elegida y sobreviven a reinicios.", "Sin eventos, sin resumen. Si no hay avisos INFO pendientes, no se envía ningún resumen vacío." @@ -274,7 +274,7 @@ "neverDelayedSub": [ "Los eventos CRITICAL siempre pasan inmediatamente.", "Los eventos WARNING siempre pasan inmediatamente.", - "Las acciones de VM/CT, sus fallos, inicio y resultados de copias, resultados de replicación y apagado o reinicio del host evitan el resumen incluso con nivel INFO. Las horas de silencio sí pueden retrasarlas si no son críticas." + "Las acciones de VM/CT, sus fallos, inicio y resultados de backups, resultados de replicación y apagado o reinicio del host evitan el resumen incluso con nivel INFO. Las horas de silencio sí pueden retrasarlas si no son críticas." ], "comboTitle": "Combinar horas de silencio y resumen diario", "comboBody": "Puedes activar ambos: silencio de 22:00 a 07:00 y resumen a 09:00. Los avisos no críticos del intervalo se liberan en el resumen de 07:00; los INFO aptos de fuera van al resumen diario. CRITICAL evita ambos; WARNING evita el diario, pero espera durante el silencio. Elige un intervalo sin avisos, un resumen a hora fija o ambos." @@ -300,8 +300,8 @@ }, { "stage": "Intervalo de repetición", - "what": "Tras un envío correcto se suprimen huellas repetidas y se guarda el estado en notification_last_sent. Las bases de CRITICAL, WARNING e INFO son 86400 s, igual que resources y updates. Excepciones: 5 s para acciones VM/CT y apagado/reinicio, 10 s para resultados de copias/replicación y 1800–3600 s para varias categorías de salud. Los ajustes explícitos por evento o grupo prevalecen.", - "tunable": "Sí: los ajustes explícitos del distribuidor por evento o grupo sustituyen los valores predeterminados." + "what": "Tras un envío correcto se suprimen huellas repetidas y se guarda el estado en notification_last_sent. Las bases de CRITICAL, WARNING e INFO son 86400 s, igual que resources y updates. Excepciones: 5 s para acciones VM/CT y apagado/reinicio, 10 s para resultados de backups/replicación y 1800–3600 s para varias categorías de salud. Los ajustes explícitos por evento o grupo prevalecen.", + "tunable": "Solo mediante la API de ajustes: una clave cooldown.<event_type> o cooldown.<group> sustituye los valores predeterminados; no hay control en la interfaz." }, { "stage": "Agrupación de ráfagas", @@ -321,7 +321,7 @@ }, "pveWebhook": { "heading": "Integración del webhook de PVE", - "intro1": "El sistema de notificaciones Proxmox tiene destinos sendmail, Gotify, SMTP y, en versiones compatibles, webhook. Monitor registra un destino webhook al activarse. Los avisos de PVE, como HA, replicación y copias desde la interfaz, entran así en el mismo proceso de envío.", + "intro1": "El sistema de notificaciones Proxmox tiene destinos sendmail, Gotify, SMTP y, en versiones compatibles, webhook. Monitor registra un destino webhook al activarse. Los avisos de PVE, como HA, replicación y backups desde la interfaz, entran así en el mismo proceso de envío.", "intro2": "Puedes verlo en Datacenter → Notificaciones → Destinos de notificación.", "imageAlt": "Diálogo Proxmox VE Edit Webhook mostrando el destino proxmenux-webhook autocreado con método POST, URL http://127.0.0.1:8008/api/notifications/webhook y una plantilla JSON usando escape title, escape message, escape severity, escape timestamp y campos json", "imageCaption": "El destino webhook del lado PVE como Proxmox lo ve (la GUI está en el locale configurado del host — español en este ejemplo). Los mismos campos aplican en cualquier idioma.", @@ -330,7 +330,7 @@ "Método y URL. POST http://127.0.0.1:8008/api/notifications/webhook sin HTTPS en Monitor. Con HTTPS, usa el receptor HTTP local del puerto 8009. Ambos permanecen en el mismo host.", "Plantilla del cuerpo. JSON con funciones Handlebars de PVE, guardado como base64 en la configuración. Al expandirse resulta:", "Matcher. Un bloque compañero matcher: proxmenux-matcher con mode all para que cada notificación de PVE llegue al destino.", - "Configuración privada. Se escribe webhook: proxmenux-webhook en /etc/pve/priv/notifications.cfg, con el secreto compartido en base64. El destino público lo referencia para enviar X-Webhook-Secret. El bloque contiene ese secreto." + "Configuración privada. Se escribe el bloque webhook: proxmenux-webhook en /etc/pve/priv/notifications.cfg con una entrada secret llamada X-Webhook-Secret, codificada en base64. El bloque del destino público solo contiene la plantilla del cuerpo, el método y la URL. El bloque privado no está vacío." ], "securityTitle": "Cómo se asegura el receptor", "securityIntro": "El receptor webhook en POST /api/notifications/webhook aplica distintas capas de seguridad según de dónde venga la petición:", @@ -360,7 +360,7 @@ "events": "vm_start, vm_start_warning, vm_stop, vm_shutdown, vm_fail, vm_restart, más los equivalentes ct_*, migration_start, migration_complete, migration_warning, migration_fail, replication_complete, replication_fail." }, { - "group": "Copias de seguridad", + "group": "Backups", "events": "backup_start, backup_complete, backup_warning, backup_fail, snapshot_complete, snapshot_fail." }, { @@ -403,7 +403,7 @@ "burstNote": "Los tipos agrupados burst_* (burst_auth_fail, burst_ip_block, burst_disk_io, etc.) sustituyen ráfagas por un resumen. No tienen controles propios en la interfaz y heredan los del evento de origen.", "backupResults": { "heading": "Resultados de backup", - "intro": "El informe de cada trabajo de copia determina su resultado, título, icono con Mensajes enriquecidos y fila de estado del correo.", + "intro": "El informe de cada trabajo de backup determina su resultado, título, icono con Mensajes enriquecidos y fila de estado del correo.", "headerIcon": "Icon", "headerResult": "Resultado", "headerWhen": "Cuándo", @@ -434,7 +434,7 @@ "El cuerpo detalla cada sistema invitado, con resultado, tamaño, duración y archivo, seguido de los totales.", "Las advertencias y los errores se listan una vez. Las líneas repetidas se muestran una sola vez con la causa principal primero; a partir de ocho líneas, el resto se cuenta en una línea de cierre y permanece en el log de la tarea de Proxmox.", "Un trabajo que falla antes del primer invitado muestra la causa indicada por Proxmox, por ejemplo un almacenamiento inexistente.", - "Los resúmenes conservan el resultado. Una copia en el resumen de horas de silencio conserva su icono. Los resultados de copias evitan el resumen diario." + "Los resúmenes conservan el resultado. Un backup en el resumen de horas de silencio conserva su icono. Los resultados de backups evitan el resumen diario." ] } }, diff --git a/web/messages/fr/docs/monitor/access-auth.json b/web/messages/fr/docs/monitor/access-auth.json index a81ae173..8932f21e 100644 --- a/web/messages/fr/docs/monitor/access-auth.json +++ b/web/messages/fr/docs/monitor/access-auth.json @@ -19,7 +19,7 @@ "reaching": { "heading": "Atteindre le tableau de bord", "intro": "Le ProxMenux Monitor se lie au 0.0.0.0:8008. Il y a trois façons communes d'y parvenir:", - "outro": "L’accès direct correspond à l’unité systemd par défaut. Le proxy inverse et Secure Gateway sont décrits ci-dessous. Les IP de X-Forwarded-For nécessitent PROXMENUX_TRUST_PROXY=1 et un proxy que vous contrôlez. X-Forwarded-Proto ou X-Forwarded-Host seuls n’activent pas cette confiance ; le frontend construit les URL API depuis l’origine du navigateur." + "outro": "L’accès direct correspond à l’unité systemd par défaut. Le proxy inverse et Secure Gateway sont décrits ci-dessous. La confiance accordée aux IP clientes de X-Forwarded-For nécessite PROXMENUX_TRUST_PROXY=1 et un proxy que vous contrôlez. La seule présence de X-Forwarded-Proto ou X-Forwarded-Host n’active pas la confiance envers le proxy. Sur les ports 80/443, le frontend utilise des URL relatives /api/* ; sur tout autre port, il appelle le port 8008 du même nom d’hôte." }, "firstLaunch": { "heading": "Premier démarrage", @@ -117,8 +117,8 @@ "loginImageCaption": "Une fois l'authentification configurée, chaque visite au tableau de bord commence ici. Avec 2FA activé, l'écran demande le code à chiffres 6 dans une deuxième étape après l'acceptation du mot de passe.", "loginFlowTitle": "Flux de connexion", "twofaIntro": "Avec 2FA, le premier appel renvoie requires_totp: true. Répétez-le avec le code à six chiffres :", - "publicTitle": "Accès public et sondes protégées", - "publicIntro": "La connexion et son état sont publics. La création du compte reste possible tant qu’aucun identifiant et mot de passe ne sont enregistrés, même après un refus de protection. Les données système exigent une authentification lorsque la protection est active :", + "publicTitle": "Points d’accès publics (sans jeton)", + "publicIntro": "La connexion, l’état de l’authentification, la configuration initiale et le point d’accès léger /api/system-info sont publics :", "publicItems": [ "/api/auth/login et /api/auth/status sont publics. /api/auth/setup crée le premier compte et refuse d’écraser des identifiants existants.", "/api/system-info est un endpoint public d’informations système légères, dont health.status. Il n’exige pas de jeton. /api/auth/status est également public et permet de vérifier la disponibilité." @@ -146,7 +146,7 @@ }, { "asset": "Secret TOTP de 2FA", - "algorithm": "TOTP standard (RFC 6238), avec secret encodé en base32. Les huit codes de récupération sont à usage unique et conservés sous forme de hachages SHA-256.", + "algorithm": "TOTP standard (RFC 6238), avec secret encodé en base32. Les huit codes de secours sont à usage unique et conservés sous forme de hachages SHA-256.", "where": "auth.json → totp_secret + backup_codes[]" }, { @@ -243,17 +243,17 @@ } ], "backupTitle": "Pourquoi les sauvegardes comptent", - "backupBody": "Si vous perdez l’appareil, utilisez un code de récupération conservé ou restaurez une sauvegarde préparée auparavant. Synchronisation cloud et exports varient selon l’application : vérifiez que votre méthode restaure bien les secrets TOTP. L’accès root à l’hôte permet aussi une récupération, décrite ci-dessous. Gardez une sauvegarde distincte et sécurisée.", + "backupBody": "Si vous perdez l’appareil d’authentification, utilisez un code de secours conservé ou restaurez l’application depuis une sauvegarde préparée auparavant. Synchronisation cloud et exports locaux varient selon l’application : vérifiez que votre méthode restaure bien les secrets TOTP. L’accès root à l’hôte permet aussi une récupération, décrite ci-dessous. Gardez une sauvegarde distincte et sécurisée.", "setupTitle": "Configuration étape par étape depuis le tableau de bord", "setupImageAlt": "Écran de configuration 2FA avec code QR et codes de sauvegarde", - "setupImageCaption": "Le dialogue 2FA montre un QR code, le secret Base32 pour la saisie manuelle et huit codes de récupération à usage unique. Copiez-les avant de fermer : ils ne seront plus affichés.", + "setupImageCaption": "Le dialogue de configuration 2FA montre un QR code, un secret Base32 pour la saisie manuelle et, après la vérification, huit codes de secours à usage unique. Copiez les codes avant de fermer le dialogue : ils ne seront plus affichés.", "setupSteps": [ "Installez l'application authentificateur sur votre téléphone (ou ouvrez votre gestionnaire de mots de passe). Une des applications du tableau ci-dessus. Vous n'avez besoin de le faire qu'une seule fois — la même application contiendra des codes pour chaque service que vous protégez.", "Se connecter au tableau de bord avec votre nom d'utilisateur et votre mot de passe.", - "Ouvrez l’onglet Sécurité, puis Activer 2FA. Le dialogue montre le QR code, le secret Base32 et huit codes de récupération.", + "Ouvrez l’onglet Sécurité dans la barre latérale du tableau de bord, puis cliquez sur Activer 2FA et Démarrer la configuration. Le dialogue montre le QR code et la clé manuelle ; les huit codes de secours apparaissent après la vérification du code.", "Ajouter l'entrée à l'application authentificateur:", - "Conservez les codes de récupération. Gardez les huit dans un gestionnaire de mots de passe, une note chiffrée ou une copie papier sécurisée. Chacun sert une fois si l’application est indisponible.", - "Confirmez avec le code actuel à six chiffres de l’application dans le champ « Code de vérification », puis validez. Le code change toutes les 30 secondes ; s’il expire pendant la saisie, utilisez le suivant.", + "Confirmez avec le code actuel à six chiffres de l’application dans le champ « Code de vérification » du dialogue de configuration, puis validez. Le code change toutes les 30 secondes ; s’il expire pendant la saisie, utilisez le suivant.", + "Conservez les codes de secours. Après la vérification, gardez les huit en lieu sûr dans un gestionnaire de mots de passe, une note chiffrée ou une copie papier sécurisée. Chacun sert une fois si votre application d’authentification est indisponible.", "Terminé. 2FA est actif. La prochaine connexion demande d’abord le mot de passe, puis le code actuel à six chiffres." ], "setupStep4Sub": [ @@ -261,17 +261,17 @@ "Alternative manuelle si le scan est impossible, notamment sur le même téléphone : Ajouter un compte → Saisir une clé de configuration. Choisissez un nom comme Proxmox Monitor, collez le secret Base32, laissez le Type sur Basé sur le temps et enregistrez." ], "testTitle": "Tester avant de déconnecter", - "testBody": "Gardez la session actuelle ouverte et testez une nouvelle connexion dans une fenêtre privée immédiatement après la configuration. Si le code échoue, vérifiez les horloges du serveur et du téléphone avant de fermer la session fonctionnelle. Si l’accès est perdu, utilisez un code de récupération ou modifiez auth.json depuis le shell de l’hôte.", + "testBody": "Gardez la session actuelle ouverte et testez une nouvelle connexion dans une fenêtre privée immédiatement après la configuration. Si le code est refusé, vérifiez les horloges du serveur et du téléphone avant de vous déconnecter de la session fonctionnelle. Si l’accès est déjà perdu, utilisez un code de secours ou modifiez auth.json depuis le shell de l’hôte.", "lostTitle": "Authentificateur perdu", "lostIntro": "Trois méthodes de récupération, de la moins intrusive à la plus intrusive :", "lostItems": [ - "Utilisez un code de récupération. Saisissez un des huit codes dans le champ TOTP. Il sert une fois ; les autres restent valides. Après connexion, reconfigurez 2FA dans les paramètres pour obtenir huit nouveaux codes.", + "Utilisez un code de secours. Saisissez un des huit codes enregistrés dans le champ TOTP. Il sert une fois ; les codes inutilisés restent valides. Après connexion, ouvrez Sécurité, choisissez Désactiver 2FA puis Activer 2FA pour obtenir huit nouveaux codes.", "Restaurer l'authentificateur à partir du cloud / sauvegarde. Si votre application a une synchronisation cloud (Google, Microsoft, Authy, Apple Passwords via iCloud Keychain, Ente, 2FAS) l'installe sur un nouvel appareil, se connecte et les entrées réapparaissent. Si votre application utilise un fichier d'exportation chiffré (Aegis, Raivo, FreeOTP+), installer l'application sur le nouvel appareil et importer le fichier.", "Désactivez 2FA depuis le shell de l'hôte. Lorsque les options précédentes ne sont pas disponibles, modifiez /root/.config/proxmenux-monitor/auth.json sur l'hôte Proxmox (vous avez besoin de root SSH ou d'un accès à la console), définissez totp_enabled sur false, enregistrez et redémarrez le service :" ], "lostShellOutro": "Vous pouvez vous connecter avec le nom d'utilisateur + mot de passe seulement, puis réactiver 2FA depuis Paramètres.", "disableTitle": "Désactiver 2FA", - "disableBody": "Ouvrez Sécurité et choisissez Désactiver 2FA. POST /api/auth/totp/disable exige le mot de passe actuel et un code TOTP ou de récupération valide. Le secret TOTP et les codes sont effacés. Retirez aussi l’ancienne entrée de l’application.", + "disableBody": "Ouvrez Sécurité et choisissez Désactiver 2FA. POST /api/auth/totp/disable exige le mot de passe actuel et un code TOTP ou de secours valide. Le secret TOTP et les codes de secours sont effacés. Retirez aussi l’ancienne entrée de votre application d’authentification.", "rejectedTitle": "Le code à chiffres 6 est toujours rejeté", "rejectedIntro": "TOTP dépend du temps : les horloges du serveur et du téléphone doivent différer de moins d’environ 30 s. Deux contrôles :", "rejectedItems": [ diff --git a/web/messages/fr/docs/monitor/ai-assistant.json b/web/messages/fr/docs/monitor/ai-assistant.json index c7bb3274..7d25d3fc 100644 --- a/web/messages/fr/docs/monitor/ai-assistant.json +++ b/web/messages/fr/docs/monitor/ai-assistant.json @@ -14,7 +14,7 @@ }, "intro": { "title": "Désactivé par défaut, un seul interrupteur pour l’activer", - "body": "La reformulation IA est désactivée par défaut. Activez-la dans Paramètres → Notifications → Avancé : amélioration IA. Si l’enrichissement ou la reformulation échoue, le texte du modèle original est envoyé. Chaque reformulation a un délai maximal de 25 secondes ; au-delà, le modèle est utilisé sans attendre indéfiniment." + "body": "La reformulation IA est désactivée par défaut. Activez-la dans Paramètres → Notifications → Avancé : amélioration IA. Si l’enrichissement ou la reformulation échoue, le répartiteur envoie le modèle original. Les reformulations de la file d’envoi des événements ont un délai maximal de 25 secondes ; une fois ce délai atteint, le modèle est envoyé au lieu d’attendre." }, "howItWorks": { "heading": "Comment ça marche", @@ -109,7 +109,7 @@ ], "customNote": "Le mode personnalisé fixe la sortie à 500 tokens, quel que soit le niveau de détail. Vous contrôlez les instructions ; le plafond évite les réponses trop longues.", "sizingTitle": "Taille pratique", - "sizingBody": "Estimez la consommation : événements reformulés × canaux IA × tokens d’entrée et de sortie par appel. Exemple : 50 événements × un canal × (500 en entrée + 300 en sortie) = 40 000 tokens par jour. Les valeurs réelles dépendent du modèle, du contexte, du cache et des limites du fournisseur. Détail par canal explique comment utiliser brief pour le chat au lieu de standard, avec des e-mails détaillés." + "sizingBody": "Estimez la consommation : événements reformulés × canaux avec IA × tokens d’entrée et de sortie par appel. Exemple : 50 événements × un canal × (2 000 en entrée + 300 en sortie) font environ 115 000 tokens par jour, car l’invite système par défaut compte à elle seule environ 1 500 tokens. La consommation et les coûts réels dépendent du modèle, du contexte, du cache et des limites du fournisseur. La section Détail par canal explique comment utiliser brief pour le chat au lieu de standard, tout en gardant des rapports e-mail détaillés." }, "providers": { "heading": "Fournisseurs d'IA", @@ -142,7 +142,7 @@ "items": [ "Clé API : console.anthropic.com/settings/keys", "Exemples de la liste de modèles fournie : claude-haiku-4-5-20251001, claude-sonnet-4-6, claude-opus-4-6.", - "Recommandation fournie : claude-haiku-4-5-20251001. Cette version précise est recommandée ; les anciens modèles Claude 3.5 ne figurent plus dans la liste fournie." + "Recommandation fournie : claude-haiku-4-5-20251001, un instantané figé plutôt qu’un alias évolutif." ] }, "gemini": { diff --git a/web/messages/fr/docs/monitor/api-reference.json b/web/messages/fr/docs/monitor/api-reference.json index 416a903e..c11019c5 100644 --- a/web/messages/fr/docs/monitor/api-reference.json +++ b/web/messages/fr/docs/monitor/api-reference.json @@ -162,7 +162,7 @@ { "endpoint": "/api/vms//backup", "method": "POST", - "use": "Crée une sauvegarde vzdump de VM ou LXC. Champs facultatifs à adapter au stockage : storage (cible PVE), mode (snapshot, suspend ou stop), compress (zstd, lzo, gzip ou none), protected (true ou false), notes, notification (auto, always, failure ou never) et pbs_change_detection (default, legacy ou data). Renvoie l’UPID de la tâche PVE." + "use": "Crée une sauvegarde vzdump d’une VM ou d’un LXC. Champs du corps, tous facultatifs sauf si les valeurs par défaut ne correspondent pas à l’organisation du stockage : storage (un stockage PVE), mode (snapshot, suspend ou stop), compress (zstd, lzo, gzip ou none), protected (true ou false), notes et pbs_change_detection (default, legacy ou data). Renvoie l’UPID de la tâche PVE." }, { "endpoint": "/api/vms//backups", @@ -286,7 +286,7 @@ { "endpoint": "/api/storage/smart//test", "method": "POST", - "use": "Lance un autotest SMART. Schéma du corps : '{'\"type\":\"short\"|\"long\"'}'." + "use": "Lance un autotest SMART. Schéma du corps : '{'\"test_type\":\"short\"|\"long\"'}'." }, { "endpoint": "/api/storage/smart/schedules", diff --git a/web/messages/fr/docs/monitor/architecture.json b/web/messages/fr/docs/monitor/architecture.json index 8c3b92ec..71a14829 100644 --- a/web/messages/fr/docs/monitor/architecture.json +++ b/web/messages/fr/docs/monitor/architecture.json @@ -73,13 +73,13 @@ "intro": "L’AppImage contient un système de fichiers monté à l’exécution. AppRun à sa racine prépare l’environnement et lance flask_server.py :", "consequencesIntro": "Deux conséquences de cette disposition :", "consequences": [ - "Environnement Python fourni. Interpréteur et paquets sont dans l’AppImage, sans installation dans le Python système. L’application utilise toujours les interfaces du noyau et les outils externes de l’hôte.", + "Paquets Python fournis. Les paquets Python sont livrés dans l’AppImage et s’exécutent avec l’interpréteur Python de l’hôte lui-même, 3.11 (PVE 8) ou 3.13 (PVE 9), sans rien installer dans le Python système de l’hôte. L’application utilise toujours les interfaces du noyau et les outils externes de l’hôte.", "Clients matériels inclus. L’AppImage fournit ipmitool, lm-sensors et upsc. Les mesures dépendent du matériel compatible, de l’accès aux capteurs et, pour l’onduleur, d’un serveur NUT configuré." ] }, "flask": { "heading": "Structure de l’application Flask", - "intro": "flask_server.py crée une instance Flask(__name__) avec CORS limité, enregistre directement neuf blueprints et initialise le terminal. Le tableau montre les modules principaux ; audit, sauvegarde VM et PBS sont aussi enregistrés. Les préchargements PVE ne tournent que sur les hôtes PVE.", + "intro": "flask_server.py crée une instance Flask(__name__) avec des origines CORS restreintes, enregistre directement dix blueprints et initialise les routes du terminal. Le tableau montre les modules principaux ; les blueprints PBS, liens du Monitor, audit et sauvegarde VM sont aussi enregistrés. Les préchargements propres à PVE ne tournent que sur les hôtes PVE.", "headerBlueprint": "Blueprint / module", "headerPrefix": "Préfixe des itinéraires", "headerOwns": "Responsabilité", @@ -242,10 +242,10 @@ "Mises à jour : paquets en attente et correctifs de sécurité.", "Journaux : motifs persistants, pics et cascades dans le journal système.", "Mémoire : interventions de l’OOM killer et pression mémoire prolongée.", - "Température : mesures CPU et disques comparées aux seuils de surveillance ; les capteurs disponibles dépendent du matériel.", + "CPU : utilisation et température CPU comparées aux seuils configurables ; les capteurs disponibles dépendent du matériel.", "Sécurité : échecs de connexion, blocages et état du jail Fail2Ban." ], - "afterIntro": "Les constats utilisent error_key, catégorie et gravité stables. Les lignes d’errors sont mises à jour avec last_seen et le compteur, sans duplication. L’envoi a aussi ses propres empreintes et temporisations.", + "afterIntro": "Les constats utilisent error_key, catégorie et gravité stables. Les enregistrements existants d’errors sont mis à jour sur place (last_seen, gravité, motif), sans duplication. L’envoi des notifications a aussi ses propres règles d’empreinte et de temporisation.", "cycleEnd": "Le nettoyage peut résoudre les erreurs anciennes selon la durée de suppression par catégorie et des règles d’état, retirer les entrées orphelines des ressources supprimées et purger events après 30 jours. Voir Tableau de bord → Health Monitor pour les catégories." }, "notifications": { @@ -264,9 +264,9 @@ "intro": "L’onglet Terminal relie un client léger xterm.js à un PTY du serveur via WebSocket. Deux modes existent :", "items": [ "Mode HTTP, par défaut : le serveur Flask intégré et flask-sock gèrent le passage au protocole WebSocket.", - "Mode HTTPS / WSS : utilise gevent.pywsgi.WSGIServer avec geventwebsocket.handler.WebSocketHandler pour WebSocket sur TLS." + "Mode HTTPS / WSS : le serveur TLS utilise gevent.pywsgi.WSGIServer avec son gestionnaire par défaut ; flask-sock gère les connexions WebSocket sur TLS." ], - "outro": "Les processus du terminal héritent de User=root. Avec authentification active, WebSocket exige un ticket bref à usage unique obtenu par le point d’accès authentifié avec droits administratifs. Si l’authentification est désactivée ou refusée, la connexion suit ce mode sans authentification.", + "outro": "Les processus enfants du terminal héritent de User=root du service. L’ouverture d’un WebSocket exige un ticket bref à usage unique obtenu par le point d’accès authentifié des tickets de terminal avec droits administratifs.", "proxyNote": "Avec un proxy inverse, autorisez WebSocket et ses en-têtes Upgrade et Connection. Le terminal a besoin de ce transfert." }, "proxy": { diff --git a/web/messages/fr/docs/monitor/dashboard/network.json b/web/messages/fr/docs/monitor/dashboard/network.json index 82828702..a3b3fd8b 100644 --- a/web/messages/fr/docs/monitor/dashboard/network.json +++ b/web/messages/fr/docs/monitor/dashboard/network.json @@ -162,7 +162,7 @@ } ], "reportTitle": "Rapport de latence réseau (PDF)", - "reportIntro": "Les deux modes ont un bouton Rapport 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.", + "reportIntro": "Les deux modes ont un bouton Rapport près du sélecteur de cible. Il ouvre un rapport imprimable des mesures ; enregistrez-le en PDF depuis la boîte de dialogue d’impression du navigateur et joignez-le à 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)", diff --git a/web/messages/fr/docs/monitor/dashboard/security.json b/web/messages/fr/docs/monitor/dashboard/security.json index 304d63dd..26511643 100644 --- a/web/messages/fr/docs/monitor/dashboard/security.json +++ b/web/messages/fr/docs/monitor/dashboard/security.json @@ -136,7 +136,7 @@ "configCaption": "Modification du jail sshd : réduisez Max Retries si vous utilisez SSH uniquement depuis votre sous-réseau, ou augmentez Ban Time pour un tableau de bord exposé sur Internet.", "outro": "Le guide Installation, configuration et désinstallation couvre aussi l’installation manuelle, la modification de SSH MaxAuthTries et le journal proxmenux-auth.log. Consultez ProxMenux → Sécurité → Fail2Ban.", "calloutTitle": "Sans Fail2Ban, ce mécanisme ne bloque pas les IP", - "calloutBody": "ProxMenux Monitor vérifie les IP bloquées par Fail2Ban au niveau applicatif 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 proxmenux-auth.log, mais ce mécanisme ne bloque pas les IP." + "calloutBody": "ProxMenux Monitor vérifie les IP bloquées dans la jail proxmenux de Fail2Ban au niveau applicatif avant de traiter les requêtes Flask, en gardant le résultat en cache pendant 30 secondes. Sans Fail2Ban, les échecs de connexion sont consignés dans proxmenux-auth.log et le point d’accès de connexion est limité à 5 tentatives par IP toutes les 5 minutes, mais aucune IP n’est bloquée." }, "lynis": { "heading": "Audit de sécurité Lynis", diff --git a/web/messages/fr/docs/monitor/dashboard/settings.json b/web/messages/fr/docs/monitor/dashboard/settings.json index 57f5e741..ee877c2b 100644 --- a/web/messages/fr/docs/monitor/dashboard/settings.json +++ b/web/messages/fr/docs/monitor/dashboard/settings.json @@ -76,7 +76,7 @@ }, "thresholds": { "heading": "Seuils du Health Monitor", - "intro": "La carte précédente définit la durée de silence après un rejet ; celle-ci règle la valeur qui déclenche une alerte. La plupart des contrôles ont des valeurs Avertissement et Critique réglables. Le tableau explique les exceptions, dont la règle combinée du swap et le détecteur RAM actuel.", + "intro": "La carte précédente définit la durée de silence après un rejet ; celle-ci règle la valeur qui déclenche une alerte. La plupart des contrôles à seuil ont des valeurs Avertissement et Critique réglables. Le tableau ci-dessous explique les exceptions, comme la règle combinée du swap.", "whatForTitle": "À quoi cela sert", "whatForIntro": "Les valeurs par défaut sont un point de départ ; chaque environnement a ses propres conditions :", "whatForItems": [ @@ -85,7 +85,7 @@ "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 à l’analyse suivante. Le Health Monitor lit /usr/local/share/proxmenux/health_thresholds.json à 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.", + "whatForOutro": "Les modifications de seuils prises en charge s’appliquent à l’analyse suivante. Le Health Monitor lit /usr/local/share/proxmenux/health_thresholds.json à chaque cycle sans redémarrage. Certains indicateurs, dont la température des disques, utilisent ces valeurs ; certaines barres de capacité gardent leurs propres limites visuelles.", "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", @@ -125,7 +125,7 @@ "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." + "gates": "Pression RAM de l’hôte." }, { "section": "Swap (seuil critique uniquement)", @@ -185,7 +185,7 @@ "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." + "gates": "Uniquement les stockages PVE de type LVM, LVM-thin, ZFS-pool, RBD, CephFS et PBS. Les stockages répertoire, NFS et CIFS relèvent de la ligne d’espace disque de l’hôte." }, { "section": "Pool ZFS", @@ -218,7 +218,7 @@ "toggleTitle": "Interrupteur de notification lié à la détection", "toggleBody": "L’interrupteur lxc_updates_available par canal dans Notifications → Services 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 type=lxc de /usr/local/share/proxmenux/managed_installs.json. 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." + "purgeBody": "La désactivation retire aussitôt toutes les entrées type=lxc de /usr/local/share/proxmenux/managed_installs.json. Les compteurs de mises à jour LXC de l’onglet VM et LXC disparaissent à l’actualisation suivante du tableau de bord. La réactivation remplit le registre au prochain cycle de détection, ou plus tôt par actualisation manuelle de l’API." }, "storageExclusions": { "heading": "Exclusions de stockage distant", diff --git a/web/messages/fr/docs/monitor/dashboard/storage.json b/web/messages/fr/docs/monitor/dashboard/storage.json index 54006e0b..7f5304ca 100644 --- a/web/messages/fr/docs/monitor/dashboard/storage.json +++ b/web/messages/fr/docs/monitor/dashboard/storage.json @@ -70,7 +70,7 @@ "items": [ "Chemin du périphérique — /dev/sda, /dev/nvme0n1.", "Étiquette de type — SATA / NVMe et icône associée.", - "Étiquette système — marque orange pour les disques identifiés comme hébergeant le système. La détection utilise les montages / et /boot et applique l’étiquette System. Son absence ne prouve pas qu’un disque peut être effacé ou réutilisé sans risque.", + "Étiquette système — marque orange pour les disques utilisés par l’hôte : points de montage système (/, /boot, /usr, /var…), swap actif, membres de pools ZFS, volumes physiques LVM, membres RAID actifs ou étiquettes de partitions système. Son absence ne prouve pas qu’un disque peut être effacé ou réutilisé sans risque.", "Modèle — fabricant et modèle de smartctl -i.", "Capacité — exprimée en unités lisibles.", "Température — valeur actuelle en °C, colorée selon le type de disque ; les seuils NVMe sont plus élevés que SATA.", @@ -112,7 +112,7 @@ "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 :", + "pdfSectionsIntro": "Le rapport comporte ces sections principales :", "pdfSections": [ "Synthèse — é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.", "Informations sur le disque — 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.", @@ -127,7 +127,7 @@ "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 smartctl et suppression.", "historyIntro": "Tests courts et étendus terminés et conservés pour le disque. Chaque entrée contient la sortie originale smartctl et les champs interprétés par Monitor pour le tableau de bord. Actions par ligne :", "historyItems": [ - "Télécharger — enregistre l’instantané JSON contenant les données smartctl -a utilisées par le rapport. Utile si le support demande les champs de diagnostic originaux.", + "Télécharger — enregistre l’instantané JSON de ce test (sortie de smartctl -a --json, ou nvme smart-log sur NVMe si smartctl échoue). Utile si le support du fabricant demande les champs de diagnostic originaux.", "Supprimer — retire manuellement un test de l’historique. La conservation de Planification (5 / 10 / 20 derniers) supprime automatiquement les plus anciens." ], "scheduleTitle": "Onglet 4 — Planification", diff --git a/web/messages/fr/docs/monitor/dashboard/vms-lxcs.json b/web/messages/fr/docs/monitor/dashboard/vms-lxcs.json index b3cd7448..febe9371 100644 --- a/web/messages/fr/docs/monitor/dashboard/vms-lxcs.json +++ b/web/messages/fr/docs/monitor/dashboard/vms-lxcs.json @@ -1,16 +1,16 @@ { "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." + "description": "L’onglet VM et LXC inventorie tous les invités de l’hôte avec l’utilisation CPU, mémoire et disque en direct. Les détails de chaque invité montrent configuration, ressources, sauvegardes, journal de console des conteneurs OCI, notes et commandes 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.", + "description": "Inventaire complet des invités du nœud : quatre mesures en haut, une liste triable de chaque VM et LXC en dessous et les détails par invité avec configuration, ressources, sauvegardes, journal de console des conteneurs OCI et les quatre commandes de cycle de vie (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 POST /api/vms/<vmid>/control avec confirmation explicite et actualisent la ligne de l'invité. L'arrêt forcé nécessite le bouton dédié Forcer l'arrêt." + "body": "Cet onglet contrôle le cycle de vie des invités. Les actions de cycle de vie passent par POST /api/vms/<vmid>/control ; Redémarrer et Forcer l'arrêt demandent de saisir le VMID pour confirmer, et la réponse est reflétée dans 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", @@ -186,9 +186,9 @@ "source": "Les données PVE RRD (pvesh get /nodes/<node>/qemu/<id>/rrddata) sont condensées à une forme facile à tracer." }, { - "section": "Résultats récents du journal Proxmox", - "endpoint": "/api/vms//logs", - "source": "pvesh get /nodes/<node>/<qemu|lxc>/<vmid>/log --start 0 --limit 1000. Un échec renvoie une liste vide ; ces données ne constituent pas les journaux système complets de l'invité." + "section": "Journal de console OCI (onglet Logs)", + "endpoint": "/api/lxc//console-log", + "source": "Sortie console du processus principal de l’image, lue depuis /var/log/proxmenux/oci/<vmid>.console.log sur l’hôte. Affiché uniquement pour les conteneurs OCI." }, { "section": "Sauvegardes disponibles pour les invités", diff --git a/web/messages/fr/docs/monitor/health-monitor.json b/web/messages/fr/docs/monitor/health-monitor.json index 6ad87f31..2e3654cd 100644 --- a/web/messages/fr/docs/monitor/health-monitor.json +++ b/web/messages/fr/docs/monitor/health-monitor.json @@ -68,7 +68,7 @@ { "category": "Stockage", "checks": "Stockages Proxmox, système de fichiers racine", - "events": "Seuils d’occupation dépassés sur la racine ou un autre système de fichiers surveillé (85% avertissement / 95% critique par défaut) ; export NFS indisponible ; échec d’authentification CIFS ; pool LVM-thin plein." + "events": "Seuils d’occupation dépassés sur la racine ou un autre système de fichiers surveillé (85% avertissement / 95% critique par défaut) ; stockages PVE indisponibles ; montages NFS/CIFS figés ou passés en lecture seule de façon inattendue ; stockages LVM-thin et autres pools dépassant les mêmes seuils." }, { "category": "Disques & SMART", @@ -98,7 +98,7 @@ { "category": "Mises à jour du système", "checks": "Mises à jour en attente, mises à jour de sécurité, version noyau / PVE, âge du système", - "events": "Mises à jour de sécurité ou du noyau utilisé en attente ; système non mis à jour depuis longtemps. Le bouton Mettre à jour maintenant apparaît dans l’aperçu lorsque des mises à jour sont disponibles. Il lance la procédure complète ProxMenux ; sa fermeture actualise l’état avec ?refresh=1 sans attendre le cycle suivant." + "events": "Mises à jour de sécurité ou du noyau utilisé en attente ; système non mis à jour depuis longtemps. La catégorie Mises à jour de la fenêtre État de santé affiche un bouton Mettre à jour maintenant lorsque des mises à jour sont en attente. Il lance la procédure complète de mise à jour ProxMenux dans la fenêtre ; sa fermeture actualise l’état avec ?refresh=1 afin que l’indicateur reflète le nouvel état sans attendre le cycle suivant." }, { "category": "Sécurité et certificats", @@ -158,7 +158,7 @@ }, "dismiss": { "heading": "Masquer les alertes et choisir la durée de mise en sourdine", - "intro": "Certains événements persistent, comme Mises à jour système : mises à jour disponibles tant que l’hôte n’est pas mis à jour. Une notification toutes les cinq minutes serait inutile. Le bouton Mettre à jour maintenant de l’aperçu permet de résoudre ce cas directement. Pour les autres cas ou les mises à jour reportées, deux mécanismes liés permettent de masquer les alertes :", + "intro": "Certains événements persistent par nature, comme Mises à jour système : mises à jour disponibles tant que l’hôte n’est pas mis à jour, et une notification toutes les cinq minutes pendant une semaine serait inutile. Le bouton Mettre à jour maintenant de la catégorie Mises à jour de la fenêtre État de santé permet de résoudre ce cas directement. Pour les autres cas ou les mises à jour reportées, la surveillance offre aussi deux mécanismes liés pour masquer les alertes :", "step1": "Masquer un événement dans la fenêtre. Le menu propose 24 heures, 7 jours ou Définitivement, indépendamment de la catégorie. Le choix envoie POST /api/health/acknowledge avec error_key et suppression_hours (-1 pour une durée permanente). L’événement passe dans la liste masquée avec l’horodatage acknowledged_at.", "dropdownImageAlt": "Menu pour masquer une alerte : 24 heures, 7 jours ou définitivement", "dropdownImageCaption": "La durée choisie ne concerne que cette alerte ; sans choix individuel, la valeur de la catégorie s’applique. Les alertes masquées définitivement portent un badge ambre Permanent et ne se déclenchent normalement plus. La température CPU critique constitue l’exception décrite plus bas.", @@ -187,7 +187,7 @@ }, { "finding": "ZFS pool DEGRADED / FAULTED", - "why": "Les contrôles de capacité des pools ZFS autorisent l’acquittement. Les autres constats suivent leur propre indicateur. Acquitter ne répare pas un pool dégradé ou défaillant." + "why": "Les constats d’état des pools ZFS (DEGRADED, FAULTED, UNAVAIL) autorisent explicitement l’acquittement, tout comme les contrôles de capacité des pools. Acquitter ne répare pas un pool dégradé ou défaillant." }, { "finding": "Erreurs d'entrée/sortie du disque avec SMART FAILED", @@ -289,7 +289,7 @@ }, "rest": { "heading": "Points d’accès REST", - "intro": "Les actions de la fenêtre sont accessibles par API pour scripts, tableaux de bord ou bots. Si l’authentification du Monitor est activée, un jeton Bearer valide issu de la connexion ou de l’écran des jetons API est requis. Les modifications, comme acquitter, enregistrer ou nettoyer les erreurs orphelines, exigent full_admin ; read_only reçoit 403. Si l’authentification est désactivée ou refusée, ces contrôles autorisent l’accès sans jeton.", + "intro": "Les actions de la fenêtre sont aussi accessibles par API pour scripts, tableaux de bord personnalisés ou bots. Les appels exigent un jeton Bearer valide, issu de la connexion ou de l’écran des jetons API. Les modifications, comme acquitter des alertes, enregistrer les réglages de suppression ou nettoyer les erreurs orphelines, exigent la portée full_admin ; read_only reçoit 403.", "headerEndpoint": "Point d’accès", "headerMethod": "Méthode", "headerUse": "Utilisation", @@ -297,7 +297,7 @@ { "endpoint": "/api/health", "method": "GET", - "use": "Contrôle léger renvoyant du JSON avec status, timestamp et version. Convient aux contrôles de mots-clés Uptime Kuma ; si l’authentification du Monitor est activée, le client doit envoyer un en-tête Bearer." + "use": "Contrôle léger renvoyant du JSON avec status, timestamp et version. Convient aux contrôles de mots-clés Uptime Kuma ; le client doit envoyer un en-tête Bearer." }, { "endpoint": "/api/health/status", diff --git a/web/messages/fr/docs/monitor/index.json b/web/messages/fr/docs/monitor/index.json index 511bb3e6..be430c57 100644 --- a/web/messages/fr/docs/monitor/index.json +++ b/web/messages/fr/docs/monitor/index.json @@ -52,7 +52,7 @@ }, { "name": "Terminal", - "description": "Shell de l’hôte et consoles VM/CT compatibles dans le navigateur via xterm.js et WebSockets. Le mode d’authentification configuré s’applique : désactivé ou refusé, il permet aux clients ayant accès au réseau d’ouvrir une session sans connexion. Cela n’implique pas un audit de chaque commande." + "description": "Shell de l’hôte et consoles VM/CT compatibles dans le navigateur via xterm.js et WebSockets. Les sessions ne sont pas auditées commande par commande." }, { "name": "Sécurité", @@ -114,7 +114,7 @@ "heading": "REST API et intégrations", "intro": "Les points d’accès REST exposent les mesures en JSON par HTTP/HTTPS pour Homepage, Home Assistant, Uptime Kuma et les scripts. Grafana peut utiliser l’exporteur texte Prometheus séparé sur /api/prometheus. Les requêtes peuvent être faites avec curl.", "tokens": "Les jetons API à longue durée de vie (365 jours) sont générés à partir de Paramètres → API Tokens ou via POST /api/auth/generate-api-token.", - "bearer": "Envoyez les jetons via Authorization: Bearer …. Le point public /api/health convient aux sondes de disponibilité sans identifiants. Sous /api/auth/*, certaines routes de configuration/connexion/état sont publiques, mais celles de gestion du compte et des jetons sont protégées.", + "bearer": "Envoyez les jetons via Authorization: Bearer …. /api/health attend aussi l’en-tête Bearer : les sondes de disponibilité ont donc besoin d’un jeton read_only. Sous /api/auth/* se trouvent à la fois des routes publiques de configuration/connexion/état et des routes protégées de gestion du compte et des jetons ; elles ne sont pas toutes anonymes.", "catalog": "Le catalogue complet des points d'accès, les conseils de rotation des jetons et les bonnes pratiques de sécurité se trouvent dans la référence API. Des exemples pour Homepage, Home Assistant, Grafana et Uptime Kuma, ainsi qu'un modèle générique cURL, sont proposés dans les intégrations." }, "serviceControl": { diff --git a/web/messages/fr/docs/monitor/integrations.json b/web/messages/fr/docs/monitor/integrations.json index 88c6973d..dc4373ac 100644 --- a/web/messages/fr/docs/monitor/integrations.json +++ b/web/messages/fr/docs/monitor/integrations.json @@ -220,7 +220,7 @@ "heading": "n8n, Zapier et scripts personnalisés", "intro": "Les workflows et scripts peuvent envoyer des notifications par POST vers /api/notifications/send, par exemple après un échec CI ou une tâche trop longue. Cet envoi direct contourne la file et le délai entre empreintes d’événements. Il conserve le format par canal, l’IA facultative et la livraison. Gérez les doublons dans l’appelant.", "n8nBody": "Dans n8n, utilisez un nœud HTTP Request avec POST, l’URL ci-dessus et le même JSON que curl. Choisissez les identifiants génériques Header Auth : nom Authorization et valeur Bearer YOUR_API_TOKEN, en remplaçant le marqueur. Reliez un planning, webhook ou autre nœud pour déclencher la requête.", - "severityBody": "La gravité utilise INFO, WARNING ou CRITICAL en majuscules. L’objet data apporte du contexte. L’IA reçoit le titre et le message rendus avec les enrichissements pris en charge ; tous les champs ne sont pas garantis dans ses instructions ou sa sortie. Voir Notifications → Catalogue des événements." + "severityBody": "La gravité utilise INFO, WARNING ou CRITICAL en majuscules. L’objet data apporte le contexte de l’événement et les champs du modèle. Sur ce point d’accès, la reformulation IA ne reçoit que le titre et le message ; les champs de data ne sont pas envoyés au fournisseur. Voir Notifications → Catalogue des événements pour la signification des événements." }, "pveWebhook": { "heading": "Webhook natif Proxmox VE (entrant)", diff --git a/web/messages/fr/docs/monitor/notifications.json b/web/messages/fr/docs/monitor/notifications.json index 6f27ef60..68f6f549 100644 --- a/web/messages/fr/docs/monitor/notifications.json +++ b/web/messages/fr/docs/monitor/notifications.json @@ -171,7 +171,7 @@ "Ouvrez account.microsoft.com/security et activez la vérification en deux étapes.", "Si votre compte propose Options de sécurité avancées → Mots de passe d’application, choisissez Créer un mot de passe d’application. Cela ne garantit pas l’acceptation de SMTP avec mot de passe.", "Si Microsoft crée ce mot de passe, copiez-le et vérifiez son acceptation par le service SMTP.", - "Uniquement si SMTP avec mot de passe est autorisé, utilisez les paramètres approuvés : Serveur smtp.office365.com pour Exchange Online, Port 587, Mode TLS STARTTLS, Identifiant votre adresse et Mot de passe la valeur autorisée. Outlook.com personnel a d’autres paramètres et exigences." + "Uniquement si votre fournisseur autorise SMTP avec mot de passe, saisissez ses paramètres approuvés : Hôte SMTP smtp.office365.com pour Exchange Online, Port 587, Mode TLS STARTTLS, Nom d'utilisateur l’adresse de votre boîte aux lettres et Mot de passe l’identifiant SMTP autorisé. Les paramètres et exigences d’authentification d’Outlook.com personnel sont différents ; ne supposez pas que ces identifiants fonctionneront." ], "relayTitle": "Relais SMTP auto-hébergé", "relayBody": "Dirigez Monitor vers un relais SMTP contrôlé, par exemple Postfix. Le relais gère l’authentification du fournisseur. Configurez authentification et TLS selon le relais ; son caractère local ne désactive pas le chiffrement." @@ -266,7 +266,7 @@ "howItems": [ "Activation par canal. Désactivé par défaut. Activez-le seulement là où vous voulez un résumé ; les autres canaux restent en direct.", "Heure de livraison locale, 09:00 par défaut. L’envoi se déclenche à environ 60 s près.", - "Inclus : événements génériques admissibles de niveau INFO, comme mise à jour d’application disponible, mise à jour Tailscale disponible, mise à jour d’optimisation ProxMenux disponible, mises à jour de sécurité APT en attente et avis de limitation d’envoi. Résultats de sauvegarde et actions exemptées restent en direct.", + "Inclus dans le résumé : événements génériques admissibles de niveau INFO. Exemples : mise à jour d’application disponible, mise à jour Tailscale disponible, mise à jour d’optimisation ProxMenux disponible et mises à jour de sécurité APT en attente. Les résultats de sauvegarde et les autres événements d’action exemptés restent en direct.", "Ce qui n'est jamais retardé:", "Persistance. Les événements restent dans SQLite, table digest_pending, jusqu’à l’heure prévue, même après redémarrage.", "Sans événement, sans résumé. Aucun résumé vide n’est envoyé si aucun INFO n’attend." @@ -301,7 +301,7 @@ { "stage": "Délai de répétition", "what": "Après livraison réussie, les répétitions sont supprimées ; l’état est dans notification_last_sent. Base pour CRITICAL, WARNING, INFO, resources et updates : 86400 s. Exceptions : 5 s pour actions VM/CT et arrêt/redémarrage, 10 s pour résultats sauvegarde/réplication, 1800–3600 s pour plusieurs états de santé. Les réglages explicites d’événement/groupe prévalent.", - "tunable": "Oui : des valeurs explicites par événement ou groupe remplacent les valeurs du répartiteur." + "tunable": "Uniquement via l’API des paramètres : une clé cooldown.<event_type> ou cooldown.<group> remplace les valeurs par défaut ; aucun contrôle n’existe dans l’interface." }, { "stage": "Regroupement des rafales", @@ -330,7 +330,7 @@ "Méthode et URL. POST http://127.0.0.1:8008/api/notifications/webhook sans HTTPS Monitor ; avec HTTPS, récepteur HTTP local séparé sur 8009. Les deux restent sur l’hôte.", "Modèle du corps. JSON avec aides Handlebars natives de PVE, stocké en base64 dans la configuration. Une fois décodé :", "Matcher. Un bloc d'accompagnement matcher: proxmenux-matcher avec mode all afin que chaque notification PVE atteigne la cible.", - "Configuration privée. La configuration écrit webhook: proxmenux-webhook dans /etc/pve/priv/notifications.cfg avec le secret partagé en base64. La cible publique le référence pour envoyer X-Webhook-Secret. Le bloc n’est pas vide." + "Configuration privée. La configuration écrit le bloc correspondant webhook: proxmenux-webhook dans /etc/pve/priv/notifications.cfg avec une entrée secret nommée X-Webhook-Secret, encodée en base64. Le bloc public de la cible ne contient que le modèle du corps, la méthode et l’URL. Le bloc privé n’est pas une ébauche vide." ], "securityTitle": "Comment le récepteur est sécurisé", "securityIntro": "Le récepteur webhook de POST /api/notifications/webhook applique différentes couches de sécurité selon l'origine de la demande:", diff --git a/web/messages/it/docs/monitor/access-auth.json b/web/messages/it/docs/monitor/access-auth.json index 6a69a76d..59d77edd 100644 --- a/web/messages/it/docs/monitor/access-auth.json +++ b/web/messages/it/docs/monitor/access-auth.json @@ -19,7 +19,7 @@ "reaching": { "heading": "Raggiungere la dashboard", "intro": "ProxMenux Monitor si lega a 0.0.0.0:8008. Ci sono tre modi comuni per raggiungerlo:", - "outro": "L’accesso diretto corrisponde all’unità systemd predefinita. Proxy inverso e Secure Gateway sono descritti più avanti. Per usare l’IP in X-Forwarded-For servono PROXMENUX_TRUST_PROXY=1 e un proxy sotto il tuo controllo. X-Forwarded-Proto o X-Forwarded-Host da soli non attivano tale fiducia; il frontend costruisce gli URL API dall’origine del browser." + "outro": "L’accesso diretto corrisponde all’unità systemd predefinita. Proxy inverso e Secure Gateway sono descritti più avanti. Per fidarsi degli IP client in X-Forwarded-For servono PROXMENUX_TRUST_PROXY=1 e un proxy sotto il tuo controllo. La sola presenza di X-Forwarded-Proto o X-Forwarded-Host non attiva la fiducia nel proxy. Sulle porte 80/443 il frontend usa URL /api/* relativi; su qualsiasi altra porta chiama la porta 8008 sullo stesso nome host." }, "firstLaunch": { "heading": "Procedura al primo avvio", @@ -117,8 +117,8 @@ "loginImageCaption": "Dopo la configurazione, l’accesso inizia da questa schermata. Con 2FA viene richiesto il codice a sei cifre dopo l’accettazione della password.", "loginFlowTitle": "Flusso di accesso", "twofaIntro": "Con 2FA, la prima chiamata restituisce requires_totp: true. Ripetila con il codice a sei cifre:", - "publicTitle": "Accesso pubblico e controlli protetti", - "publicIntro": "Accesso e stato dell’autenticazione sono pubblici. La creazione dell’account è possibile finché non sono salvati nome e password, anche dopo aver rifiutato la protezione. I dati di sistema richiedono autenticazione quando la protezione è attiva:", + "publicTitle": "Endpoint pubblici (senza token)", + "publicIntro": "Accesso, stato dell’autenticazione, configurazione iniziale e l’endpoint leggero /api/system-info sono pubblici:", "publicItems": [ "/api/auth/login e /api/auth/status sono pubblici. /api/auth/setup crea il primo account e rifiuta di sovrascrivere credenziali esistenti.", "/api/system-info è un endpoint pubblico con informazioni di base sul sistema, incluso health.status. Non richiede un token. Anche /api/auth/status è pubblico e consente di verificare la raggiungibilità." @@ -146,7 +146,7 @@ }, { "asset": "Segreto TOTP della 2FA", - "algorithm": "TOTP standard (RFC 6238), con segreto in base32. Gli otto codici di recupero sono monouso e vengono salvati come hash SHA-256.", + "algorithm": "TOTP standard (RFC 6238), con segreto in base32. Gli otto codici di backup sono monouso e vengono salvati come hash SHA-256.", "where": "auth.json → totp_secret + backup_codes[]" }, { @@ -243,17 +243,17 @@ } ], "backupTitle": "Perché servono i backup", - "backupBody": "Se perdi il dispositivo, usa un codice di recupero salvato oppure ripristina un backup configurato in precedenza. Sincronizzazione cloud ed esportazioni variano per app: verifica che ripristinino davvero i segreti TOTP. L’accesso root all’host permette anche il recupero descritto sotto. Conserva una copia separata e sicura.", + "backupBody": "Se perdi il dispositivo di autenticazione, usa un codice di backup salvato oppure ripristina l’app da un backup configurato in precedenza. Sincronizzazione cloud ed esportazioni locali variano per app: verifica che il metodo scelto ripristini davvero i segreti TOTP. L’accesso root all’host permette anche il recupero descritto sotto. Conserva un backup separato e sicuro.", "setupTitle": "Impostazione passo passo dal cruscotto", "setupImageAlt": "Schermo di configurazione 2FA con codice QR e codici di backup", - "setupImageCaption": "La finestra 2FA mostra QR, segreto Base32 per inserimento manuale e otto codici di recupero monouso. Copiali prima di chiudere: non saranno mostrati di nuovo.", + "setupImageCaption": "La finestra di configurazione 2FA mostra un QR, un segreto Base32 per l’inserimento manuale e, dopo la verifica, otto codici di backup monouso. Copia i codici prima di chiudere la finestra: non saranno mostrati di nuovo.", "setupSteps": [ "Installa l’app di autenticazione sul telefono o apri il gestore di password. Basta farlo una volta: la stessa app può conservare i codici di tutti i servizi protetti.", "Accedi alla dashboard con nome utente e password.", - "Apri la scheda Sicurezza e scegli Abilita 2FA. Il dialogo mostra QR, segreto Base32 e otto codici di recupero.", + "Apri la scheda Sicurezza nella barra laterale della dashboard, poi fai clic su Abilita 2FA e Avvia la configurazione. Il dialogo mostra il QR e la chiave manuale; gli otto codici di backup compaiono dopo la verifica del codice.", "Aggiungi la voce all’app di autenticazione:", - "Salva i codici di recupero. Conserva tutti e otto in un gestore di password, nota cifrata o copia cartacea sicura. Ciascuno funziona una volta se l’app non è disponibile.", - "Conferma inserendo il codice attuale a sei cifre dell’app nel campo \"Codice di verifica\" e invia. Cambia ogni 30 secondi: se scade mentre lo scrivi, usa il successivo.", + "Conferma inserendo il codice attuale a sei cifre dell’app nel campo \"Codice di verifica\" della finestra di configurazione e invia. Cambia ogni 30 secondi: se scade mentre lo scrivi, usa il successivo.", + "Salva i codici di backup. Dopo la verifica, conserva tutti e otto in modo sicuro in un gestore di password, nota cifrata o copia cartacea sicura. Ciascuno funziona una volta se l’app di autenticazione non è disponibile.", "Fatto. 2FA è attivo. Al prossimo accesso verrà richiesta prima la password, poi il codice attuale a sei cifre." ], "setupStep4Sub": [ @@ -261,17 +261,17 @@ "Alternativa manuale se non puoi scansionare, ad esempio sullo stesso telefono: Aggiungi account → Inserisci chiave di configurazione. Scegli un nome come Proxmox Monitor, incolla il segreto Base32, lascia Tipo su Basato sul tempo e salva." ], "testTitle": "Prova prima di uscire", - "testBody": "Mantieni la sessione attuale aperta e prova un nuovo accesso in una finestra privata subito dopo la configurazione. Se il codice fallisce, controlla gli orologi di server e telefono prima di chiudere la sessione valida. Se hai già perso l’accesso, usa un codice di recupero o modifica auth.json dalla shell dell’host.", + "testBody": "Mantieni la sessione attuale aperta e prova un nuovo accesso in una finestra privata subito dopo la configurazione. Se il codice viene rifiutato, controlla gli orologi di server e telefono prima di uscire dalla sessione valida. Se hai già perso l’accesso, usa un codice di backup o modifica auth.json dalla shell dell’host.", "lostTitle": "Autenticatore perso", "lostIntro": "Tre metodi di recupero, dal meno al più invasivo:", "lostItems": [ - "Usa un codice di recupero. Inserisci uno degli otto nel campo TOTP. Funziona una volta; gli altri restano validi. Dopo l’accesso, riconfigura 2FA dalle impostazioni per ottenere otto nuovi codici.", + "Usa un codice di backup. Inserisci uno degli otto codici salvati nel campo TOTP. Funziona una volta; i codici non usati restano validi. Dopo l’accesso apri Sicurezza, scegli Disattiva 2FA e poi Abilita 2FA per ottenere otto nuovi codici.", "Ripristina l’app da cloud o backup. Con sincronizzazione configurata, installala sul nuovo dispositivo e accedi: Google, Microsoft, Authy, Apple Passwords tramite Portachiavi iCloud, Ente o 2FAS. Con un file esportato da Aegis, Raivo o FreeOTP+, installa l’app e importa il file.", "Disattiva 2FA dalla shell dell’host. Se gli altri metodi non sono disponibili, modifica /root/.config/proxmenux-monitor/auth.json come root via SSH o console, imposta totp_enabled su false, salva e riavvia il servizio:" ], "lostShellOutro": "È possibile accedere solo con nome utente + password, quindi abilitare 2FA da Impostazioni.", "disableTitle": "Disabilita 2FA", - "disableBody": "Apri Sicurezza e scegli Disattiva 2FA. POST /api/auth/totp/disable richiede password attuale e codice TOTP o di recupero valido. Elimina segreto TOTP e codici di recupero. Rimuovi la vecchia voce anche dall’app.", + "disableBody": "Apri Sicurezza e scegli Disattiva 2FA. POST /api/auth/totp/disable richiede la password attuale e un codice TOTP o di backup valido. Elimina il segreto TOTP e i codici di backup. Rimuovi la vecchia voce anche dall’app di autenticazione.", "rejectedTitle": "Il codice a sei cifre viene sempre rifiutato", "rejectedIntro": "TOTP dipende dall’ora: gli orologi di server e telefono devono differire di meno di circa 30 s. Due controlli:", "rejectedItems": [ diff --git a/web/messages/it/docs/monitor/ai-assistant.json b/web/messages/it/docs/monitor/ai-assistant.json index c60581f6..7dffdec2 100644 --- a/web/messages/it/docs/monitor/ai-assistant.json +++ b/web/messages/it/docs/monitor/ai-assistant.json @@ -14,7 +14,7 @@ }, "intro": { "title": "Off per impostazione predefinita, singolo interruttore per abilitare", - "body": "La riscrittura IA è disattivata per impostazione predefinita. Attivala in Impostazioni → Notifiche → Avanzate: miglioramento IA. Se il contesto aggiuntivo o la riscrittura falliscono, viene inviato il modello originale. Ogni riscrittura ha un tempo limite di 25 secondi; allo scadere si usa il modello senza attendere indefinitamente." + "body": "La riscrittura IA è disattivata per impostazione predefinita. Attivala in Impostazioni → Notifiche → Avanzate: miglioramento IA. Se il contesto aggiuntivo o la riscrittura falliscono, il processo di invio manda il modello originale. Le riscritture nella coda di invio degli eventi hanno un tempo limite di 25 secondi; allo scadere si invia il modello invece di attendere." }, "howItWorks": { "heading": "Come funziona", @@ -109,7 +109,7 @@ ], "customNote": "La modalità con prompt personalizzato limita l’uscita a 500 token, indipendentemente dal livello di dettaglio. Il prompt è sotto il tuo controllo e il limite evita risposte eccessive.", "sizingTitle": "Pratico dimensionamento", - "sizingBody": "Stima il consumo come eventi riscritti × canali IA × token in ingresso e uscita per chiamata. Esempio: 50 eventi × un canale × (500 in ingresso + 300 in uscita) = 40.000 token al giorno. Consumi e costi dipendono da modello, contesto, cache e limiti del provider. Dettaglio per canale spiega come usare brief nelle chat invece di standard, mantenendo e-mail dettagliate." + "sizingBody": "Stima il consumo come eventi riscritti × canali con IA × token in ingresso e uscita per chiamata. Esempio: 50 eventi × un canale × (2.000 in ingresso + 300 in uscita) sono circa 115.000 token al giorno, perché il prompt di sistema predefinito da solo occupa circa 1.500 token. Consumi e costi reali dipendono da modello, contesto, cache e limiti del provider. La sezione Dettaglio per canale spiega come usare brief nelle chat invece di standard, mantenendo report e-mail dettagliati." }, "providers": { "heading": "Fornitori di AI", @@ -142,7 +142,7 @@ "items": [ "Chiave API: console.anthropic.com/settings/keys", "Esempi dall’elenco di modelli incluso: claude-haiku-4-5-20251001, claude-sonnet-4-6, claude-opus-4-6.", - "Raccomandazione inclusa: claude-haiku-4-5-20251001. Questa versione precisa è configurata come consigliata; le vecchie voci Claude 3.5 non sono più nella lista inclusa." + "Raccomandazione inclusa: claude-haiku-4-5-20251001, uno snapshot fisso anziché un alias variabile." ] }, "gemini": { diff --git a/web/messages/it/docs/monitor/api-reference.json b/web/messages/it/docs/monitor/api-reference.json index 4e8b149d..a4789f6b 100644 --- a/web/messages/it/docs/monitor/api-reference.json +++ b/web/messages/it/docs/monitor/api-reference.json @@ -162,7 +162,7 @@ { "endpoint": "/api/vms//backup", "method": "POST", - "use": "Crea un backup vzdump di VM o LXC. Campi facoltativi da adattare allo storage: storage (destinazione PVE), mode (snapshot, suspend o stop), compress (zstd, lzo, gzip o none), protected (true o false), notes, notification (auto, always, failure o never) e pbs_change_detection (default, legacy o data). Restituisce l’UPID della task PVE." + "use": "Crea un backup vzdump di una VM o di un LXC. Campi del corpo, tutti facoltativi salvo che i valori predefiniti non corrispondano alla struttura dello storage: storage (uno storage PVE), mode (snapshot, suspend o stop), compress (zstd, lzo, gzip o none), protected (true o false), notes e pbs_change_detection (default, legacy o data). Restituisce l’UPID della task PVE." }, { "endpoint": "/api/vms//backups", @@ -286,7 +286,7 @@ { "endpoint": "/api/storage/smart//test", "method": "POST", - "use": "Avvia un autotest SMART. Schema del corpo: '{'\"type\":\"short\"|\"long\"'}'." + "use": "Avvia un autotest SMART. Schema del corpo: '{'\"test_type\":\"short\"|\"long\"'}'." }, { "endpoint": "/api/storage/smart/schedules", diff --git a/web/messages/it/docs/monitor/architecture.json b/web/messages/it/docs/monitor/architecture.json index ba32fbd8..b69a24ae 100644 --- a/web/messages/it/docs/monitor/architecture.json +++ b/web/messages/it/docs/monitor/architecture.json @@ -73,13 +73,13 @@ "intro": "L’AppImage contiene un filesystem montato all’esecuzione. AppRun alla radice prepara l’ambiente e avvia flask_server.py:", "consequencesIntro": "Due conseguenze di questo layout:", "consequences": [ - "Ambiente Python incluso. Interprete e pacchetti sono nell’AppImage, senza installazione nel Python di sistema. L’app usa comunque interfacce del kernel e strumenti esterni dell’host.", + "Pacchetti Python inclusi. I pacchetti Python sono distribuiti nell’AppImage e girano sull’interprete Python dell’host stesso, 3.11 (PVE 8) o 3.13 (PVE 9), senza installare nulla nel Python di sistema dell’host. L’app usa comunque interfacce del kernel e strumenti esterni dell’host.", "Client hardware inclusi. Sono presenti ipmitool, lm-sensors e upsc. Le letture richiedono hardware compatibile, accesso ai sensori e, per l’UPS, un server NUT configurato." ] }, "flask": { "heading": "Struttura dell’applicazione Flask", - "intro": "flask_server.py crea un’istanza Flask(__name__) con CORS limitato, registra direttamente nove blueprint e inizializza il terminale. La tabella mostra moduli principali; registra anche audit, backup VM e PBS. I precaricamenti PVE si eseguono solo sugli host PVE.", + "intro": "flask_server.py crea un’istanza Flask(__name__) con origini CORS limitate, registra direttamente dieci blueprint e inizializza le rotte del terminale. La tabella mostra i moduli principali; sono registrati anche i blueprint di PBS, collegamenti del Monitor, audit e backup VM. I precaricamenti specifici di PVE si eseguono solo sugli host PVE.", "headerBlueprint": "Blueprint / modulo", "headerPrefix": "Prefisso delle rotte", "headerOwns": "Responsabilità", @@ -242,10 +242,10 @@ "Aggiornamenti: pacchetti in attesa e patch di sicurezza.", "Log: schemi persistenti, picchi e sequenze a cascata nel journal di sistema.", "Memoria: interventi dell’OOM killer e pressione RAM prolungata.", - "Temperatura: letture CPU e dischi rispetto alle soglie di monitoraggio; i sensori disponibili dipendono dall’hardware.", + "CPU: utilizzo e temperatura della CPU rispetto alle soglie configurabili; i sensori disponibili dipendono dall’hardware.", "Sicurezza: errori di accesso, blocchi e stato del jail Fail2Ban." ], - "afterIntro": "I risultati usano error_key, categoria e gravità stabili. Le righe in errors vengono aggiornate con last_seen e contatori, senza duplicarle. L’invio delle notifiche ha anche impronte e intervalli propri.", + "afterIntro": "I risultati usano error_key, categoria e gravità stabili. I record esistenti in errors vengono aggiornati sul posto (last_seen, gravità, motivo), senza duplicarli. L’invio delle notifiche ha anche regole proprie di impronta e intervallo.", "cycleEnd": "La pulizia può risolvere errori obsoleti con la durata del silenziamento per categoria e regole di stato, rimuovere voci orfane di risorse eliminate e cancellare events oltre 30 giorni. Le categorie sono in Pannello → Health Monitor." }, "notifications": { @@ -264,9 +264,9 @@ "intro": "La scheda Terminale collega un client leggero xterm.js a un PTY del server via WebSocket. Esistono due modalità:", "items": [ "Modalità HTTP, predefinita: il server Flask integrato con flask-sock gestisce il passaggio al protocollo WebSocket.", - "Modalità HTTPS / WSS: usa gevent.pywsgi.WSGIServer con geventwebsocket.handler.WebSocketHandler per WebSocket su TLS." + "Modalità HTTPS / WSS: il server TLS usa gevent.pywsgi.WSGIServer con il suo gestore predefinito; flask-sock gestisce le connessioni WebSocket su TLS." ], - "outro": "I processi del terminale ereditano User=root. Con autenticazione attiva, WebSocket richiede un ticket breve monouso ottenuto dall’endpoint autenticato con permessi amministrativi. Se l’autenticazione è disattivata o rifiutata, la connessione segue quella modalità senza autenticazione.", + "outro": "I processi figli del terminale ereditano User=root dal servizio. Aprire un WebSocket richiede un ticket breve monouso ottenuto dall’endpoint autenticato dei ticket del terminale con permessi amministrativi.", "proxyNote": "Con un proxy inverso, abilita WebSocket e le intestazioni Upgrade e Connection. Il terminale richiede questo inoltro." }, "proxy": { diff --git a/web/messages/it/docs/monitor/dashboard/network.json b/web/messages/it/docs/monitor/dashboard/network.json index c3dadb78..9ee3f750 100644 --- a/web/messages/it/docs/monitor/dashboard/network.json +++ b/web/messages/it/docs/monitor/dashboard/network.json @@ -162,7 +162,7 @@ } ], "reportTitle": "Rapporto sulla latenza di rete (PDF)", - "reportIntro": "Entrambe le modalità hanno un pulsante Rapporto accanto alla destinazione. Genera un PDF delle misurazioni da allegare a una richiesta di assistenza al provider Internet.", + "reportIntro": "Entrambe le modalità hanno un pulsante Rapporto accanto alla destinazione. Apre un report stampabile delle misurazioni; salvalo in PDF dalla finestra di stampa del browser e allegalo a una richiesta di assistenza al provider Internet.", "reportPreviewAlt": "Prima pagina PDF del rapporto di latenza: sintesi, indicatore, statistiche, grafico e guida alle soglie", "reportPreviewCaption": "La prima pagina contiene sintesi, indicatore, statistiche principali, andamento della latenza e guida alle soglie. Dalla pagina 2 seguono la tabella delle misurazioni e la metodologia.", "downloadLabel": "Scarica un rapporto di latenza di esempio (PDF)", diff --git a/web/messages/it/docs/monitor/dashboard/security.json b/web/messages/it/docs/monitor/dashboard/security.json index 964d48ea..067c9ca9 100644 --- a/web/messages/it/docs/monitor/dashboard/security.json +++ b/web/messages/it/docs/monitor/dashboard/security.json @@ -136,7 +136,7 @@ "configCaption": "Modifica del jail sshd: riduci Max Retries se accedi a SSH solo dalla tua sottorete, oppure aumenta Ban Time per la dashboard esposta a Internet.", "outro": "La guida Installazione, configurazione e disinstallazione include anche l’installazione manuale, la modifica di SSH MaxAuthTries e il registro proxmenux-auth.log. Vedi ProxMenux → Sicurezza → Fail2Ban.", "calloutTitle": "Senza Fail2Ban, questo meccanismo non blocca gli IP", - "calloutBody": "ProxMenux Monitor controlla gli IP bloccati da Fail2Ban a livello applicativo prima di elaborare le richieste Flask. Interroga fail2ban-client e conserva il risultato in cache per 30 secondi; non legge una tabella SQL dei blocchi. Senza Fail2Ban, gli accessi falliti sono registrati in proxmenux-auth.log, ma questo meccanismo non blocca gli IP." + "calloutBody": "ProxMenux Monitor controlla gli IP bloccati nella jail proxmenux di Fail2Ban a livello applicativo prima di elaborare le richieste Flask, conservando il risultato in cache per 30 secondi. Senza Fail2Ban, gli accessi falliti sono registrati in proxmenux-auth.log e l’endpoint di login è limitato a 5 tentativi per IP ogni 5 minuti, ma nessun IP viene bloccato." }, "lynis": { "heading": "Audit di sicurezza Lynis", diff --git a/web/messages/it/docs/monitor/dashboard/settings.json b/web/messages/it/docs/monitor/dashboard/settings.json index eab32cb0..4abed2a5 100644 --- a/web/messages/it/docs/monitor/dashboard/settings.json +++ b/web/messages/it/docs/monitor/dashboard/settings.json @@ -76,7 +76,7 @@ }, "thresholds": { "heading": "Soglie di Health Monitor", - "intro": "La scheda precedente imposta il silenzio dopo aver ignorato un avviso; questa regola il valore che attiva un avviso. La maggior parte dei controlli ha valori Avviso e Critico modificabili. La tabella spiega eccezioni come la regola combinata dello swap e il rilevatore RAM attuale.", + "intro": "La scheda precedente imposta il silenzio dopo aver ignorato un avviso; questa regola il valore che attiva un avviso. La maggior parte dei controlli a soglia ha valori Avviso e Critico modificabili. La tabella sotto spiega eccezioni come la regola combinata dello swap.", "whatForTitle": "A cosa serve", "whatForIntro": "I valori predefiniti sono un punto di partenza, ma ogni ambiente ha condizioni proprie:", "whatForItems": [ @@ -85,7 +85,7 @@ "Scegli le soglie di temperatura secondo le specifiche del disco e le condizioni reali. Il raffreddamento passivo o forzato non determina da solo un limite sicuro universalmente più basso o alto.", "Un host molto virtualizzato può avere picchi CPU durante le compilazioni senza avvisare a ogni picco dell’80%, ma deve segnalare una saturazione prolungata." ], - "whatForOutro": "Le modifiche supportate valgono dall’analisi successiva. Health Monitor legge /usr/local/share/proxmenux/health_thresholds.json a ogni ciclo senza riavvio. Alcuni indicatori, come la temperatura dei dischi, usano questi valori; alcune barre di capacità hanno limiti propri. La riga RAM descrive un’eccezione attuale.", + "whatForOutro": "Le modifiche supportate alle soglie valgono dall’analisi successiva. Health Monitor legge /usr/local/share/proxmenux/health_thresholds.json a ogni ciclo senza riavvio. Alcuni indicatori, tra cui la temperatura dei dischi, usano questi valori; alcune barre di capacità mantengono limiti visivi propri.", "coloursTitle": "Colori degli stati Avviso e Critico", "coloursIntro": "I widget che usano Avviso/Critico seguono i tre stati sotto. Altri indicatori, come le barre di capacità PVE, hanno limiti propri; il loro colore da solo non dimostra un avviso Health Monitor.", "headerColour": "Colore", @@ -125,7 +125,7 @@ "section": "Memoria", "warning": "85 %", "critical": "95 %", - "gates": "Pressione RAM dell’host. Il valore configurabile mostra Critico al 95%, ma il rilevatore attuale usa una regola fissa del 90% prolungato; cambiare l’impostazione non modifica attualmente quel ramo." + "gates": "Pressione RAM dell’host." }, { "section": "Swap (solo soglia critica)", @@ -185,7 +185,7 @@ "section": "Storage PVE", "warning": "85 %", "critical": "95 %", - "gates": "Storage gestiti da PVE: LVM, LVM-thin, ZFS-pool, RBD/Ceph e PBS. Non sono tutti backend a blocchi." + "gates": "Solo gli storage PVE di tipo LVM, LVM-thin, ZFS-pool, RBD, CephFS e PBS. Gli storage directory, NFS e CIFS sono coperti dalla riga dello spazio su disco dell’host." }, { "section": "Pool ZFS", @@ -218,7 +218,7 @@ "toggleTitle": "Opzione di notifica legata al rilevamento", "toggleBody": "L’opzione lxc_updates_available per canale in Notifiche → Servizi appare solo con rilevamento attivo. Disattivandolo, la riga scompare da tutti i canali. La preferenza resta nel database e ritorna al valore precedente alla riattivazione.", "purgeTitle": "Cosa viene rimosso disattivando il rilevamento", - "purgeBody": "Disattivandolo si rimuovono subito le voci type=lxc da /usr/local/share/proxmenux/managed_installs.json. I contatori degli aggiornamenti LXC in Hardware spariscono al prossimo aggiornamento. Riattivandolo, il ciclo successivo ripopola il registro, o prima tramite aggiornamento manuale dell’API." + "purgeBody": "Disattivandolo si rimuovono subito tutte le voci type=lxc da /usr/local/share/proxmenux/managed_installs.json. I contatori degli aggiornamenti LXC nella scheda VM e LXC spariscono al prossimo aggiornamento della dashboard. Riattivandolo, il ciclo di rilevamento successivo ripopola il registro, o prima tramite aggiornamento manuale dell’API." }, "storageExclusions": { "heading": "Esclusioni storage remoto", diff --git a/web/messages/it/docs/monitor/dashboard/storage.json b/web/messages/it/docs/monitor/dashboard/storage.json index b4d979cf..2f6754d4 100644 --- a/web/messages/it/docs/monitor/dashboard/storage.json +++ b/web/messages/it/docs/monitor/dashboard/storage.json @@ -70,7 +70,7 @@ "items": [ "Percorso del dispositivo — /dev/sda, /dev/nvme0n1.", "Etichetta del tipo — SATA / NVMe e relativa icona.", - "Etichetta di sistema — indicatore arancione dei dischi identificati come dischi del sistema operativo. Il rilevamento usa i montaggi / e /boot e assegna System. L’assenza dell’etichetta non dimostra che il disco possa essere cancellato o riutilizzato senza rischi.", + "Etichetta di sistema — indicatore arancione dei dischi usati dall’host: punti di montaggio di sistema (/, /boot, /usr, /var…), swap attivo, membri di pool ZFS, volumi fisici LVM, membri RAID attivi o etichette di partizioni di sistema. L’assenza dell’etichetta non dimostra che il disco possa essere cancellato o riutilizzato senza rischi.", "Modello — produttore e modello da smartctl -i.", "Capacità — espressa in unità leggibili.", "Temperatura — valore attuale in °C, colorato secondo il tipo di disco; NVMe usa soglie più alte di SATA.", @@ -112,7 +112,7 @@ "pdfPreviewAlt": "Prima pagina del rapporto SMART con sintesi, indicatore PASSED e informazioni sul disco", "pdfPreviewCaption": "Prima pagina: sintesi, indicatore PASSED e informazioni complete del disco. Il PDF di esempio include usura SSD, tutti gli attributi SMART e cronologia dei test.", "pdfDownloadLabel": "Scarica un rapporto SMART di esempio (PDF)", - "pdfSectionsIntro": "Il rapporto ha sei sezioni principali:", + "pdfSectionsIntro": "Il rapporto include queste sezioni principali:", "pdfSections": [ "Sintesi — stato PASSED/FAILED, valutazione chiara del disco — regolare, usurato o guasto — e quattro dati: data del rapporto, ultimo tipo di test, risultato e attributi controllati.", "Informazioni sul disco — modello, serie, capacità, tipo HDD/SSD/NVMe, famiglia, formato, interfaccia (SATA 3.3 · 6.0 Gb/s, …), TRIM, temperatura e soglia ottimale, ore e cicli di accensione, SMART, settori in attesa/riallocati ed errori CRC.", @@ -127,7 +127,7 @@ "historyImageCaption": "Cronologia SMART del disco. Ogni riga mostra tipo, data e ora, anzianità, indicatore dell’ultimo test e azioni di download dell’output smartctl ed eliminazione.", "historyIntro": "Test brevi ed estesi completati e conservati per il disco. Ogni voce contiene l’output originale smartctl e i campi interpretati da Monitor per la dashboard. Azioni per riga:", "historyItems": [ - "Scarica — salva lo snapshot JSON con i dati smartctl -a usati dal rapporto. Utile se il supporto richiede i campi diagnostici originali.", + "Scarica — salva lo snapshot JSON di quel test (output di smartctl -a --json, o nvme smart-log su NVMe quando smartctl fallisce). Utile se il supporto del produttore richiede i campi diagnostici originali.", "Elimina — rimuove manualmente un test dalla cronologia. La conservazione in Pianificazione (ultimi 5 / 10 / 20) elimina automaticamente i più vecchi." ], "scheduleTitle": "Scheda 4 — Pianificazione", diff --git a/web/messages/it/docs/monitor/dashboard/vms-lxcs.json b/web/messages/it/docs/monitor/dashboard/vms-lxcs.json index 5676aba9..4cd27750 100644 --- a/web/messages/it/docs/monitor/dashboard/vms-lxcs.json +++ b/web/messages/it/docs/monitor/dashboard/vms-lxcs.json @@ -1,16 +1,16 @@ { "meta": { "title": "ProxMenux Monitor — Pannello: VM e LXC | Documentazione ProxMenux", - "description": "Inventario dei guest con CPU, memoria e disco in tempo reale. I dettagli includono configurazione, risorse, backup, risultati recenti del log Proxmox, note e Avvia / Spegni / Riavvia / Forza arresto." + "description": "La scheda VM e LXC elenca ogni guest dell’host con utilizzo di CPU, memoria e disco in tempo reale. I dettagli per guest includono configurazione, risorse, backup, log della console dei container OCI, note e i comandi Avvia / Spegni / Riavvia / Forza arresto." }, "header": { "title": "Pannello: VM e LXC", - "description": "Inventario completo dei guest del nodo: quattro metriche in alto, elenco ordinabile di VM e LXC e dettagli per guest con configurazione, risorse, backup, log e comandi Avvia / Spegni / Riavvia / Forza arresto.", + "description": "Inventario completo dei guest del nodo: quattro metriche in alto, elenco ordinabile di ogni VM e LXC sotto e dettagli per guest con configurazione, risorse, backup, log della console dei container OCI e i quattro comandi del ciclo di vita (Avvia / Spegni / Riavvia / Forza arresto).", "section": "ProxMenux Monitor · Dashboard" }, "intro": { "title": "Controlli dei sistemi guest", - "body": "Questa scheda controlla il ciclo di vita dei guest. Le azioni passano da POST /api/vms/<vmid>/control con conferma esplicita e aggiornano la riga del guest. L'arresto forzato richiede il pulsante dedicato Forza arresto." + "body": "Questa scheda controlla il ciclo di vita dei guest. Le azioni del ciclo di vita passano da POST /api/vms/<vmid>/control; Riavvia e Forza arresto chiedono di digitare il VMID per confermare, e la risposta si riflette nella riga del guest. L’arresto forzato richiede il pulsante dedicato Forza arresto." }, "topRow": { "heading": "Riga superiore: quattro schede statistiche", @@ -186,9 +186,9 @@ "source": "Dati RRD PVE (pvesh get /nodes/<node>/qemu/<id>/rrddata) adattati alla visualizzazione in grafico." }, { - "section": "Risultati recenti del log Proxmox", - "endpoint": "/api/vms//logs", - "source": "pvesh get /nodes/<node>/<qemu|lxc>/<vmid>/log --start 0 --limit 1000. Se il comando fallisce restituisce uno elenco vuoto; non fornisce tutti i log interni del guest." + "section": "Log della console OCI (scheda Log)", + "endpoint": "/api/lxc//console-log", + "source": "Output della console del processo principale dell’immagine, letto da /var/log/proxmenux/oci/<vmid>.console.log sull’host. Mostrato solo per i container OCI." }, { "section": "Backup disponibili per gli ospiti", diff --git a/web/messages/it/docs/monitor/health-monitor.json b/web/messages/it/docs/monitor/health-monitor.json index d7e71d7b..c80eaf14 100644 --- a/web/messages/it/docs/monitor/health-monitor.json +++ b/web/messages/it/docs/monitor/health-monitor.json @@ -68,7 +68,7 @@ { "category": "Archiviazione", "checks": "Archivi Proxmox, filesystem radice", - "events": "Soglie di spazio superate sulla radice o su altri filesystem monitorati (85% avviso / 95% critico per impostazione predefinita); esportazione NFS offline; autenticazione CIFS fallita; pool LVM-thin pieno." + "events": "Soglie di spazio superate sulla radice o su altri filesystem monitorati (85% avviso / 95% critico per impostazione predefinita); storage PVE non disponibili; montaggi NFS/CIFS bloccati o inaspettatamente in sola lettura; storage LVM-thin e altri pool che superano le stesse soglie." }, { "category": "Disco e SMART", @@ -98,7 +98,7 @@ { "category": "Aggiornamenti di sistema", "checks": "Aggiornamenti di attesa, aggiornamenti di sicurezza, versione kernel / PVE, età del sistema", - "events": "Aggiornamenti di sicurezza o del kernel in uso in attesa; sistema non aggiornato da molto tempo. Nell’intestazione della panoramica appare Aggiorna ora quando ci sono aggiornamenti. Avvia l’intera procedura ProxMenux; alla chiusura aggiorna lo stato con ?refresh=1 senza attendere il ciclo successivo." + "events": "Aggiornamenti di sicurezza o del kernel in uso in attesa; sistema non aggiornato da molto tempo. La categoria Aggiornamenti della finestra Stato di salute mostra il pulsante Aggiorna ora quando ci sono aggiornamenti in attesa. Avvia l’intera procedura di aggiornamento ProxMenux nella finestra stessa; alla chiusura aggiorna lo stato con ?refresh=1, così l’indicatore riflette il nuovo stato senza attendere il ciclo successivo." }, { "category": "Sicurezza e certificati", @@ -158,7 +158,7 @@ }, "dismiss": { "heading": "Silenziare gli avvisi e scegliere la durata", - "intro": "Alcuni eventi persistono, come Aggiornamenti di sistema: aggiornamenti disponibili finché non aggiorni l’host. Non serve una notifica ogni cinque minuti. Il pulsante Aggiorna ora nella panoramica risolve direttamente questo caso. Per gli altri casi o gli aggiornamenti rimandati sono disponibili due meccanismi collegati per silenziare gli avvisi:", + "intro": "Alcuni eventi persistono per natura, come Aggiornamenti di sistema: aggiornamenti disponibili finché non aggiorni l’host, e una notifica ogni cinque minuti per una settimana non serve. Il pulsante Aggiorna ora nella categoria Aggiornamenti della finestra Stato di salute risolve direttamente questo caso. Per gli altri casi o gli aggiornamenti rimandati il monitor offre anche due meccanismi collegati per silenziare gli avvisi:", "step1": "Silenziare un singolo evento nella finestra. Il menu offre 24 ore, 7 giorni o Permanentemente, indipendentemente dalla categoria. La scelta invia POST /api/health/acknowledge con error_key e suppression_hours (-1 per permanente). L’evento passa tra i silenziati con data acknowledged_at.", "dropdownImageAlt": "Menu per silenziare un avviso: 24 ore, 7 giorni o permanentemente", "dropdownImageCaption": "La durata scelta vale solo per questo avviso; senza scelta individuale si usa il valore della categoria. Gli avvisi silenziati permanentemente hanno un’etichetta ambra Permanente e normalmente non si riattivano. La temperatura critica della CPU è l’eccezione descritta sotto.", @@ -187,7 +187,7 @@ }, { "finding": "ZFS pool DEGRADED / FAULTED", - "why": "I controlli di capacità dei pool ZFS consentono il silenziamento. Gli altri rilevamenti seguono il proprio indicatore. Il riconoscimento non ripara un pool degradato o guasto." + "why": "I rilevamenti sullo stato dei pool ZFS (DEGRADED, FAULTED, UNAVAIL) consentono esplicitamente il silenziamento, così come i controlli di capacità dei pool. Il riconoscimento non ripara un pool degradato o guasto." }, { "finding": "Errori del disco I/O con SMART FAILED", @@ -289,7 +289,7 @@ }, "rest": { "heading": "Endpoint REST", - "intro": "Le azioni della finestra sono disponibili via API per script, dashboard o bot. Con autenticazione del Monitor attiva serve un token Bearer valido, ottenuto con l’accesso o nella schermata dei token API. Le modifiche, come riconoscere avvisi, salvare o pulire errori orfani, richiedono full_admin; read_only riceve 403. Con autenticazione disattivata o rifiutata, questi controlli consentono accesso senza token.", + "intro": "Le azioni della finestra sono disponibili anche via API per script, dashboard personalizzate o bot. Le chiamate richiedono un token Bearer valido, ottenuto con l’accesso o nella schermata dei token API. Le modifiche, come riconoscere avvisi, salvare le impostazioni di soppressione o pulire errori orfani, richiedono l’ambito full_admin; read_only riceve 403.", "headerEndpoint": "Endpoint", "headerMethod": "Metodo", "headerUse": "Uso", @@ -297,7 +297,7 @@ { "endpoint": "/api/health", "method": "GET", - "use": "Controllo leggero che restituisce JSON con status, timestamp e version. Adatto ai controlli per parola chiave Uptime Kuma; con autenticazione del Monitor attiva il client deve inviare un’intestazione Bearer." + "use": "Controllo leggero che restituisce JSON con status, timestamp e version. Adatto ai controlli per parola chiave Uptime Kuma; il client deve inviare un’intestazione Bearer." }, { "endpoint": "/api/health/status", diff --git a/web/messages/it/docs/monitor/index.json b/web/messages/it/docs/monitor/index.json index 43abfbc5..e26ca62a 100644 --- a/web/messages/it/docs/monitor/index.json +++ b/web/messages/it/docs/monitor/index.json @@ -52,7 +52,7 @@ }, { "name": "Terminale", - "description": "Shell host e console VM/CT supportate nel browser tramite xterm.js e WebSocket. Segue l’autenticazione configurata: se disabilitata o rifiutata, i client con accesso di rete possono aprire sessioni senza login. Non implica un audit di ogni comando." + "description": "Shell host e console VM/CT supportate nel browser tramite xterm.js e WebSocket. Le sessioni non sono sottoposte ad audit per singolo comando." }, { "name": "Sicurezza", @@ -114,7 +114,7 @@ "heading": "REST API e integrazioni", "intro": "Gli endpoint REST espongono dati di monitoraggio JSON via HTTP/HTTPS per Homepage, Home Assistant, Uptime Kuma e script. Grafana può usare l’esportatore testuale Prometheus separato su /api/prometheus. Le richieste possono usare curl.", "tokens": "I token API a lunga durata (365 giorni) vengono generati in Impostazioni → Token di accesso API o tramite POST /api/auth/generate-api-token.", - "bearer": "Invia i token con Authorization: Bearer …. L’endpoint pubblico /api/health serve ai controlli di disponibilità senza credenziali. Sotto /api/auth/* ci sono rotte pubbliche di configurazione/login/stato e rotte protette per account e token; non sono tutte anonime.", + "bearer": "Invia i token con Authorization: Bearer …. Anche /api/health richiede l’intestazione Bearer, quindi i controlli di disponibilità necessitano di un token read_only. Sotto /api/auth/* ci sono sia rotte pubbliche di configurazione/login/stato sia rotte protette per account e token; non sono tutte anonime.", "catalog": "Catalogo degli endpoint, rotazione dei token e sicurezza sono nel Riferimento API; esempi per Homepage, Home Assistant, Grafana, Uptime Kuma e cURL sono in Integrazioni." }, "serviceControl": { diff --git a/web/messages/it/docs/monitor/integrations.json b/web/messages/it/docs/monitor/integrations.json index 87ce408f..563e98f9 100644 --- a/web/messages/it/docs/monitor/integrations.json +++ b/web/messages/it/docs/monitor/integrations.json @@ -220,7 +220,7 @@ "heading": "n8n, Zapier e script personalizzati", "intro": "Workflow e script possono inviare notifiche con POST a /api/notifications/send, per esempio dopo un errore CI o un’attività troppo lunga. L’invio diretto salta coda e intervallo tra impronte degli eventi. Mantiene formato per canale, IA facoltativa e consegna. Gestisci gli eventuali duplicati nel chiamante.", "n8nBody": "In n8n usa un nodo HTTP Request con POST, URL sopra e lo stesso JSON di curl. Scegli credenziali generiche Header Auth: nome Authorization e valore Bearer YOUR_API_TOKEN, sostituendo il segnaposto. Collega una pianificazione, webhook o altro nodo per avviare la richiesta.", - "severityBody": "La gravità usa INFO, WARNING o CRITICAL in maiuscolo. L’oggetto data fornisce contesto. L’IA usa titolo e messaggio prodotti con gli arricchimenti supportati; non tutti i campi sono garantiti nel prompt o nell’output. Vedi Notifiche → Catalogo eventi." + "severityBody": "La gravità usa INFO, WARNING o CRITICAL in maiuscolo. L’oggetto data fornisce il contesto dell’evento e i campi del modello. Su questo endpoint la riscrittura IA riceve solo titolo e messaggio; i campi in data non vengono inviati al provider. Vedi Notifiche → Catalogo eventi per il significato degli eventi." }, "pveWebhook": { "heading": "Webhook nativo Proxmox VE (in ingresso)", diff --git a/web/messages/it/docs/monitor/notifications.json b/web/messages/it/docs/monitor/notifications.json index 2db7ab04..7173a53f 100644 --- a/web/messages/it/docs/monitor/notifications.json +++ b/web/messages/it/docs/monitor/notifications.json @@ -171,7 +171,7 @@ "Apri account.microsoft.com/security e attiva la verifica in due passaggi.", "Se disponibile, apri Opzioni di sicurezza avanzate → Password per le app → Crea una nuova password per app. La sua presenza non prova che il servizio accetti SMTP con password.", "Se Microsoft genera una password per app, copiala e verifica che il servizio SMTP la accetti.", - "Solo se è consentito SMTP con password, usa i parametri approvati: Server smtp.office365.com per Exchange Online, Porta 587, Modalità TLS STARTTLS, Nome utente con l’indirizzo email e Password con la credenziale consentita. Outlook.com personale ha requisiti differenti; non presumere che funzioni." + "Solo se il provider consente SMTP con password, inserisci i parametri approvati: Host SMTP smtp.office365.com per Exchange Online, Porta 587, Modalità TLS STARTTLS, Nome utente con l’indirizzo della casella e Password con la credenziale SMTP consentita. Outlook.com personale ha impostazioni e requisiti di autenticazione differenti; non presumere che queste credenziali funzionino." ], "relayTitle": "Relay SMTP gestito da te", "relayBody": "Puoi usare un relay SMTP sotto il tuo controllo, come Postfix, che gestisca l’autenticazione a monte. Imposta credenziali e TLS di Monitor in base al relay: usare un relay locale non disattiva di per sé la cifratura." @@ -266,7 +266,7 @@ "howItems": [ "Attivazione per canale. Disattivato inizialmente. Attivalo solo sui canali dove desideri un riepilogo; gli altri mantengono gli invii immediati.", "Ora di invio nel fuso locale, inizialmente 09:00. Puoi cambiarla; il processo invia entro circa 60 secondi dal minuto impostato.", - "Nel riepilogo: eventi generici idonei di livello INFO, come aggiornamenti applicazioni, aggiornamenti Tailscale, aggiornamenti ottimizzazioni ProxMenux, aggiornamenti di sicurezza APT e avvisi di limite di frequenza. Risultati backup e altre azioni escluse restano immediati.", + "Nel riepilogo: eventi generici idonei di livello INFO. Ad esempio aggiornamenti applicazioni, aggiornamenti Tailscale, aggiornamenti ottimizzazioni ProxMenux e aggiornamenti di sicurezza APT. Risultati backup e altri eventi di azione esclusi restano immediati.", "Che cosa non è mai ritardato:", "Persistenza. Gli eventi restano in SQLite, nella tabella digest_pending, fino all’ora scelta e sopravvivono ai riavvii di Monitor.", "Nessun evento, nessun riepilogo. Non invia messaggi vuoti quando non ci sono eventi INFO da riepilogare." @@ -301,7 +301,7 @@ { "stage": "Intervallo fra invii", "what": "Dopo un invio riuscito, sopprime le ripetizioni e salva lo stato in notification_last_sent. Valori base: 86 400 s per CRITICAL, WARNING, INFO, resources e updates. Eccezioni: 5 s per azioni VM/CT e spegnimento/riavvio host, 10 s per risultati backup/replica, 1 800–3 600 s per varie categorie di integrità. Impostazioni esplicite per evento/gruppo prevalgono.", - "tunable": "Sì: le impostazioni esplicite dell’intervallo per evento o gruppo sostituiscono i valori predefiniti del processo di invio." + "tunable": "Solo tramite l’API delle impostazioni: una chiave cooldown.<event_type> o cooldown.<group> sostituisce i valori predefiniti; nell’interfaccia non c’è alcun controllo." }, { "stage": "Aggregazione eventi ravvicinati", @@ -330,7 +330,7 @@ "Metodo e URL. POST http://127.0.0.1:8008/api/notifications/webhook senza HTTPS Monitor. Con HTTPS usa il listener HTTP locale separato sulla porta 8009. Entrambi restano sullo stesso host.", "Modello del corpo. Usa gli helper Handlebars di PVE. PVE lo salva codificato in base64; il contenuto JSON è:", "Matcher. Un compagno blocco matcher: proxmenux-matcher con mode all così ogni notifica PVE raggiunge l'obiettivo.", - "Configurazione privata. Crea il blocco webhook: proxmenux-webhook in /etc/pve/priv/notifications.cfg con il segreto condiviso in base64. Il destinatario pubblico lo usa per X-Webhook-Secret. Il blocco non è vuoto." + "Configurazione privata. La configurazione scrive il blocco corrispondente webhook: proxmenux-webhook in /etc/pve/priv/notifications.cfg con una voce secret chiamata X-Webhook-Secret, codificata in base64. Il blocco pubblico del destinatario contiene solo modello del corpo, metodo e URL. Il blocco privato non è uno stub vuoto." ], "securityTitle": "Come il ricevitore è protetto", "securityIntro": "Il ricevitore webhook a POST /api/notifications/webhook applica diversi livelli di sicurezza a seconda di dove proviene la richiesta:", diff --git a/web/messages/pt/docs/monitor/access-auth.json b/web/messages/pt/docs/monitor/access-auth.json index 596573f4..371da883 100644 --- a/web/messages/pt/docs/monitor/access-auth.json +++ b/web/messages/pt/docs/monitor/access-auth.json @@ -19,7 +19,7 @@ "reaching": { "heading": "Alcançar o painel", "intro": "ProxMenux Monitor liga-se a 0.0.0.0:8008. Há três maneiras comuns de alcançá-lo:", - "outro": "O acesso direto corresponde à unidade systemd predefinida. O proxy inverso e o Secure Gateway são descritos abaixo. Os IP em X-Forwarded-For exigem PROXMENUX_TRUST_PROXY=1 e um proxy sob o seu controlo. X-Forwarded-Proto ou X-Forwarded-Host não ativam essa confiança por si só; o frontend constrói os URL API a partir da origem do navegador." + "outro": "O acesso direto corresponde à unidade systemd predefinida. O proxy inverso e o Secure Gateway são descritos abaixo. Confiar nos IP de cliente em X-Forwarded-For exige PROXMENUX_TRUST_PROXY=1 e um proxy sob o seu controlo. A simples presença de X-Forwarded-Proto ou X-Forwarded-Host não ativa a confiança no proxy. Nas portas 80/443, o frontend usa URL /api/* relativos; em qualquer outra porta, chama a porta 8008 no mesmo nome de anfitrião." }, "firstLaunch": { "heading": "Procedimento do primeiro arranque", @@ -117,8 +117,8 @@ "loginImageCaption": "Uma vez configurada a autenticação, cada visita ao painel começa aqui. Com o 2FA ativado, a tela pede o código 6 dígitos em um segundo passo após a senha ser aceita.", "loginFlowTitle": "Fluxo de login", "twofaIntro": "Com 2FA ativo, a primeira chamada devolve requires_totp: true. Repita-a com o código de seis dígitos:", - "publicTitle": "Acesso público e verificações protegidas", - "publicIntro": "O início de sessão e o estado da autenticação são públicos. Pode criar a conta enquanto não houver utilizador e palavra-passe guardados, mesmo após recusar a proteção. Os dados do sistema exigem autenticação quando a proteção está ativa:", + "publicTitle": "Endpoints públicos (sem token)", + "publicIntro": "O início de sessão, o estado da autenticação, a configuração inicial e o endpoint leve /api/system-info são públicos:", "publicItems": [ "/api/auth/login e /api/auth/status são públicos. /api/auth/setup cria a primeira conta e recusa substituir credenciais existentes.", "/api/system-info é um endpoint público com informações básicas do sistema, incluindo health.status. Não exige token. /api/auth/status também é público e permite verificar a disponibilidade." @@ -146,7 +146,7 @@ }, { "asset": "Segredo TOTP de 2FA", - "algorithm": "TOTP padrão (RFC 6238), com segredo codificado em base32. Os oito códigos de recuperação são de utilização única e guardados como hashes SHA-256.", + "algorithm": "TOTP padrão (RFC 6238), com segredo codificado em base32. Os oito códigos de backup são de utilização única e guardados como hashes SHA-256.", "where": "auth.json → totp_secret + backup_codes[]" }, { @@ -243,17 +243,17 @@ } ], "backupTitle": "Porque são importantes as cópias de segurança", - "backupBody": "Se perder o dispositivo, use um código de recuperação guardado ou restaure uma cópia configurada previamente. A sincronização na nuvem e as exportações variam por aplicação: verifique se restauram os segredos TOTP. O acesso root ao anfitrião também permite a recuperação descrita abaixo. Guarde uma cópia separada e segura.", + "backupBody": "Se perder o dispositivo autenticador, use um código de backup guardado ou restaure a aplicação a partir de uma cópia configurada previamente. A sincronização na nuvem e as exportações locais variam por aplicação: verifique se o método escolhido restaura de facto os segredos TOTP. O acesso root ao anfitrião também permite a recuperação descrita abaixo. Guarde uma cópia separada e segura.", "setupTitle": "Configuração passo a passo do painel", "setupImageAlt": "Tela de configuração 2FA com código QR e códigos de backup", - "setupImageCaption": "O diálogo 2FA mostra um QR, o segredo Base32 para introdução manual e oito códigos de recuperação de utilização única. Copie-os antes de fechar: não serão apresentados novamente.", + "setupImageCaption": "O diálogo de configuração 2FA mostra um QR, um segredo Base32 para introdução manual e, após a verificação, oito códigos de backup de utilização única. Copie os códigos antes de fechar o diálogo: não serão apresentados novamente.", "setupSteps": [ "Instale o aplicativo autenticador no telefone (ou abra o gerenciador de senhas). Um dos aplicativos da tabela acima. Você só precisa fazer isso uma vez — o mesmo aplicativo irá conter códigos para cada serviço que você protege.", "Fazer login no painel com seu nome de usuário e senha.", - "Abra o separador Segurança e escolha Ativar 2FA. O diálogo mostra QR, segredo Base32 e oito códigos de recuperação.", + "Abra o separador Segurança na barra lateral do painel e clique em Ativar 2FA e em Iniciar configuração. O diálogo mostra o QR e a chave manual; os oito códigos de backup aparecem depois de o código ser verificado.", "Adicione a entrada ao aplicativo autenticador:", - "Guarde os códigos de recuperação. Conserve os oito num gestor de palavras-passe, nota cifrada ou cópia impressa segura. Cada um funciona uma vez se a aplicação estiver indisponível.", - "Confirme com o código atual de seis dígitos da aplicação no campo \"Código de verificação\" e envie. Muda a cada 30 segundos; se expirar durante a escrita, use o seguinte.", + "Confirme com o código atual de seis dígitos da aplicação no campo \"Código de verificação\" do diálogo de configuração e envie. Muda a cada 30 segundos; se expirar durante a escrita, use o seguinte.", + "Guarde os códigos de backup. Depois da verificação, conserve os oito em segurança num gestor de palavras-passe, nota cifrada ou cópia impressa segura. Cada um funciona uma vez se o autenticador estiver indisponível.", "Concluído. 2FA está ativo. O próximo início de sessão pede primeiro a palavra-passe e depois o código atual de seis dígitos." ], "setupStep4Sub": [ @@ -261,17 +261,17 @@ "Alternativa manual, se não puder ler o QR, por exemplo no mesmo telefone: Adicionar conta → Introduzir chave de configuração. Escolha um nome como Proxmox Monitor, cole o segredo Base32, mantenha Tipo em Baseado no tempo e guarde." ], "testTitle": "Teste antes de sair", - "testBody": "Mantenha a sessão atual aberta e teste outro início de sessão numa janela privada imediatamente após configurar. Se o código falhar, verifique os relógios do servidor e do telefone antes de terminar a sessão válida. Se já perdeu o acesso, use um código de recuperação ou edite auth.json na shell do anfitrião.", + "testBody": "Mantenha a sessão atual aberta e teste outro início de sessão numa janela privada imediatamente após configurar. Se o código for rejeitado, verifique os relógios do servidor e do telefone antes de terminar a sessão válida. Se já perdeu o acesso, use um código de backup ou edite auth.json na shell do anfitrião.", "lostTitle": "Autenticador perdido", "lostIntro": "Três métodos de recuperação, do menos ao mais intrusivo:", "lostItems": [ - "Use um código de recuperação. Introduza um dos oito no campo TOTP. Funciona uma vez; os restantes continuam válidos. Depois de entrar, configure novamente 2FA nas definições para obter oito códigos novos.", + "Use um código de backup. Introduza um dos oito códigos guardados no campo TOTP. Funciona uma vez; os códigos não usados continuam válidos. Depois de entrar, abra Segurança, escolha Desativar 2FA e depois Ativar 2FA para obter oito códigos novos.", "Restaure a aplicação da nuvem ou de uma cópia. Com sincronização configurada, instale-a no novo dispositivo e inicie sessão: Google, Microsoft, Authy, Apple Passwords via Porta-chaves iCloud, Ente ou 2FAS. Com um ficheiro exportado por Aegis, Raivo ou FreeOTP+, instale a aplicação e importe o ficheiro.", "Desativar 2FA do shell do host. Quando as opções anteriores não estiverem disponíveis, edite /root/.config/proxmenux-monitor/auth.json no host Proxmox (você precisa de acesso raiz SSH ou console), defina totp_enabled para false, salve e reinicie o serviço:" ], "lostShellOutro": "Você pode fazer login com nome de usuário + senha apenas, em seguida, habilitar de configurações 2FA.", "disableTitle": "Desativar 2FA", - "disableBody": "Abra Segurança e escolha Desativar 2FA. POST /api/auth/totp/disable exige palavra-passe atual e código TOTP ou de recuperação válido. Elimina o segredo TOTP e os códigos. Remova também a entrada antiga da aplicação.", + "disableBody": "Abra Segurança e escolha Desativar 2FA. POST /api/auth/totp/disable exige a palavra-passe atual e um código TOTP ou de backup válido. Elimina o segredo TOTP e os códigos de backup. Remova também a entrada antiga da aplicação autenticadora.", "rejectedTitle": "O código de seis dígitos é sempre rejeitado", "rejectedIntro": "O TOTP depende da hora: os relógios do servidor e do telefone devem diferir menos de cerca de 30 s. Duas verificações:", "rejectedItems": [ diff --git a/web/messages/pt/docs/monitor/ai-assistant.json b/web/messages/pt/docs/monitor/ai-assistant.json index 9882a503..cdbc90eb 100644 --- a/web/messages/pt/docs/monitor/ai-assistant.json +++ b/web/messages/pt/docs/monitor/ai-assistant.json @@ -14,7 +14,7 @@ }, "intro": { "title": "Desligado por omissão, comutador único para activar", - "body": "A reformulação por IA vem desativada. Ative-a em Definições → Notificações → Avançado: melhoria por IA. Se o enriquecimento ou a reformulação falhar, é enviado o modelo original. Cada reformulação tem um limite de espera de 25 segundos; ao atingi-lo, utiliza-se o modelo sem esperar indefinidamente." + "body": "A reformulação por IA vem desativada por predefinição. Ative-a em Definições → Notificações → Avançado: melhoria por IA. Se o enriquecimento ou a reformulação falhar, o processo de envio envia o modelo original. As reformulações na fila de envio de eventos têm um limite de espera de 25 segundos; ao atingi-lo, envia-se o modelo em vez de esperar." }, "howItWorks": { "heading": "Como funciona", @@ -109,7 +109,7 @@ ], "customNote": "O modo de prompt personalizado limita a saída a 500 tokens, independentemente do detalhe. O prompt é controlado por si e o limite evita respostas excessivas.", "sizingTitle": "Tamanho prático", - "sizingBody": "Estime o consumo: eventos reformulados × canais IA × tokens de entrada e saída por chamada. Exemplo: 50 eventos × um canal × (500 de entrada + 300 de saída) = 40.000 tokens por dia. O consumo e custo reais dependem do modelo, contexto, cache e limites do fornecedor. Detalhe por canal explica o uso de brief no chat em vez de standard, mantendo e-mails detalhados." + "sizingBody": "Estime o consumo como eventos reformulados × canais com IA × tokens de entrada e saída por chamada. Por exemplo, 50 eventos × um canal × (2.000 de entrada + 300 de saída) são cerca de 115.000 tokens por dia, já que só o prompt de sistema predefinido tem cerca de 1.500 tokens. O consumo e o custo reais dependem do modelo, contexto, cache e limites do fornecedor. A secção Detalhe por canal explica o uso de brief no chat em vez de standard, mantendo relatórios de e-mail detalhados." }, "providers": { "heading": "Prestadores de IA", @@ -142,7 +142,7 @@ "items": [ "Chave API: console.anthropic.com/settings/keys", "Exemplos da lista de modelos incluída: claude-haiku-4-5-20251001, claude-sonnet-4-6, claude-opus-4-6.", - "Recomendação incluída: claude-haiku-4-5-20251001. Esta versão exata está configurada como recomendada; as antigas entradas Claude 3.5 já não constam da lista incluída." + "Recomendação incluída: claude-haiku-4-5-20251001, um snapshot fixo em vez de um alias variável." ] }, "gemini": { diff --git a/web/messages/pt/docs/monitor/api-reference.json b/web/messages/pt/docs/monitor/api-reference.json index 33b4bed5..91fb3a54 100644 --- a/web/messages/pt/docs/monitor/api-reference.json +++ b/web/messages/pt/docs/monitor/api-reference.json @@ -162,7 +162,7 @@ { "endpoint": "/api/vms//backup", "method": "POST", - "use": "Cria uma cópia vzdump de VM ou LXC. Campos opcionais a adaptar ao armazenamento: storage (destino PVE), mode (snapshot, suspend ou stop), compress (zstd, lzo, gzip ou none), protected (true ou false), notes, notification (auto, always, failure ou never) e pbs_change_detection (default, legacy ou data). Devolve o UPID da tarefa PVE." + "use": "Cria uma cópia vzdump de uma VM ou LXC. Campos do corpo, todos opcionais exceto se as predefinições não corresponderem à organização do armazenamento: storage (um armazenamento PVE), mode (snapshot, suspend ou stop), compress (zstd, lzo, gzip ou none), protected (true ou false), notes e pbs_change_detection (default, legacy ou data). Devolve o UPID da tarefa PVE." }, { "endpoint": "/api/vms//backups", @@ -286,7 +286,7 @@ { "endpoint": "/api/storage/smart//test", "method": "POST", - "use": "Inicia um autoteste SMART. Esquema do corpo: '{'\"type\":\"short\"|\"long\"'}'." + "use": "Inicia um autoteste SMART. Esquema do corpo: '{'\"test_type\":\"short\"|\"long\"'}'." }, { "endpoint": "/api/storage/smart/schedules", diff --git a/web/messages/pt/docs/monitor/architecture.json b/web/messages/pt/docs/monitor/architecture.json index ec6c53ad..20b28ae7 100644 --- a/web/messages/pt/docs/monitor/architecture.json +++ b/web/messages/pt/docs/monitor/architecture.json @@ -73,13 +73,13 @@ "intro": "O AppImage contém um sistema de ficheiros montado ao executar. AppRun na raiz prepara o ambiente e inicia flask_server.py:", "consequencesIntro": "Duas consequências deste layout:", "consequences": [ - "Ambiente Python incluído. O interpretador e os pacotes estão no AppImage, sem instalação no Python do sistema. A aplicação continua a usar interfaces do kernel e ferramentas externas do anfitrião.", + "Pacotes Python incluídos. Os pacotes Python vêm no AppImage e correm no interpretador Python do próprio anfitrião, 3.11 (PVE 8) ou 3.13 (PVE 9), sem instalar nada no Python do sistema do anfitrião. A aplicação continua a usar interfaces do kernel e ferramentas externas do anfitrião.", "Clientes de hardware incluídos. Contém ipmitool, lm-sensors e upsc. As leituras dependem do hardware compatível, acesso aos sensores e, para a UPS, de um servidor NUT configurado." ] }, "flask": { "heading": "Estrutura da aplicação Flask", - "intro": "flask_server.py cria uma instância Flask(__name__) com CORS limitado, regista diretamente nove blueprints e inicia o terminal. A tabela destaca módulos principais; regista também auditoria, cópias VM e PBS. As pré-cargas PVE só funcionam em anfitriões PVE.", + "intro": "flask_server.py cria uma instância Flask(__name__) com origens CORS restritas, regista diretamente dez blueprints e inicia as rotas do terminal. A tabela destaca os módulos principais; também são registados os blueprints de PBS, ligações do Monitor, auditoria e cópias VM. As pré-cargas específicas de PVE só funcionam em anfitriões PVE.", "headerBlueprint": "Blueprint / módulo", "headerPrefix": "Prefixo das rotas", "headerOwns": "Responsabilidade", @@ -242,10 +242,10 @@ "Atualizações: pacotes pendentes e correções de segurança.", "Registos: padrões persistentes, picos e cascatas no journal do sistema.", "Memória: intervenções do OOM killer e pressão RAM prolongada.", - "Temperatura: leituras CPU e discos face aos limites de monitorização; os sensores disponíveis dependem do hardware.", + "CPU: utilização e temperatura da CPU face aos limites configuráveis; os sensores disponíveis dependem do hardware.", "Segurança: falhas de acesso, bloqueios e estado do jail Fail2Ban." ], - "afterIntro": "Os resultados usam error_key, categoria e gravidade estáveis. As linhas de errors recebem last_seen e contagens, sem duplicação. O envio de notificações tem também impressões e intervalos próprios.", + "afterIntro": "Os resultados usam error_key, categoria e gravidade estáveis. Os registos existentes em errors são atualizados no local (last_seen, gravidade, motivo), sem duplicação. O envio de notificações tem também regras próprias de impressões e intervalos.", "cycleEnd": "A limpeza pode resolver erros antigos com a duração de silenciamento por categoria e regras de estado, retirar registos órfãos de recursos removidos e apagar events com mais de 30 dias. As categorias estão em Painel → Health Monitor." }, "notifications": { @@ -264,9 +264,9 @@ "intro": "A aba Terminal liga um cliente leve xterm.js a um PTY do servidor por WebSocket. Existem dois modos:", "items": [ "Modo HTTP, predefinido: o servidor Flask incluído e flask-sock tratam a mudança de protocolo para WebSocket.", - "Modo HTTPS / WSS: usa gevent.pywsgi.WSGIServer com geventwebsocket.handler.WebSocketHandler para WebSocket sobre TLS." + "Modo HTTPS / WSS: o servidor TLS usa gevent.pywsgi.WSGIServer com o seu handler predefinido; flask-sock trata as ligações WebSocket sobre TLS." ], - "outro": "Os processos do terminal herdam User=root. Com autenticação ativa, WebSocket exige um ticket breve de uso único obtido pelo endpoint autenticado com permissões administrativas. Se a autenticação estiver desativada ou recusada, a ligação segue esse modo sem autenticação.", + "outro": "Os processos filhos do terminal herdam User=root do serviço. Abrir um WebSocket exige um ticket breve de uso único obtido pelo endpoint autenticado de tickets do terminal com permissões administrativas.", "proxyNote": "Num proxy inverso, permita WebSocket e os cabeçalhos Upgrade e Connection. O terminal precisa desse encaminhamento." }, "proxy": { diff --git a/web/messages/pt/docs/monitor/dashboard/network.json b/web/messages/pt/docs/monitor/dashboard/network.json index 8a8576c1..5b62bb26 100644 --- a/web/messages/pt/docs/monitor/dashboard/network.json +++ b/web/messages/pt/docs/monitor/dashboard/network.json @@ -162,7 +162,7 @@ } ], "reportTitle": "Relatório de latência da rede (PDF)", - "reportIntro": "Ambos os modos têm um botão Relatório junto ao seletor de destino. Gera um PDF das medições que pode anexar a um pedido de assistência ao fornecedor de Internet.", + "reportIntro": "Ambos os modos têm um botão Relatório junto ao seletor de destino. Abre um relatório imprimível das medições; guarde-o em PDF a partir da janela de impressão do navegador e anexe-o a um pedido de assistência ao fornecedor de Internet.", "reportPreviewAlt": "Primeira página PDF do relatório de latência: resumo executivo, indicador, estatísticas, gráfico e guia dos limites", "reportPreviewCaption": "A primeira página contém resumo executivo, indicador, estatísticas principais, evolução da latência e guia dos limites. A partir da página 2 surgem a tabela de medições e a metodologia.", "downloadLabel": "Transferir relatório de latência de exemplo (PDF)", diff --git a/web/messages/pt/docs/monitor/dashboard/security.json b/web/messages/pt/docs/monitor/dashboard/security.json index 0c10615a..01727fc5 100644 --- a/web/messages/pt/docs/monitor/dashboard/security.json +++ b/web/messages/pt/docs/monitor/dashboard/security.json @@ -136,7 +136,7 @@ "configCaption": "Edição da jail sshd: reduza Max Retries se usar SSH apenas a partir da sua sub-rede, ou aumente Ban Time para um painel exposto à Internet.", "outro": "O guia Instalação, configuração e desinstalação inclui a instalação manual, a alteração de SSH MaxAuthTries e a relação com o registo proxmenux-auth.log. Consulte ProxMenux → Segurança → Fail2Ban.", "calloutTitle": "Sem Fail2Ban, este mecanismo não bloqueia IPs", - "calloutBody": "O ProxMenux Monitor verifica os IP bloqueados pelo Fail2Ban ao nível da aplicação antes de processar pedidos Flask. Consulta fail2ban-client e guarda o resultado em cache durante 30 segundos; não lê uma tabela SQL de bloqueios. Sem Fail2Ban, as tentativas falhadas são registadas em proxmenux-auth.log, mas este mecanismo não bloqueia IPs." + "calloutBody": "O ProxMenux Monitor verifica os IP bloqueados na jail proxmenux do Fail2Ban ao nível da aplicação antes de processar pedidos Flask, guardando o resultado em cache durante 30 segundos. Sem Fail2Ban, as tentativas falhadas são registadas em proxmenux-auth.log e o endpoint de início de sessão fica limitado a 5 tentativas por IP a cada 5 minutos, mas nenhum IP é bloqueado." }, "lynis": { "heading": "Auditoria de segurança Lynis", diff --git a/web/messages/pt/docs/monitor/dashboard/settings.json b/web/messages/pt/docs/monitor/dashboard/settings.json index 79d22117..fbad5728 100644 --- a/web/messages/pt/docs/monitor/dashboard/settings.json +++ b/web/messages/pt/docs/monitor/dashboard/settings.json @@ -76,7 +76,7 @@ }, "thresholds": { "heading": "Limites do Health Monitor", - "intro": "O cartão anterior define o silêncio após dispensar um alerta; este regula o valor que desencadeia um alerta. A maioria das verificações tem valores Aviso e Crítico ajustáveis. A tabela explica exceções como a regra combinada de swap e o detetor atual de RAM.", + "intro": "O cartão anterior define o silêncio após dispensar um alerta; este regula o valor que desencadeia um alerta. A maioria das verificações por limiar tem valores Aviso e Crítico ajustáveis. A tabela abaixo explica exceções como a regra combinada de swap.", "whatForTitle": "Para que serve", "whatForIntro": "Os valores predefinidos são um ponto de partida, mas cada ambiente tem condições próprias:", "whatForItems": [ @@ -85,7 +85,7 @@ "Escolha os limites de temperatura conforme as especificações do disco e as condições reais. A refrigeração passiva ou forçada não determina só por si um limite seguro universalmente inferior ou superior.", "Um anfitrião muito virtualizado pode ter picos de CPU durante compilações sem avisar por cada pico de 80%, mas deve alertar para saturação prolongada." ], - "whatForOutro": "As alterações suportadas aplicam-se na próxima análise. O Health Monitor lê /usr/local/share/proxmenux/health_thresholds.json em cada ciclo sem reinício. Alguns indicadores, como a temperatura dos discos, usam estes valores; certas barras de capacidade têm limites próprios. A linha RAM descreve uma exceção atual.", + "whatForOutro": "As alterações de limiares suportadas aplicam-se na próxima análise. O Health Monitor lê /usr/local/share/proxmenux/health_thresholds.json em cada ciclo sem reinício. Alguns indicadores, incluindo a temperatura dos discos, usam estes valores; certas barras de capacidade mantêm limites visuais próprios.", "coloursTitle": "Cores dos estados Aviso e Crítico", "coloursIntro": "Os widgets que usam Aviso/Crítico seguem os três estados abaixo. Outros indicadores, como as barras de capacidade PVE, têm limites próprios; a cor por si só não indica um alerta Health Monitor.", "headerColour": "Cor", @@ -125,7 +125,7 @@ "section": "Memória", "warning": "85 %", "critical": "95 %", - "gates": "Pressão RAM do anfitrião. A definição mostra Crítico a 95%, mas o detetor atual usa uma regra fixa de 90% sustentados; alterar a definição não muda atualmente esse ramo." + "gates": "Pressão RAM do anfitrião." }, { "section": "Swap (apenas nível crítico)", @@ -185,7 +185,7 @@ "section": "Armazenamento PVE", "warning": "85 %", "critical": "95 %", - "gates": "Armazenamentos geridos por PVE: LVM, LVM-thin, ZFS-pool, RBD/Ceph e PBS. Nem todos são backends de blocos." + "gates": "Apenas armazenamentos PVE do tipo LVM, LVM-thin, ZFS-pool, RBD, CephFS e PBS. Os armazenamentos de diretório, NFS e CIFS são cobertos pela linha de espaço em disco do anfitrião." }, { "section": "Conjunto ZFS", @@ -218,7 +218,7 @@ "toggleTitle": "Opção de notificação ligada à deteção", "toggleBody": "A opção lxc_updates_available por canal em Notificações → Serviços só aparece com a deteção ativa. Desativá-la oculta a linha em todos os canais. A preferência fica na base de dados e recupera o mesmo valor ao reativar.", "purgeTitle": "O que é removido ao desativar a deteção", - "purgeBody": "Desativar remove de imediato as entradas type=lxc de /usr/local/share/proxmenux/managed_installs.json. Os contadores de atualizações LXC em Hardware desaparecem na próxima atualização. Reativar preenche o registo no próximo ciclo, ou antes por atualização manual da API." + "purgeBody": "Desativar remove de imediato todas as entradas type=lxc de /usr/local/share/proxmenux/managed_installs.json. Os contadores de atualizações LXC no separador VMs e LXCs desaparecem na próxima atualização do painel. Reativar preenche o registo no próximo ciclo de deteção, ou antes por atualização manual da API." }, "storageExclusions": { "heading": "Exclusões de armazenamento remoto", diff --git a/web/messages/pt/docs/monitor/dashboard/storage.json b/web/messages/pt/docs/monitor/dashboard/storage.json index 5dae7a5d..9da13a25 100644 --- a/web/messages/pt/docs/monitor/dashboard/storage.json +++ b/web/messages/pt/docs/monitor/dashboard/storage.json @@ -70,7 +70,7 @@ "items": [ "Caminho do dispositivo — /dev/sda, /dev/nvme0n1.", "Etiqueta de tipo — SATA / NVMe e respetivo ícone.", - "Etiqueta de sistema — marca laranja dos discos identificados como discos do sistema operativo. A deteção usa as montagens / e /boot e atribui System. A ausência da etiqueta não prova que o disco possa ser apagado ou reutilizado sem risco.", + "Etiqueta de sistema — marca laranja dos discos usados pelo anfitrião: pontos de montagem do sistema (/, /boot, /usr, /var…), swap ativo, membros de pools ZFS, volumes físicos LVM, membros RAID ativos ou etiquetas de partições do sistema. A ausência da etiqueta não prova que o disco possa ser apagado ou reutilizado sem risco.", "Modelo — fabricante e modelo de smartctl -i.", "Capacidade — expressa em unidades legíveis.", "Temperatura — valor atual em °C, com cor conforme o tipo de disco; NVMe usa limites mais altos que SATA.", @@ -112,7 +112,7 @@ "pdfPreviewAlt": "Primeira página do relatório SMART com resumo executivo, indicador PASSED e informações do disco", "pdfPreviewCaption": "Primeira página: resumo, indicador PASSED e informações completas do disco. O PDF de exemplo inclui desgaste SSD, todos os atributos SMART e histórico de testes.", "pdfDownloadLabel": "Transferir relatório SMART de exemplo (PDF)", - "pdfSectionsIntro": "O relatório tem seis secções principais:", + "pdfSectionsIntro": "O relatório inclui estas secções principais:", "pdfSections": [ "Resumo executivo — estado PASSED/FAILED, avaliação clara do disco — saudável, com desgaste ou a falhar — e quatro dados: data do relatório, último tipo de teste, resultado e atributos verificados.", "Informações do disco — modelo, série, capacidade, tipo HDD/SSD/NVMe, família, formato, interface (SATA 3.3 · 6.0 Gb/s, …), TRIM, temperatura e limite ideal, horas e ciclos de funcionamento, SMART, setores pendentes/realocados e erros CRC.", @@ -127,7 +127,7 @@ "historyImageCaption": "Histórico SMART do disco. Cada linha mostra tipo, data e hora, antiguidade, marca do último teste e ações de transferência da saída smartctl e eliminação.", "historyIntro": "Testes curtos e alargados concluídos e guardados para o disco. Cada entrada contém a saída original smartctl e os campos interpretados pelo Monitor para o painel. Ações por linha:", "historyItems": [ - "Transferir — guarda a cópia JSON com os dados smartctl -a usados pelo relatório. Útil se o suporte pedir os campos de diagnóstico originais.", + "Transferir — guarda a cópia JSON desse teste (saída de smartctl -a --json, ou nvme smart-log em NVMe quando o smartctl falha). Útil se o suporte do fabricante pedir os campos de diagnóstico originais.", "Eliminar — remove manualmente um teste do histórico. A retenção em Agendamento (últimos 5 / 10 / 20) elimina automaticamente os mais antigos." ], "scheduleTitle": "Separador 4 — Agendamento", diff --git a/web/messages/pt/docs/monitor/dashboard/vms-lxcs.json b/web/messages/pt/docs/monitor/dashboard/vms-lxcs.json index 9adcc28e..5931276b 100644 --- a/web/messages/pt/docs/monitor/dashboard/vms-lxcs.json +++ b/web/messages/pt/docs/monitor/dashboard/vms-lxcs.json @@ -1,16 +1,16 @@ { "meta": { "title": "ProxMenux Monitor — Painel: VM e LXC | Documentação ProxMenux", - "description": "Inventário dos sistemas convidados com CPU, memória e disco em direto. Os detalhes mostram configuração, recursos, cópias de segurança, resultados recentes do registo Proxmox, notas e Iniciar / Desligar / Reiniciar / Forçar paragem." + "description": "O separador VMs e LXCs inventaria todos os sistemas convidados do anfitrião com utilização de CPU, memória e disco em direto. Os detalhes de cada um mostram configuração, recursos, cópias de segurança, o registo de consola dos contentores OCI, notas e Iniciar / Desligar / Reiniciar / Forçar paragem." }, "header": { "title": "Painel: VM e LXC", - "description": "Inventário completo dos sistemas convidados: quatro métricas no topo, lista ordenável de VM e LXC e detalhes com configuração, recursos, cópias de segurança, registos e controlos Iniciar / Desligar / Reiniciar / Forçar paragem.", + "description": "Inventário completo dos sistemas convidados do nó: quatro métricas no topo, lista ordenável de cada VM e LXC por baixo e detalhes com configuração, recursos, cópias de segurança, o registo de consola dos contentores OCI e os quatro controlos de ciclo de vida (Iniciar / Desligar / Reiniciar / Forçar paragem).", "section": "ProxMenux Monitor · Painel" }, "intro": { "title": "Controlos dos sistemas convidados", - "body": "Este separador controla o ciclo de vida dos sistemas convidados. As ações passam por POST /api/vms/<vmid>/control com confirmação explícita e atualizam a linha do sistema. O desligamento forçado exige o botão específico Forçar paragem." + "body": "Este separador controla o ciclo de vida dos sistemas convidados. As ações de ciclo de vida passam por POST /api/vms/<vmid>/control; Reiniciar e Forçar paragem pedem que escreva o VMID para confirmar, e a resposta reflete-se na linha do sistema. O desligamento forçado exige o botão específico Forçar paragem." }, "topRow": { "heading": "Linha superior: quatro cartas estatísticas", @@ -186,9 +186,9 @@ "source": "Dados PVE RRD (pvesh get /nodes/<node>/qemu/<id>/rrddata) condensados a uma forma amigável a gráficos." }, { - "section": "Resultados recentes do registo Proxmox", - "endpoint": "/api/vms//logs", - "source": "pvesh get /nodes/<node>/<qemu|lxc>/<vmid>/log --start 0 --limit 1000. Uma falha devolve uma lista vazia; não fornece todos os registos internos do sistema convidado." + "section": "Registo de consola OCI (separador Logs)", + "endpoint": "/api/lxc//console-log", + "source": "Saída de consola do processo principal da imagem, lida de /var/log/proxmenux/oci/<vmid>.console.log no anfitrião. Mostrado apenas para contentores OCI." }, { "section": "Backups disponíveis para hóspedes", diff --git a/web/messages/pt/docs/monitor/health-monitor.json b/web/messages/pt/docs/monitor/health-monitor.json index 50e331f3..7b24f9d7 100644 --- a/web/messages/pt/docs/monitor/health-monitor.json +++ b/web/messages/pt/docs/monitor/health-monitor.json @@ -68,7 +68,7 @@ { "category": "Armazenamento", "checks": "Armazenamento do Proxmox, sistema de arquivos raiz", - "events": "Limiares de ocupação ultrapassados na raiz ou noutros sistemas de ficheiros monitorizados (85% aviso / 95% crítico por predefinição); exportação NFS indisponível; falha de autenticação CIFS; pool LVM-thin cheio." + "events": "Limiares de ocupação ultrapassados na raiz ou noutros sistemas de ficheiros monitorizados (85% aviso / 95% crítico por predefinição); armazenamentos PVE indisponíveis; montagens NFS/CIFS bloqueadas ou inesperadamente só de leitura; armazenamentos LVM-thin e outros pools que ultrapassam os mesmos limiares." }, { "category": "Discos e SMART", @@ -98,7 +98,7 @@ { "category": "Atualizações do sistema", "checks": "Atualizações pendentes, atualizações de segurança, kernel / versão PVE, idade do sistema", - "events": "Atualizações de segurança ou do kernel em uso pendentes; sistema sem atualizar há muito tempo. O cabeçalho da vista geral apresenta Atualizar agora quando há atualizações. O botão executa todo o processo ProxMenux; ao fechar, atualiza o estado com ?refresh=1 sem esperar pelo ciclo seguinte." + "events": "Atualizações de segurança ou do kernel em uso pendentes; sistema sem atualizar há muito tempo. A categoria Atualizações da janela Estado de saúde apresenta o botão Atualizar agora quando há atualizações pendentes. Executa todo o processo de atualização ProxMenux na própria janela; ao fechar, atualiza o estado com ?refresh=1 para que o indicador mostre o novo estado sem esperar pelo ciclo seguinte." }, { "category": "Segurança e Certificados", @@ -158,7 +158,7 @@ }, "dismiss": { "heading": "Silenciar alertas e definir a duração da supressão", - "intro": "Alguns eventos persistem, como Atualizações do sistema: atualizações disponíveis até atualizar o anfitrião. Uma notificação a cada cinco minutos seria desnecessária. O botão Atualizar agora na vista geral resolve diretamente esse caso. Para os restantes casos ou atualizações adiadas, há dois mecanismos ligados de silenciamento:", + "intro": "Alguns eventos persistem por natureza, como Atualizações do sistema: atualizações disponíveis até atualizar o anfitrião, e uma notificação a cada cinco minutos durante uma semana seria desnecessária. O botão Atualizar agora na categoria Atualizações da janela Estado de saúde resolve diretamente esse caso. Para os restantes casos ou atualizações adiadas, a monitorização oferece também dois mecanismos ligados de silenciamento:", "step1": "Silenciar um evento na janela. O menu oferece 24 horas, 7 dias ou Permanentemente, independentemente da categoria. A escolha envia POST /api/health/acknowledge com error_key e suppression_hours (-1 para permanente). O evento passa aos suprimidos com a data acknowledged_at.", "dropdownImageAlt": "Menu para silenciar um alerta: 24 horas, 7 dias ou permanentemente", "dropdownImageCaption": "A duração escolhida aplica-se só a este alerta; sem escolha individual, usa-se o valor da categoria. Os alertas silenciados permanentemente têm uma etiqueta âmbar Permanente e normalmente não reaparecem. A temperatura crítica da CPU é a exceção descrita abaixo.", @@ -187,7 +187,7 @@ }, { "finding": "ZFS pool DEGRADED / FAULTED", - "why": "As verificações de capacidade dos pools ZFS permitem a supressão. As restantes ocorrências seguem o seu próprio indicador. Reconhecer não repara um pool degradado ou avariado." + "why": "As ocorrências de estado dos pools ZFS (DEGRADED, FAULTED, UNAVAIL) permitem explicitamente a supressão, tal como as verificações de capacidade dos pools. Reconhecer não repara um pool degradado ou avariado." }, { "finding": "Erros de E/S de disco com SMART FAILED", @@ -289,7 +289,7 @@ }, "rest": { "heading": "Endpoints REST", - "intro": "As ações da janela estão disponíveis pela API para scripts, painéis ou bots. Com a autenticação do Monitor ativa, é necessário um token Bearer válido, obtido no início de sessão ou no ecrã de tokens API. As alterações, como reconhecer alertas, guardar ou limpar erros órfãos, exigem full_admin; read_only recebe 403. Com autenticação desativada ou recusada, estes controlos permitem acesso sem token.", + "intro": "As ações da janela também estão disponíveis pela API para scripts, painéis personalizados ou bots. As chamadas exigem um token Bearer válido, obtido no início de sessão ou no ecrã de tokens API. As alterações, como reconhecer alertas, guardar definições de supressão ou limpar erros órfãos, exigem o âmbito full_admin; read_only recebe 403.", "headerEndpoint": "Endpoint", "headerMethod": "Método", "headerUse": "Utilização", @@ -297,7 +297,7 @@ { "endpoint": "/api/health", "method": "GET", - "use": "Verificação leve que devolve JSON com status, timestamp e version. Serve para verificações de palavras-chave Uptime Kuma; com autenticação do Monitor ativa, o cliente tem de enviar um cabeçalho Bearer." + "use": "Verificação leve que devolve JSON com status, timestamp e version. Serve para verificações de palavras-chave Uptime Kuma; o cliente tem de enviar um cabeçalho Bearer." }, { "endpoint": "/api/health/status", diff --git a/web/messages/pt/docs/monitor/index.json b/web/messages/pt/docs/monitor/index.json index 6c47b736..2d6eef39 100644 --- a/web/messages/pt/docs/monitor/index.json +++ b/web/messages/pt/docs/monitor/index.json @@ -52,7 +52,7 @@ }, { "name": "Terminal", - "description": "Shell do host e consolas VM/CT suportadas no navegador via xterm.js e WebSockets. Segue a autenticação configurada: desativada ou recusada, permite sessões sem início de sessão a clientes com acesso de rede. Não implica auditoria de cada comando." + "description": "Shell do host e consolas VM/CT suportadas no navegador via xterm.js e WebSockets. As sessões não são auditadas por comando." }, { "name": "Segurança", @@ -114,7 +114,7 @@ "heading": "REST API e integrações", "intro": "Os endpoints REST expõem dados de monitorização JSON por HTTP/HTTPS para Homepage, Home Assistant, Uptime Kuma e scripts. Grafana pode usar o exportador de texto Prometheus separado em /api/prometheus. As chamadas podem usar curl.", "tokens": "Tokens API de longa duração (365 dias) são gerados em Configurações → API Tokens de acesso ou via POST /api/auth/generate-api-token.", - "bearer": "Envie tokens com Authorization: Bearer …. O endpoint público /api/health serve a testes de disponibilidade sem credenciais. Em /api/auth/* existem rotas públicas de configuração/início/estado e rotas protegidas de contas e tokens; nem todas são anónimas.", + "bearer": "Envie tokens com Authorization: Bearer …. /api/health também espera o cabeçalho Bearer, pelo que os testes de disponibilidade precisam de um token read_only. Em /api/auth/* existem tanto rotas públicas de configuração/início/estado como rotas protegidas de contas e tokens; nem todas são anónimas.", "catalog": "O catálogo de endpoints, rotação de tokens e segurança estão na Referência da API; exemplos para Homepage, Home Assistant, Grafana, Uptime Kuma e cURL estão em Integrações." }, "serviceControl": { diff --git a/web/messages/pt/docs/monitor/integrations.json b/web/messages/pt/docs/monitor/integrations.json index 90bb0b37..a1c33729 100644 --- a/web/messages/pt/docs/monitor/integrations.json +++ b/web/messages/pt/docs/monitor/integrations.json @@ -220,7 +220,7 @@ "heading": "n8n, Zapier e scripts personalizados", "intro": "Workflows e scripts podem enviar notificações por POST para /api/notifications/send, por exemplo após falha CI ou tarefa demasiado longa. O envio direto ignora a fila e o intervalo entre impressões digitais dos eventos. Mantém a formatação, IA opcional e entrega por canal. Controle os duplicados na origem.", "n8nBody": "No n8n use um nó HTTP Request com POST, o URL acima e o mesmo JSON do curl. Escolha credenciais genéricas Header Auth: nome Authorization e valor Bearer YOUR_API_TOKEN, substituindo o marcador. Ligue um agendamento, webhook ou outro nó para iniciar o pedido.", - "severityBody": "A gravidade usa INFO, WARNING ou CRITICAL em maiúsculas. O objeto data fornece contexto. A IA usa título e mensagem gerados e os enriquecimentos suportados; nem todos os campos entram necessariamente no prompt ou resultado. Veja Notificações → Catálogo de eventos." + "severityBody": "A gravidade usa INFO, WARNING ou CRITICAL em maiúsculas. O objeto data fornece o contexto do evento e os campos do modelo. Neste endpoint, a reformulação por IA recebe apenas o título e a mensagem; os campos de data não são enviados ao fornecedor. Veja Notificações → Catálogo de eventos para o significado dos eventos." }, "pveWebhook": { "heading": "Webhook nativo Proxmox VE (entrada)", diff --git a/web/messages/pt/docs/monitor/notifications.json b/web/messages/pt/docs/monitor/notifications.json index 7ebaf342..4296dc37 100644 --- a/web/messages/pt/docs/monitor/notifications.json +++ b/web/messages/pt/docs/monitor/notifications.json @@ -171,7 +171,7 @@ "Abra o account.microsoft.com/security e habilite a verificação em duas etapas.", "Se disponível, abra Opções de segurança avançadas → Palavras-passe de aplicações → Criar nova palavra-passe de aplicação. A sua existência não prova que o serviço aceite SMTP por palavra-passe.", "Se Microsoft gerar uma palavra-passe de aplicação, copie-a e verifique se o serviço SMTP a aceita.", - "Só se SMTP por palavra-passe for permitido, use os parâmetros aprovados: Servidor smtp.office365.com para Exchange Online, Porta 587, Modo TLS STARTTLS, Utilizador com o endereço email e Palavra-passe com a credencial permitida. Outlook.com pessoal tem requisitos diferentes; não presuma que funcione." + "Só se o seu fornecedor permitir SMTP por palavra-passe, preencha os parâmetros aprovados: Host SMTP smtp.office365.com para Exchange Online, Porta 587, Modo TLS STARTTLS, Utilizador com o endereço da caixa de correio e Palavra-passe com a credencial SMTP permitida. O Outlook.com pessoal tem definições e requisitos de autenticação diferentes; não presuma que estas credenciais funcionem." ], "relayTitle": "Relay SMTP gerido por si", "relayBody": "Pode usar um relay SMTP sob o seu controlo, como Postfix, que trate da autenticação a montante. Configure credenciais e TLS do Monitor conforme o relay: usar um relay local não desativa por si só a encriptação." @@ -266,7 +266,7 @@ "howItems": [ "Ativação por canal. Desativado por predefinição. Ative só nos canais onde pretende um resumo; os restantes mantêm envios imediatos.", "Hora de envio no fuso local, inicialmente 09:00. Pode alterá-la; o processo envia até cerca de 60 segundos após o minuto definido.", - "No resumo: eventos genéricos elegíveis de nível INFO, como atualizações de aplicações, atualizações Tailscale, atualizações de otimizações ProxMenux, atualizações de segurança APT e avisos de limite de frequência. Resultados de cópias e outras ações excluídas continuam imediatos.", + "No resumo: eventos genéricos elegíveis de nível INFO. Por exemplo, atualizações de aplicações, atualizações Tailscale, atualizações de otimizações ProxMenux e atualizações de segurança APT. Resultados de cópias e outros eventos de ações excluídas continuam imediatos.", "O que nunca é atrasado:", "Persistência. Os eventos permanecem em SQLite, na tabela digest_pending, até à hora escolhida e sobrevivem aos reinícios do Monitor.", "Sem eventos, sem resumo. Não envia mensagens vazias quando não existem eventos INFO a resumir." @@ -301,7 +301,7 @@ { "stage": "Intervalo entre envios", "what": "Após envio bem-sucedido suprime repetições e guarda o estado em notification_last_sent. Valores base: 86 400 s para CRITICAL, WARNING, INFO, resources e updates. Exceções: 5 s para ações VM/CT e encerramento/reinício do anfitrião, 10 s para resultados de cópias/replicação, 1 800–3 600 s para várias categorias de saúde. Definições explícitas por evento/grupo prevalecem.", - "tunable": "Sim: definições explícitas do intervalo por evento ou grupo substituem os valores predefinidos do processo de envio." + "tunable": "Apenas através da API de definições: uma chave cooldown.<event_type> ou cooldown.<group> substitui os valores predefinidos; não existe nenhum controlo na interface." }, { "stage": "Agregação de eventos próximos", @@ -330,7 +330,7 @@ "Método e URL. POST http://127.0.0.1:8008/api/notifications/webhook sem HTTPS do Monitor. Com HTTPS usa o listener HTTP local separado na porta 8009. Ambos permanecem no mesmo anfitrião.", "Modelo do corpo. Usa os auxiliares Handlebars do PVE. O PVE guarda-o codificado em base64; o conteúdo JSON é:", "Matcher. Um bloco matcher: proxmenux-matcher companheiro com mode all para que cada notificação PVE atinja o alvo.", - "Configuração privada. Cria o bloco webhook: proxmenux-webhook em /etc/pve/priv/notifications.cfg com o segredo partilhado em base64. O destino público usa-o para X-Webhook-Secret. O bloco não está vazio." + "Configuração privada. A configuração escreve o bloco correspondente webhook: proxmenux-webhook em /etc/pve/priv/notifications.cfg com uma entrada secret chamada X-Webhook-Secret, codificada em base64. O bloco público do destino contém apenas o modelo do corpo, o método e o URL. O bloco privado não é um esboço vazio." ], "securityTitle": "Como o receptor está seguro", "securityIntro": "O receptor webhook em POST /api/notifications/webhook aplica diferentes camadas de segurança, dependendo de onde o pedido vem:", diff --git a/web/messages/sk/docs/monitor/access-auth.json b/web/messages/sk/docs/monitor/access-auth.json index 445c9b87..7f2adb94 100644 --- a/web/messages/sk/docs/monitor/access-auth.json +++ b/web/messages/sk/docs/monitor/access-auth.json @@ -19,7 +19,7 @@ "reaching": { "heading": "Prístup k panelu", "intro": "ProxMenux Monitor sa viaže na 0.0.0.0:8008. Existujú tri bežné spôsoby, ako ju dosiahnuť:", - "outro": "Priamy prístup zodpovedá predvolenej jednotke systemd. Reverzný proxy a Secure Gateway sú opísané nižšie. IP z X-Forwarded-For vyžadujú PROXMENUX_TRUST_PROXY=1 a proxy pod vašou kontrolou. Samotné X-Forwarded-Proto alebo X-Forwarded-Host túto dôveru nezapnú; frontend zostavuje URL API z pôvodu prehliadača." + "outro": "Priamy prístup zodpovedá predvolenej jednotke systemd. Reverzný proxy a Secure Gateway sú opísané nižšie. Dôvera v IP klientov z X-Forwarded-For vyžaduje PROXMENUX_TRUST_PROXY=1 a proxy pod vašou kontrolou. Samotná prítomnosť X-Forwarded-Proto alebo X-Forwarded-Host dôveru v proxy nezapne. Na portoch 80/443 frontend používa relatívne URL /api/*; na akomkoľvek inom porte volá port 8008 na rovnakom názve hostiteľa." }, "firstLaunch": { "heading": "Postup pri prvom spustení", @@ -117,8 +117,8 @@ "loginImageCaption": "Po nastavení overenia sa tu začína prihlásenie. Pri zapnutom 2FA sa po prijatí hesla vyžiada šesťmiestny kód.", "loginFlowTitle": "Prihlasovací tok", "twofaIntro": "Pri 2FA prvé volanie vráti requires_totp: true. Zopakujte ho so šesťmiestnym kódom:", - "publicTitle": "Verejný prístup a chránené kontroly", - "publicIntro": "Prihlásenie a stav overenia sú verejné. Účet možno vytvoriť, kým nie sú uložené meno a heslo, aj po odmietnutí ochrany. Pri zapnutej ochrane vyžadujú systémové údaje overenie:", + "publicTitle": "Verejné koncové body (bez tokenu)", + "publicIntro": "Prihlásenie, stav overenia, počiatočné nastavenie a ľahký koncový bod /api/system-info sú verejné:", "publicItems": [ "/api/auth/login a /api/auth/status sú verejné. /api/auth/setup vytvorí prvý účet a odmietne prepísať existujúce prihlasovacie údaje.", "/api/system-info je verejný endpoint so základnými údajmi systému vrátane health.status. Nevyžaduje token. Aj /api/auth/status je verejný a hodí sa na kontrolu dostupnosti." @@ -146,7 +146,7 @@ }, { "asset": "Tajný kľúč TOTP pre 2FA", - "algorithm": "Štandardný TOTP (RFC 6238) s tajným kľúčom v base32. Osem jednorazových obnovovacích kódov sa ukladá ako hashe SHA-256.", + "algorithm": "Štandardný TOTP (RFC 6238) s tajným kľúčom v base32. Osem jednorazových záložných kódov sa ukladá ako hashe SHA-256.", "where": "auth.json → totp_secret + backup_codes[]" }, { @@ -243,17 +243,17 @@ } ], "backupTitle": "Prečo sú zálohy dôležité", - "backupBody": "Pri strate zariadenia použite uložený obnovovací kód alebo obnovte vopred nastavenú zálohu. Cloudová synchronizácia a exporty sa líšia podľa aplikácie; overte, že obnovia aj tajné kľúče TOTP. Prístup root na hostiteľovi umožňuje aj obnovu opísanú nižšie. Uchovajte samostatnú bezpečnú zálohu.", + "backupBody": "Pri strate overovacieho zariadenia použite uložený záložný kód alebo obnovte aplikáciu z vopred nastavenej zálohy. Cloudová synchronizácia a lokálne exporty sa líšia podľa aplikácie; overte, že zvolený spôsob naozaj obnoví tajné kľúče TOTP. Prístup root na hostiteľovi umožňuje aj obnovu opísanú nižšie. Uchovajte samostatnú bezpečnú zálohu.", "setupTitle": "Nastavenie krok za krokom z panelu", "setupImageAlt": "Nastavovacia obrazovka 2FA s QR kódom a záložnými kódmi", - "setupImageCaption": "Dialóg 2FA zobrazuje QR, tajný kľúč Base32 na ručné zadanie a osem jednorazových obnovovacích kódov. Pred zatvorením ich skopírujte; už sa nezobrazia.", + "setupImageCaption": "Dialóg nastavenia 2FA zobrazuje QR, tajný kľúč Base32 na ručné zadanie a po overení osem jednorazových záložných kódov. Kódy skopírujte pred zatvorením dialógu; už sa nezobrazia.", "setupSteps": [ "Nainštalujte autentifikačnú aplikáciu do telefónu alebo otvorte správcu hesiel. Stačí raz; rovnaká aplikácia môže uchovávať kódy pre všetky chránené služby.", "Prihláste sa do panelu menom a heslom.", - "Otvorte kartu Zabezpečenie a vyberte Zapnúť 2FA. Dialóg zobrazí QR, tajný kľúč Base32 a osem obnovovacích kódov.", + "Otvorte kartu Zabezpečenie v bočnom paneli dashboardu a kliknite na Zapnúť 2FA a Spustiť nastavenie. Dialóg zobrazí QR a ručný kľúč; osem záložných kódov sa zobrazí po overení kódu.", "Pridajte položku do autentifikačnej aplikácie:", - "Uložte obnovovacie kódy. Všetkých osem bezpečne uložte do správcu hesiel, šifrovanej poznámky alebo na papier. Každý funguje raz, keď aplikácia nie je dostupná.", - "Potvrďte aktuálnym šesťmiestnym kódom z aplikácie v poli \"Overovací kód\" a odošlite. Mení sa každých 30 sekúnd; ak počas písania vyprší, použite ďalší.", + "Potvrďte aktuálnym šesťmiestnym kódom z aplikácie v poli \"Overovací kód\" dialógu nastavenia a odošlite. Mení sa každých 30 sekúnd; ak počas písania vyprší, použite ďalší.", + "Uložte záložné kódy. Po overení všetkých osem bezpečne uložte do správcu hesiel, šifrovanej poznámky alebo na zabezpečenú tlačenú kópiu. Každý funguje raz, keď overovacia aplikácia nie je dostupná.", "Hotovo. 2FA je aktívne. Ďalšie prihlásenie vyžiada najprv heslo a potom aktuálny šesťmiestny kód." ], "setupStep4Sub": [ @@ -261,17 +261,17 @@ "Ručná alternatíva, ak nemožno skenovať, napríklad na rovnakom telefóne: Pridať účet → Zadať nastavovací kľúč. Zvoľte názov ako Proxmox Monitor, vložte tajný kľúč Base32, nechajte Typ nastavený na Časový a uložte." ], "testTitle": "Test pred odhlásením", - "testBody": "Aktuálnu reláciu nechajte otvorenú a hneď po nastavení otestujte nové prihlásenie v súkromnom okne. Ak kód nefunguje, pred odhlásením skontrolujte hodiny servera a telefónu. Ak je prístup už stratený, použite obnovovací kód alebo upravte auth.json zo shellu hostiteľa.", + "testBody": "Aktuálnu reláciu nechajte otvorenú a hneď po nastavení otestujte nové prihlásenie v súkromnom okne. Ak je kód odmietnutý, pred odhlásením z funkčnej relácie skontrolujte hodiny servera a telefónu. Ak je prístup už stratený, použite záložný kód alebo upravte auth.json zo shellu hostiteľa.", "lostTitle": "Stratený autentifikátor", "lostIntro": "Tri spôsoby obnovy, od najmenšieho po najväčší zásah:", "lostItems": [ - "Použite obnovovací kód. Jeden z ôsmich zadajte do poľa TOTP. Funguje raz; nepoužité kódy zostanú platné. Po prihlásení nastavte 2FA znova v nastaveniach a získajte osem nových kódov.", + "Použite záložný kód. Jeden z ôsmich uložených kódov zadajte do poľa TOTP. Funguje raz; nepoužité kódy zostanú platné. Po prihlásení otvorte Zabezpečenie, vyberte Vypnúť 2FA a potom Zapnúť 2FA a získajte osem nových kódov.", "Obnovte aplikáciu z cloudu alebo zálohy. Pri nastavenej synchronizácii ju nainštalujte na nové zariadenie a prihláste sa: Google, Microsoft, Authy, Apple Passwords cez iCloud Kľúčenku, Ente alebo 2FAS. Pri exporte z Aegis, Raivo alebo FreeOTP+ nainštalujte aplikáciu a importujte súbor.", "Vypnite 2FA zo shellu hostiteľa. Ak iné možnosti nie sú dostupné, upravte /root/.config/proxmenux-monitor/auth.json ako root cez SSH alebo konzolu. Nastavte totp_enabled na false, uložte a reštartujte službu:" ], "lostShellOutro": "Môžete sa prihlásiť iba s užívateľským menom + heslom a potom znovu zapnúť 2FA z Nastavenia.", "disableTitle": "Vypnúť 2FA", - "disableBody": "Otvorte Zabezpečenie a vyberte Vypnúť 2FA. POST /api/auth/totp/disable vyžaduje aktuálne heslo a platný TOTP alebo obnovovací kód. Odstráni tajný kľúč aj obnovovacie kódy. Starú položku odstráňte aj z aplikácie.", + "disableBody": "Otvorte Zabezpečenie a vyberte Vypnúť 2FA. POST /api/auth/totp/disable vyžaduje aktuálne heslo a platný TOTP alebo záložný kód. Odstráni tajný kľúč TOTP aj záložné kódy. Starú položku odstráňte aj z overovacej aplikácie.", "rejectedTitle": "Šesťmiestny kód je vždy odmietnutý", "rejectedIntro": "TOTP závisí od času. Rozdiel hodín servera a telefónu má byť najviac približne 30 s. Dve kontroly:", "rejectedItems": [ diff --git a/web/messages/sk/docs/monitor/ai-assistant.json b/web/messages/sk/docs/monitor/ai-assistant.json index 3d8ad079..0e5ac9b4 100644 --- a/web/messages/sk/docs/monitor/ai-assistant.json +++ b/web/messages/sk/docs/monitor/ai-assistant.json @@ -14,7 +14,7 @@ }, "intro": { "title": "Predvolene vypnuté, zapnutie jedným prepínačom", - "body": "Prepis AI je predvolene vypnutý. Zapnite ho v Nastavenia → Oznámenia → Pokročilé: vylepšenie AI. Pri chybe doplnenia kontextu alebo prepisu sa odošle pôvodná šablóna. Každý prepis má časový limit 25 sekúnd; po jeho uplynutí sa použije šablóna bez neobmedzeného čakania." + "body": "Prepis AI je predvolene vypnutý. Zapnite ho v Nastavenia → Oznámenia → Pokročilé: vylepšenie AI. Pri chybe doplnenia kontextu alebo prepisu odosielač pošle pôvodnú šablónu. Prepisy vo fronte odosielania udalostí majú časový limit 25 sekúnd; po jeho dosiahnutí sa namiesto čakania odošle šablóna." }, "howItWorks": { "heading": "Ako to funguje", @@ -109,7 +109,7 @@ ], "customNote": "Režim vlastného promptu má pevný limit 500 výstupných tokenov bez ohľadu na úroveň detailov. Prompt ovládate vy a limit bráni neprimerane dlhým odpovediam.", "sizingTitle": "Praktická veľkosť", - "sizingBody": "Spotrebu odhadnite ako prepísané udalosti × kanály AI × vstupné a výstupné tokeny na volanie. Napríklad 50 udalostí × jeden kanál × (500 vstupných + 300 výstupných) = 40 000 tokenov denne. Skutočná spotreba a cena závisia od modelu, kontextu, cache a limitov poskytovateľa. Časť Detaily podľa kanála opisuje brief pre chat namiesto standard pri zachovaní podrobných e-mailov." + "sizingBody": "Spotrebu odhadnite ako prepísané udalosti × kanály s AI × vstupné a výstupné tokeny na volanie. Napríklad 50 udalostí × jeden kanál × (2 000 vstupných + 300 výstupných) je asi 115 000 tokenov denne, pretože samotný predvolený systémový prompt má približne 1 500 tokenov. Skutočná spotreba a cena závisia od modelu, kontextu, cache a limitov poskytovateľa. Časť Detaily podľa kanála opisuje brief pre chat namiesto standard pri zachovaní podrobných e-mailových správ." }, "providers": { "heading": "Poskytovatelia AI", @@ -142,7 +142,7 @@ "items": [ "Kľúč API: console.anthropic.com/settings/keys", "Príklady z dodaného zoznamu modelov: claude-haiku-4-5-20251001, claude-sonnet-4-6, claude-opus-4-6.", - "Dodané odporúčanie: claude-haiku-4-5-20251001. Odporúčaná je táto presná verzia; staršie položky Claude 3.5 už v dodanom zozname nie sú." + "Dodané odporúčanie: claude-haiku-4-5-20251001, pevne určená snímka namiesto premenlivého aliasu." ] }, "gemini": { diff --git a/web/messages/sk/docs/monitor/api-reference.json b/web/messages/sk/docs/monitor/api-reference.json index 2fc2dbb7..379dbcb3 100644 --- a/web/messages/sk/docs/monitor/api-reference.json +++ b/web/messages/sk/docs/monitor/api-reference.json @@ -162,7 +162,7 @@ { "endpoint": "/api/vms//backup", "method": "POST", - "use": "Vytvorí zálohu vzdump VM alebo LXC. Voliteľné polia prispôsobte úložisku: storage (cieľ PVE), mode (snapshot, suspend alebo stop), compress (zstd, lzo, gzip alebo none), protected (true alebo false), notes, notification (auto, always, failure alebo never) a pbs_change_detection (default, legacy alebo data). Vráti UPID úlohy PVE." + "use": "Vytvorí zálohu vzdump VM alebo LXC. Polia tela, všetky voliteľné, ak predvolené hodnoty zodpovedajú rozloženiu úložiska: storage (úložisko PVE), mode (snapshot, suspend alebo stop), compress (zstd, lzo, gzip alebo none), protected (true alebo false), notes a pbs_change_detection (default, legacy alebo data). Vráti UPID úlohy PVE." }, { "endpoint": "/api/vms//backups", @@ -286,7 +286,7 @@ { "endpoint": "/api/storage/smart//test", "method": "POST", - "use": "Spustí autotest SMART. Schéma tela: '{'\"type\":\"short\"|\"long\"'}'." + "use": "Spustí autotest SMART. Schéma tela: '{'\"test_type\":\"short\"|\"long\"'}'." }, { "endpoint": "/api/storage/smart/schedules", diff --git a/web/messages/sk/docs/monitor/architecture.json b/web/messages/sk/docs/monitor/architecture.json index 6901f32c..d160d4ad 100644 --- a/web/messages/sk/docs/monitor/architecture.json +++ b/web/messages/sk/docs/monitor/architecture.json @@ -73,13 +73,13 @@ "intro": "AppImage obsahuje súborový systém pripojený pri spustení. AppRun v koreni pripraví prostredie a spustí flask_server.py:", "consequencesIntro": "Dva dôsledky tohto usporiadania:", "consequences": [ - "Pribalené prostredie Python. Interpret a balíky sú v AppImage, bez inštalácie do systémového Pythonu. Aplikácia naďalej používa rozhrania jadra a externé nástroje hostiteľa.", + "Pribalené balíky Python. Balíky Python sú súčasťou AppImage a bežia na vlastnom interpretri Python hostiteľa 3.11 (PVE 8) alebo 3.13 (PVE 9), bez inštalácie čohokoľvek do systémového Pythonu hostiteľa. Aplikácia naďalej používa rozhrania jadra hostiteľa a externé nástroje hostiteľa.", "Pribalení klienti hardvéru. Obsahuje ipmitool, lm-sensors a upsc. Merania vyžadujú podporovaný hardvér, prístup k senzorom a pre UPS nastavený server NUT." ] }, "flask": { "heading": "Štruktúra aplikácie Flask", - "intro": "flask_server.py vytvorí inštanciu Flask(__name__) s obmedzeným CORS, priamo registruje deväť blueprintov a inicializuje terminál. Tabuľka uvádza hlavné moduly; registrované sú aj audit, zálohy VM a PBS. Prednačítavanie PVE beží iba na hostiteľoch PVE.", + "intro": "flask_server.py vytvorí jednu inštanciu Flask(__name__) s obmedzenými pôvodmi CORS, priamo registruje desať blueprintov a inicializuje trasy terminálu. Tabuľka uvádza hlavné moduly; registrované sú aj blueprinty PBS, odkazov Monitora, auditu a záloh VM. Prednačítavanie špecifické pre PVE beží iba na hostiteľoch PVE.", "headerBlueprint": "Blueprint / modul", "headerPrefix": "Predpona ciest", "headerOwns": "Zodpovednosť", @@ -242,10 +242,10 @@ "Aktualizácie: čakajúce balíky a bezpečnostné opravy.", "Protokoly: trvalé vzory, špičky a kaskády v systémovom denníku.", "Pamäť: zásahy OOM killer a dlhodobý tlak na RAM.", - "Teplota: hodnoty CPU a diskov sa porovnávajú s monitorovacími prahmi; dostupné senzory závisia od hardvéru.", + "CPU: využitie a teplota CPU sa porovnávajú s nastaviteľnými prahmi; dostupné senzory závisia od hardvéru.", "Bezpečnosť: zlyhania prihlásenia, blokovania a stav jailu Fail2Ban." ], - "afterIntro": "Nálezy používajú stabilné error_key, kategóriu a závažnosť. Riadky v errors sa aktualizujú cez last_seen a počty bez duplicít. Odosielanie oznámení má aj vlastné odtlačky a časové odstupy.", + "afterIntro": "Nálezy používajú stabilné error_key, kategóriu a závažnosť. Existujúce záznamy v errors sa aktualizujú na mieste (last_seen, závažnosť, dôvod) namiesto duplikovania. Odosielanie oznámení má aj vlastné pravidlá odtlačkov a časových odstupov.", "cycleEnd": "Čistenie môže vyriešiť staré chyby podľa trvania potlačenia kategórie a stavových pravidiel, odstrániť osirelé záznamy zrušených prostriedkov a vymazať events staršie než 30 dní. Kategórie opisuje Panel → Health Monitor." }, "notifications": { @@ -264,9 +264,9 @@ "intro": "Karta Terminál prepája ľahkého klienta xterm.js s PTY servera cez WebSocket. Existujú dva režimy:", "items": [ "Režim HTTP, predvolený: vstavaný server Flask s flask-sock spracúva prechod na protokol WebSocket.", - "Režim HTTPS / WSS: používa gevent.pywsgi.WSGIServer s geventwebsocket.handler.WebSocketHandler na spojenia WebSocket cez TLS." + "Režim HTTPS / WSS: server TLS používa gevent.pywsgi.WSGIServer s jeho predvoleným handlerom; flask-sock spracúva spojenia WebSocket cez TLS." ], - "outro": "Procesy terminálu dedia User=root. Pri zapnutom overovaní WebSocket vyžaduje krátkodobý jednorazový lístok získaný z overeného koncového bodu so správcovským oprávnením. Pri vypnutom alebo odmietnutom overovaní spojenie používa tento neoverovaný režim.", + "outro": "Podriadené procesy terminálu dedia User=root zo služby. Otvorenie WebSocketu vyžaduje krátkodobý jednorazový lístok získaný z overeného koncového bodu lístkov terminálu so správcovským oprávnením.", "proxyNote": "Pri reverznom proxy povoľte WebSocket a hlavičky Upgrade a Connection. Terminál potrebuje toto preposielanie." }, "proxy": { diff --git a/web/messages/sk/docs/monitor/dashboard/network.json b/web/messages/sk/docs/monitor/dashboard/network.json index c131cc2f..9b0592a0 100644 --- a/web/messages/sk/docs/monitor/dashboard/network.json +++ b/web/messages/sk/docs/monitor/dashboard/network.json @@ -162,7 +162,7 @@ } ], "reportTitle": "Správa o latencii siete (PDF)", - "reportIntro": "Oba režimy majú pri výbere cieľa tlačidlo Správa. Vytvorí PDF meraní, ktoré môžete priložiť k žiadosti o podporu u poskytovateľa internetu.", + "reportIntro": "Oba režimy majú pri výbere cieľa tlačidlo Správa. Otvorí tlačiteľnú správu z meraní; uložte ju ako PDF cez dialóg tlače prehliadača a priložte ju k žiadosti o podporu u poskytovateľa internetu.", "reportPreviewAlt": "Prvá strana správy PDF o odozve: súhrn, ukazovateľ, štatistiky, graf a vysvetlenie prahov", "reportPreviewCaption": "Prvá strana obsahuje súhrn, ukazovateľ, hlavné štatistiky, časový priebeh odozvy a vysvetlenie prahov. Od strany 2 nasleduje tabuľka meraní a metodika.", "downloadLabel": "Stiahnuť príklad správy o odozve (PDF)", diff --git a/web/messages/sk/docs/monitor/dashboard/security.json b/web/messages/sk/docs/monitor/dashboard/security.json index 6fce8221..405314d5 100644 --- a/web/messages/sk/docs/monitor/dashboard/security.json +++ b/web/messages/sk/docs/monitor/dashboard/security.json @@ -136,7 +136,7 @@ "configCaption": "Úprava jailu sshd: znížte Max Retries, ak SSH používate iba z vlastnej podsiete, alebo predĺžte Ban Time pre prehľad dostupný z internetu.", "outro": "Návod Inštalácia, nastavenie a odinštalovanie opisuje aj ručnú inštaláciu, zmenu SSH MaxAuthTries a súvislosť so záznamom proxmenux-auth.log. Pozrite ProxMenux → Zabezpečenie → Fail2Ban.", "calloutTitle": "Bez Fail2Ban tento mechanizmus neblokuje IP adresy", - "calloutBody": "ProxMenux Monitor kontroluje IP adresy blokované Fail2Ban na aplikačnej úrovni pred spracovaním požiadaviek Flask. Volá fail2ban-client a výsledok ukladá do vyrovnávacej pamäte na 30 sekúnd; nečíta tabuľku blokovaní SQL. Bez Fail2Ban sa neúspešné prihlásenia zapisujú do proxmenux-auth.log, ale tento mechanizmus IP adresy neblokuje." + "calloutBody": "ProxMenux Monitor kontroluje IP adresy zablokované v jail proxmenux nástroja Fail2Ban na aplikačnej úrovni pred spracovaním požiadaviek Flask a výsledok uchováva vo vyrovnávacej pamäti 30 sekúnd. Bez Fail2Ban sa neúspešné prihlásenia zapisujú do proxmenux-auth.log a koncový bod prihlásenia je obmedzený na 5 pokusov z jednej IP za 5 minút, ale žiadna IP adresa sa nezablokuje." }, "lynis": { "heading": "Bezpečnostný audit Lynis", diff --git a/web/messages/sk/docs/monitor/dashboard/settings.json b/web/messages/sk/docs/monitor/dashboard/settings.json index c80d161a..a6241bca 100644 --- a/web/messages/sk/docs/monitor/dashboard/settings.json +++ b/web/messages/sk/docs/monitor/dashboard/settings.json @@ -76,7 +76,7 @@ }, "thresholds": { "heading": "Prahy Health Monitor", - "intro": "Predchádzajúca karta určuje trvanie stíšenia po potlačení; táto nastavuje hodnotu spustenia výstrahy. Väčšina kontrol má nastaviteľný varovný a kritický prah. Tabuľka vysvetľuje výnimky, napríklad kombinované pravidlo swapu a aktuálny detektor RAM.", + "intro": "Predchádzajúca karta určuje trvanie stíšenia po potlačení; táto nastavuje hodnotu spustenia výstrahy. Väčšina prahových kontrol má nastaviteľný varovný a kritický prah. Tabuľka nižšie vysvetľuje výnimky, napríklad kombinované pravidlo swapu.", "whatForTitle": "Na čo slúži", "whatForIntro": "Predvolené hodnoty sú východiskom, ale každé prostredie má vlastné podmienky:", "whatForItems": [ @@ -85,7 +85,7 @@ "Teplotné prahy vyberte podľa špecifikácií disku a skutočných podmienok. Pasívne alebo nútené chladenie samo neurčuje univerzálne nižší či vyšší bezpečný limit.", "Silne virtualizovaný hostiteľ môže pri zostavovaní dosiahnuť špičky CPU bez výstrahy pri každom 80 % výkyve, ale musí upozorniť na trvalé preťaženie." ], - "whatForOutro": "Podporované zmeny platia pri ďalšej kontrole. Health Monitor číta /usr/local/share/proxmenux/health_thresholds.json v každom cykle bez reštartu. Niektoré ukazovatele, napríklad teplota diskov, používajú tieto hodnoty; niektoré kapacitné pruhy majú vlastné hranice. Riadok RAM vysvetľuje aktuálnu výnimku.", + "whatForOutro": "Podporované zmeny prahov platia pri ďalšej kontrole. Health Monitor číta /usr/local/share/proxmenux/health_thresholds.json v každom cykle bez reštartu. Vybrané ukazovatele vrátane teploty diskov používajú tieto hodnoty; niektoré kapacitné pruhy si ponechávajú vlastné vizuálne hranice.", "coloursTitle": "Farby stavov Varovanie a Kritické", "coloursIntro": "Widgety s nastavenou dvojicou Varovanie/Kritické používajú tri stavy nižšie. Iné ukazovatele, napríklad kapacitné pruhy PVE, majú vlastné hranice; samotná farba nedokazuje výstrahu Health Monitor.", "headerColour": "Farba", @@ -125,7 +125,7 @@ "section": "Pamäť", "warning": "85 %", "critical": "95 %", - "gates": "Tlak na RAM hostiteľa. Nastavenie uvádza kritický prah 95 %, ale aktuálny detektor používa pevné pravidlo trvalých 90 %; zmena nastavenia teraz nemení túto vetvu." + "gates": "Tlak na RAM hostiteľa." }, { "section": "Swap (iba kritická hranica)", @@ -185,7 +185,7 @@ "section": "PVE úložisko", "warning": "85 %", "critical": "95 %", - "gates": "Úložiská spravované PVE: LVM, LVM-thin, ZFS-pool, RBD/Ceph a PBS. Nie všetky sú blokové úložiská." + "gates": "Iba úložiská PVE typu LVM, LVM-thin, ZFS-pool, RBD, CephFS a PBS. Úložiská typu adresár, NFS a CIFS pokrýva riadok miesta na disku hostiteľa." }, { "section": "ZFS pool", @@ -218,7 +218,7 @@ "toggleTitle": "Prepínač oznámení pri zapnutej detekcii", "toggleBody": "Prepínač lxc_updates_available pre každý kanál v Oznámenia → Služby sa zobrazuje iba pri zapnutej detekcii. Vypnutie skryje riadok vo všetkých kanáloch. Voľba zostáva v databáze a po zapnutí sa obnoví pôvodná hodnota.", "purgeTitle": "Čo sa odstráni pri vypnutí detekcie", - "purgeBody": "Vypnutie ihneď odstráni záznamy type=lxc z /usr/local/share/proxmenux/managed_installs.json. Po obnovení Hardvér prestane zobrazovať počty aktualizácií LXC. Po zapnutí register naplní ďalší cyklus, prípadne skoršie ručné obnovenie cez API." + "purgeBody": "Vypnutie ihneď odstráni všetky záznamy type=lxc z /usr/local/share/proxmenux/managed_installs.json. Počty aktualizácií LXC na karte VM a LXC zmiznú pri ďalšom obnovení dashboardu. Po zapnutí register naplní ďalší cyklus detekcie, prípadne skoršie ručné obnovenie cez API." }, "storageExclusions": { "heading": "Vylúčené vzdialené úložiská", diff --git a/web/messages/sk/docs/monitor/dashboard/storage.json b/web/messages/sk/docs/monitor/dashboard/storage.json index 6fe25751..60e5e65d 100644 --- a/web/messages/sk/docs/monitor/dashboard/storage.json +++ b/web/messages/sk/docs/monitor/dashboard/storage.json @@ -70,7 +70,7 @@ "items": [ "Trasa zariadenia — /dev/sda, /dev/nvme0n1.", "Štítok typu — SATA / NVMe a príslušná ikona.", - "Systémový štítok — oranžové označenie diskov rozpoznaných ako disky operačného systému. Detekcia používa pripojenia / a /boot a pridelí štítok System. Chýbajúci štítok nedokazuje, že disk možno bezpečne vymazať alebo použiť inak.", + "Systémový štítok — oranžové označenie diskov, ktoré používa hostiteľ: systémové body pripojenia (/, /boot, /usr, /var…), aktívny swap, členovia poolov ZFS, fyzické zväzky LVM, aktívni členovia RAID alebo menovky systémových oddielov. Chýbajúci štítok nedokazuje, že disk možno bezpečne vymazať alebo použiť inak.", "Model — výrobca a model z smartctl -i.", "Kapacita — zobrazená v zrozumiteľných jednotkách.", "Teplota — aktuálna hodnota v °C s farbou podľa typu disku; NVMe používa vyššie prahy než SATA.", @@ -112,7 +112,7 @@ "pdfPreviewAlt": "Prvá strana správy SMART so súhrnom, ukazovateľom PASSED a informáciami o disku", "pdfPreviewCaption": "Prvá strana: súhrn, ukazovateľ PASSED a úplné informácie o disku. Príklad PDF obsahuje opotrebovanie SSD, všetky atribúty SMART a históriu testov.", "pdfDownloadLabel": "Stiahnuť príklad správy SMART (PDF)", - "pdfSectionsIntro": "Správa má šesť hlavných častí:", + "pdfSectionsIntro": "Správa obsahuje tieto hlavné časti:", "pdfSections": [ "Súhrn — stav PASSED/FAILED, zrozumiteľné hodnotenie disku — v poriadku, opotrebovaný alebo zlyhávajúci — a štyri údaje: čas správy, posledný typ testu, výsledok a overené atribúty.", "Informácie o disku — model, sériové číslo, kapacita, typ HDD/SSD/NVMe, rodina, formát, rozhranie (SATA 3.3 · 6.0 Gb/s, …), TRIM, teplota a optimálny prah, hodiny prevádzky, zapnutia, SMART, čakajúce/prerozdelené sektory a chyby CRC.", @@ -127,7 +127,7 @@ "historyImageCaption": "História testov SMART disku. Každý riadok ukazuje typ, čas, vek, označenie posledného testu a možnosti stiahnutia výstupu smartctl a odstránenia.", "historyIntro": "Dokončené a uchované krátke aj rozšírené testy disku. Každý záznam obsahuje pôvodný výstup smartctl a polia spracované Monitorom pre prehľad. Akcie v riadku:", "historyItems": [ - "Stiahnuť — uloží snímku JSON s údajmi smartctl -a použitými v správe. Užitočné, ak podpora potrebuje pôvodné diagnostické polia.", + "Stiahnuť — uloží snímku JSON daného testu (výstup smartctl -a --json, alebo nvme smart-log pri NVMe, keď smartctl zlyhá). Užitočné, ak podpora výrobcu potrebuje pôvodné diagnostické polia.", "Odstrániť — ručne vymaže test z histórie. Uchovávanie v Plánovaní (posledných 5 / 10 / 20) automaticky maže najstaršie." ], "scheduleTitle": "Karta 4 — Plánovanie", diff --git a/web/messages/sk/docs/monitor/dashboard/vms-lxcs.json b/web/messages/sk/docs/monitor/dashboard/vms-lxcs.json index 3b161ab5..c8fbb299 100644 --- a/web/messages/sk/docs/monitor/dashboard/vms-lxcs.json +++ b/web/messages/sk/docs/monitor/dashboard/vms-lxcs.json @@ -1,16 +1,16 @@ { "meta": { "title": "ProxMenux Monitor — Panel: VM a LXC | Dokumentácia ProxMenux", - "description": "Inventár hosťovských systémov so živými údajmi CPU, pamäte a disku. Podrobnosti obsahujú konfiguráciu, zdroje, zálohy, nedávne výsledky záznamu Proxmox, poznámky a Spustiť / Vypnúť / Reštartovať / Vynútiť vypnutie." + "description": "Karta VM a LXC eviduje všetky hosťovské systémy na hostiteľovi so živým využitím CPU, pamäte a disku. Podrobnosti každého systému zobrazujú konfiguráciu, zdroje, zálohy, záznam konzoly kontajnerov OCI, poznámky a ovládanie Spustiť / Vypnúť / Reštartovať / Vynútiť vypnutie." }, "header": { "title": "Panel: VM a LXC", - "description": "Úplný inventár hosťovských systémov uzla: štyri metriky hore, triediteľný zoznam VM a LXC a podrobnosti s konfiguráciou, zdrojmi, zálohami, záznamami a ovládaním Spustiť / Vypnúť / Reštartovať / Vynútiť vypnutie.", + "description": "Úplný inventár hosťovských systémov uzla: štyri metriky hore, triediteľný zoznam všetkých VM a LXC pod nimi a podrobnosti s konfiguráciou, zdrojmi, zálohami, záznamom konzoly kontajnerov OCI a štyrmi ovládacími prvkami životného cyklu (Spustiť / Vypnúť / Reštartovať / Vynútiť vypnutie).", "section": "ProxMenux Monitor · Prehľad" }, "intro": { "title": "Ovládanie hosťovských systémov", - "body": "Táto karta ovláda životný cyklus hosťovských systémov. Akcie idú cez POST /api/vms/<vmid>/control s výslovným potvrdením a aktualizujú riadok systému. Nútené vypnutie vyžaduje samostatné tlačidlo Vynútiť vypnutie." + "body": "Táto karta ovláda životný cyklus hosťovských systémov. Akcie životného cyklu idú cez POST /api/vms/<vmid>/control; Reštartovať a Vynútiť vypnutie vás požiadajú o zadanie VMID na potvrdenie a odpoveď sa prejaví v riadku systému. Nútené vypnutie vyžaduje samostatné tlačidlo Vynútiť vypnutie." }, "topRow": { "heading": "Horný riadok: štyri štatistické karty", @@ -186,9 +186,9 @@ "source": "Dáta RRD PVE (pvesh get /nodes/<node>/qemu/<id>/rrddata) upravené do formátu pre graf." }, { - "section": "Nedávne výsledky záznamu Proxmox", - "endpoint": "/api/vms//logs", - "source": "pvesh get /nodes/<node>/<qemu|lxc>/<vmid>/log --start 0 --limit 1000. Pri zlyhaní príkazu vráti prázdny zoznam; nejde o úplné systémové záznamy vnútri hosťovského systému." + "section": "Záznam konzoly OCI (karta Logy)", + "endpoint": "/api/lxc//console-log", + "source": "Výstup konzoly hlavného procesu obrazu, čítaný z /var/log/proxmenux/oci/<vmid>.console.log na hostiteľovi. Zobrazuje sa iba pre kontajnery OCI." }, { "section": "Zálohy k dispozícii pre hostí", diff --git a/web/messages/sk/docs/monitor/health-monitor.json b/web/messages/sk/docs/monitor/health-monitor.json index 645ab240..83b459a1 100644 --- a/web/messages/sk/docs/monitor/health-monitor.json +++ b/web/messages/sk/docs/monitor/health-monitor.json @@ -68,7 +68,7 @@ { "category": "Úložisko", "checks": "Proxmox úložiská, koreňový súborový systém", - "events": "Prekročenie nastavených prahov využitia koreňového alebo iného sledovaného súborového systému (predvolene 85% upozornenie / 95% kritický stav); nedostupný export NFS; zlyhanie overenia CIFS; plný pool LVM-thin." + "events": "Prekročenie nastavených prahov využitia koreňového alebo iného sledovaného súborového systému (predvolene 85% upozornenie / 95% kritický stav); nedostupné úložiská PVE; zaseknuté pripojenia NFS/CIFS alebo pripojenia nečakane len na čítanie; úložiská LVM-thin a iné poolové úložiská prekračujúce rovnaké prahy." }, { "category": "Disky & SMART", @@ -98,7 +98,7 @@ { "category": "Aktualizácie systému", "checks": "Nevybavené aktualizácie, aktualizácie zabezpečenia, verzia jadra / PVE, systémový vek", - "events": "Čakajúce bezpečnostné aktualizácie alebo aktualizácie používaného jadra; dlho neaktualizovaný systém. Ak sú dostupné aktualizácie, hlavička prehľadu zobrazí Aktualizovať teraz. Tlačidlo spustí celý postup ProxMenux; po zatvorení obnoví stav cez ?refresh=1 bez čakania na ďalší cyklus." + "events": "Čakajúce bezpečnostné aktualizácie alebo aktualizácie používaného jadra; dlho neaktualizovaný systém. Kategória Aktualizácie v okne Stav systému zobrazí tlačidlo Aktualizovať teraz, keď čakajú aktualizácie. Spustí celý postup aktualizácie ProxMenux priamo v okne; po zatvorení obnoví stav cez ?refresh=1, aby indikátor ukázal nový stav bez čakania na ďalší cyklus." }, { "category": "Bezpečnosť a certifikáty", @@ -158,7 +158,7 @@ }, "dismiss": { "heading": "Potlačenie upozornení a jeho trvanie", - "intro": "Niektoré udalosti pretrvávajú, napríklad Aktualizácie systému: dostupné aktualizácie, kým hostiteľa neaktualizujete. Oznámenie každých päť minút nie je potrebné. Tlačidlo Aktualizovať teraz v prehľade tento prípad rieši priamo. Pre ostatné prípady alebo odložené aktualizácie sú dostupné dva prepojené spôsoby potlačenia:", + "intro": "Niektoré udalosti z povahy veci pretrvávajú, napríklad Aktualizácie systému: dostupné aktualizácie, kým hostiteľa neaktualizujete, a oznámenie každých päť minút počas celého týždňa nie je žiaduce. Tlačidlo Aktualizovať teraz v kategórii Aktualizácie okna Stav systému tento prípad rieši priamo. Pre ostatné prípady alebo odložené aktualizácie ponúka Monitor stavu aj dva prepojené spôsoby potlačenia:", "step1": "Potlačiť jednotlivú udalosť v okne. Ponuka obsahuje 24 hodín, 7 dní alebo Natrvalo bez ohľadu na predvolenú dobu kategórie. Voľba odošle POST /api/health/acknowledge s error_key a zvolenými suppression_hours (-1 pre trvalé potlačenie). Udalosť sa presunie medzi potlačené s časom acknowledged_at.", "dropdownImageAlt": "Ponuka potlačenia upozornenia: 24 hodín, 7 dní alebo natrvalo", "dropdownImageCaption": "Zvolená doba platí iba pre toto upozornenie; bez individuálnej voľby sa použije hodnota kategórie. Trvalo potlačené upozornenia majú jantárový odznak Natrvalo a bežne sa neobnovujú. Výnimkou je kritická teplota CPU opísaná nižšie.", @@ -187,7 +187,7 @@ }, { "finding": "ZFS pool DEGRADED / FAULTED", - "why": "Kontroly kapacity poolu ZFS výslovne umožňujú potlačenie. Ostatné zistenia používajú vlastný príznak. Potvrdenie neopraví degradovaný ani chybný pool." + "why": "Zistenia o stave poolu ZFS (DEGRADED, FAULTED, UNAVAIL) výslovne umožňujú potlačenie, rovnako ako kontroly kapacity poolu. Potvrdenie neopraví degradovaný ani chybný pool." }, { "finding": "Chyba disku I/O s SMART FAILED", @@ -289,7 +289,7 @@ }, "rest": { "heading": "Koncové body REST", - "intro": "Činnosti okna sú dostupné cez API pre skripty, panely či botov. Pri zapnutom overovaní Monitora treba platný Bearer token z prihlásenia alebo obrazovky API tokenov. Zmeny, ako potvrdenie upozornení, uloženie či čistenie osirelých chýb, vyžadujú full_admin; read_only dostane 403. Pri vypnutom alebo odmietnutom overovaní tieto kontroly umožnia prístup bez tokenu.", + "intro": "Činnosti okna sú dostupné aj cez API pre skripty, vlastné panely či botov. Volania vyžadujú platný Bearer token z prihlásenia alebo obrazovky API tokenov. Zmeny, ako potvrdenie upozornení, uloženie nastavení potlačenia či čistenie osirelých chýb, vyžadujú rozsah full_admin; read_only dostane 403.", "headerEndpoint": "Koncový bod", "headerMethod": "Metóda", "headerUse": "Použitie", @@ -297,7 +297,7 @@ { "endpoint": "/api/health", "method": "GET", - "use": "Ľahká kontrola vracajúca JSON s status, timestamp a version. Vhodná pre kontroly kľúčových slov Uptime Kuma; pri zapnutom overovaní Monitora musí klient poslať hlavičku Bearer." + "use": "Ľahká kontrola vracajúca JSON s status, timestamp a version. Vhodná pre kontroly kľúčových slov Uptime Kuma; klient musí poslať hlavičku Bearer." }, { "endpoint": "/api/health/status", diff --git a/web/messages/sk/docs/monitor/index.json b/web/messages/sk/docs/monitor/index.json index 49f438ea..d948916c 100644 --- a/web/messages/sk/docs/monitor/index.json +++ b/web/messages/sk/docs/monitor/index.json @@ -52,7 +52,7 @@ }, { "name": "Terminál", - "description": "Shell hostiteľa a podporované konzoly VM/CT v prehliadači cez xterm.js a WebSockets. Používa nastavený režim overovania: pri vypnutí alebo odmietnutí môžu klienti s prístupom zo siete otvoriť reláciu bez prihlásenia. Neznamená to audit každého príkazu." + "description": "Shell hostiteľa a podporované konzoly VM/CT v prehliadači cez xterm.js a WebSockets. Relácie sa neauditujú po jednotlivých príkazoch." }, { "name": "Zabezpečenie", @@ -114,7 +114,7 @@ "heading": "REST API a integrácie", "intro": "Endpointy REST poskytujú monitorovacie dáta JSON cez HTTP/HTTPS pre Homepage, Home Assistant, Uptime Kuma a skripty. Grafana môže použiť samostatný textový exportér Prometheus na /api/prometheus. Požiadavky možno posielať cez curl.", "tokens": "Tokeny API s dlhou životnosťou (365 dni) sa generujú z Nastavenia → API prístupových tokenov alebo prostredníctvom POST /api/auth/generate-api-token.", - "bearer": "Tokeny posielajte ako Authorization: Bearer …. Verejný /api/health je vhodný na kontroly dostupnosti bez poverení. Pod /api/auth/* sú verejné trasy nastavenia/prihlásenia/stavu aj chránená správa účtov/tokenov; nie všetky sú anonymné.", + "bearer": "Tokeny posielajte ako Authorization: Bearer …. Aj /api/health očakáva hlavičku Bearer, takže kontroly dostupnosti potrebujú token read_only. Pod /api/auth/* sú verejné trasy nastavenia/prihlásenia/stavu aj chránené trasy správy účtov/tokenov; nie všetky sú anonymné.", "catalog": "Katalóg endpointov, rotácia tokenov a zabezpečenie sú v Referenčnej príručke API; príklady pre Homepage, Home Assistant, Grafana, Uptime Kuma a cURL sú v Integrácie." }, "serviceControl": { diff --git a/web/messages/sk/docs/monitor/integrations.json b/web/messages/sk/docs/monitor/integrations.json index 320c12ea..38748402 100644 --- a/web/messages/sk/docs/monitor/integrations.json +++ b/web/messages/sk/docs/monitor/integrations.json @@ -220,7 +220,7 @@ "heading": "n8n, Zapier a vlastné skripty", "intro": "Workflow nástroje a skripty môžu odosielať oznámenia cez POST na /api/notifications/send, napríklad pri zlyhaní CI alebo dlhej úlohe cron. Priame odoslanie obíde front aj časový odstup podľa odtlačku udalosti. Zachová formátovanie kanálov, voliteľnú AI a doručenie. Duplicity musí riešiť volajúci.", "n8nBody": "V n8n použite uzol HTTP Request s POST, uvedenou URL a rovnakým JSON ako curl. Zvoľte všeobecné údaje Header Auth: názov Authorization a hodnotu Bearer YOUR_API_TOKEN, pričom nahraďte zástupný text. Požiadavku spustí plán, webhook alebo predchádzajúci uzol.", - "severityBody": "Závažnosť používa INFO, WARNING alebo CRITICAL veľkými písmenami. Objekt data poskytuje kontext. AI používa vytvorený nadpis, správu a podporované doplnenia; nie je zaručené, že ľubovoľné polia zahrnie do promptu či výstupu. Pozri Oznámenia → Katalóg udalostí." + "severityBody": "Závažnosť používa INFO, WARNING alebo CRITICAL veľkými písmenami. Objekt data poskytuje kontext udalosti a polia šablóny. Na tomto koncovom bode dostane prepis AI iba nadpis a správu; polia v data sa poskytovateľovi neposielajú. Význam udalostí pozri v Oznámenia → Katalóg udalostí." }, "pveWebhook": { "heading": "Natívny webhook Proxmox VE (prichádzajúci)", diff --git a/web/messages/sk/docs/monitor/notifications.json b/web/messages/sk/docs/monitor/notifications.json index 215eda7b..67654a7f 100644 --- a/web/messages/sk/docs/monitor/notifications.json +++ b/web/messages/sk/docs/monitor/notifications.json @@ -171,7 +171,7 @@ "Otvorte account.microsoft.com/security a povoľte dvojstupňové overovanie.", "Ak účet ponúka Rozšírené možnosti zabezpečenia → Heslá aplikácií, vyberte Vytvoriť heslo aplikácie. Samotná voľba nezaručuje podporu SMTP s heslom.", "Ak Microsoft vytvorí heslo, skopírujte ho a overte jeho prijatie službou SMTP.", - "Len ak poskytovateľ dovoľuje SMTP s heslom, použite schválené hodnoty: Server smtp.office365.com pre Exchange Online, Port 587, Režim TLS STARTTLS, Meno adresu schránky a Heslo povolený údaj. Osobné Outlook.com má iné nastavenia a požiadavky." + "Len ak poskytovateľ dovoľuje SMTP s heslom, vyplňte jeho schválené hodnoty: Server smtp.office365.com pre Exchange Online, Port 587, Režim TLS STARTTLS, Používateľské meno adresu vašej schránky a Heslo povolený prihlasovací údaj SMTP. Osobné Outlook.com má iné nastavenia a požiadavky na overenie; nepredpokladajte, že tieto údaje budú fungovať." ], "relayTitle": "SMTP relay na vlastnom serveri", "relayBody": "Nasmerujte Monitor na vlastný SMTP relay, napríklad Postfix. Ten rieši overenie voči poskytovateľovi. Overenie a TLS Monitora nastavte podľa relaya; miestny relay automaticky nevypína šifrovanie." @@ -266,7 +266,7 @@ "howItems": [ "Zapnutie pre každý kanál. Predvolene vypnuté. Zapnite iba tam, kde chcete súhrn; ostatné kanály nechajte priame.", "Čas doručenia v miestnom čase, predvolene 09:00. Odosielač ho spustí približne do 60 s od danej minúty.", - "Obsah súhrnu: vhodné všeobecné udalosti INFO, napríklad dostupná aktualizácia aplikácie, dostupná aktualizácia Tailscale, dostupná aktualizácia optimalizácie ProxMenux, čakajúce bezpečnostné aktualizácie APT a oznámenie o limite odosielania. Výsledky záloh a vyňaté akcie zostanú priame.", + "Obsah súhrnu: vhodné všeobecné udalosti so závažnosťou INFO. Napríklad dostupná aktualizácia aplikácie, dostupná aktualizácia Tailscale, dostupná aktualizácia optimalizácie ProxMenux a čakajúce bezpečnostné aktualizácie APT. Výsledky záloh a ďalšie vyňaté udalosti akcií zostanú priame.", "Čo sa nikdy neodkladá:", "Trvalé uloženie. Udalosti čakajú v tabuľke SQLite digest_pending do nastaveného času a prežijú reštart.", "Bez udalostí nie je súhrn. Ak nečakajú INFO, prázdna správa sa neposiela." @@ -301,7 +301,7 @@ { "stage": "Interval opakovania", "what": "Po úspešnom odoslaní sa opakované odtlačky potlačia; stav je v notification_last_sent. Základ pre CRITICAL, WARNING, INFO, resources a updates je 86400 s. Výnimky: 5 s pre akcie VM/CT a vypnutie/reštart, 10 s pre výsledky záloh/replikácie, 1800–3600 s pre viaceré zdravotné stavy. Výslovné nastavenia udalosti/skupiny majú prednosť.", - "tunable": "Áno — konfiguračné hodnoty pre udalosť či skupinu prepisujú predvolené intervaly." + "tunable": "Len cez API nastavení — kľúč cooldown.<event_type> alebo cooldown.<group> prepíše predvolené hodnoty; v rozhraní na to nie je žiadny ovládací prvok." }, { "stage": "Zoskupovanie nárazových udalostí", @@ -330,7 +330,7 @@ "Metóda a URL. POST http://127.0.0.1:8008/api/notifications/webhook bez HTTPS Monitora; s HTTPS samostatný miestny HTTP port 8009. Obe zostávajú na hostiteľovi.", "Šablóna správy. JSON s funkciami Handlebars PVE, uložený v konfigurácii ako base64. Po dekódovaní:", "Pravidlo priradenia. Blok matcher: proxmenux-matcher s mode all posiela všetky oznámenia PVE do cieľa.", - "Súkromná konfigurácia. Nastavenie zapíše webhook: proxmenux-webhook do /etc/pve/priv/notifications.cfg so zdieľaným tajomstvom v base64. Verejný cieľ ho použije pre X-Webhook-Secret. Blok nie je prázdny." + "Súkromná konfigurácia. Nastavenie zapíše zodpovedajúci blok webhook: proxmenux-webhook do /etc/pve/priv/notifications.cfg s položkou secret s názvom X-Webhook-Secret, zakódovanou v base64. Verejný blok cieľa obsahuje iba šablónu tela, metódu a URL. Súkromný blok nie je prázdny zástupný záznam." ], "securityTitle": "Ako je prijímač zabezpečený", "securityIntro": "Prijímač webhook na POST /api/notifications/webhook používa rôzne bezpečnostné vrstvy v závislosti od toho, odkiaľ pochádza žiadosť:", diff --git a/web/messages/sv/docs/monitor/access-auth.json b/web/messages/sv/docs/monitor/access-auth.json index 4880b377..f02a46b3 100644 --- a/web/messages/sv/docs/monitor/access-auth.json +++ b/web/messages/sv/docs/monitor/access-auth.json @@ -19,7 +19,7 @@ "reaching": { "heading": "Öppna instrumentpanelen", "intro": "ProxMenux Monitor binder till 0.0.0.0:8008. Det finns tre vanliga sätt att nå den:", - "outro": "Direktåtkomst motsvarar standardenheten för systemd. Omvänd proxy och Secure Gateway beskrivs nedan. Klient-IP från X-Forwarded-For kräver PROXMENUX_TRUST_PROXY=1 och en proxy du kontrollerar. Enbart X-Forwarded-Proto eller X-Forwarded-Host aktiverar inte detta förtroende; frontend bygger API-URL:er från webbläsarens ursprung." + "outro": "Direktåtkomst motsvarar standardenheten för systemd. Omvänd proxy och Secure Gateway beskrivs nedan. Förtroende för klient-IP i X-Forwarded-For kräver PROXMENUX_TRUST_PROXY=1 och en proxy du kontrollerar. Enbart förekomsten av X-Forwarded-Proto eller X-Forwarded-Host aktiverar inte proxyförtroende. På portarna 80/443 använder frontend relativa /api/*-URL:er; på alla andra portar anropas port 8008 på samma värdnamn." }, "firstLaunch": { "heading": "Första starten", @@ -117,8 +117,8 @@ "loginImageCaption": "När autentiseringen är konfigurerad börjar varje besök på instrumentbrädan här. Med 2FA aktiverad ber skärmen om 6-siffrig kod i ett andra steg efter att lösenordet accepteras.", "loginFlowTitle": "Inloggningsflöde", "twofaIntro": "Med 2FA returnerar första anropet requires_totp: true. Upprepa det med den sexsiffriga koden:", - "publicTitle": "Offentlig åtkomst och skyddade kontroller", - "publicIntro": "Inloggning och autentiseringsstatus är offentliga. Kontot kan skapas så länge användarnamn och lösenord inte sparats, även efter att skydd avböjts. Systemdata kräver autentisering när skyddet är aktivt:", + "publicTitle": "Offentliga slutpunkter (utan token)", + "publicIntro": "Inloggning, autentiseringsstatus, första konfigurationen och den lätta slutpunkten /api/system-info är offentliga:", "publicItems": [ "/api/auth/login och /api/auth/status är offentliga. /api/auth/setup skapar första kontot och vägrar skriva över befintliga inloggningsuppgifter.", "/api/system-info är en offentlig ändpunkt med grundläggande systeminformation, inklusive health.status. Den kräver ingen token. Även /api/auth/status är offentlig och passar för en tillgänglighetskontroll." @@ -146,7 +146,7 @@ }, { "asset": "TOTP-hemlighet för 2FA", - "algorithm": "Standard-TOTP (RFC 6238) med base32-kodad hemlighet. De åtta engångskoderna för återställning lagras som SHA-256-hashar.", + "algorithm": "Standard-TOTP (RFC 6238) med base32-kodad hemlighet. De åtta reservkoderna är engångskoder och lagras som SHA-256-hashar.", "where": "auth.json → totp_secret + backup_codes[]" }, { @@ -243,17 +243,17 @@ } ], "backupTitle": "Varför säkerhetskopior behövs", - "backupBody": "Om enheten försvinner, använd en sparad återställningskod eller återställ en säkerhetskopia som du ordnat i förväg. Molnsynkronisering och exporter skiljer sig mellan appar; kontrollera att TOTP-hemligheterna kan återställas. Root-åtkomst på värden möjliggör också återställning enligt nedan. Spara en separat, säker kopia.", + "backupBody": "Om autentiseringsenheten försvinner, använd en sparad reservkod eller återställ appen från en säkerhetskopia som du ordnat i förväg. Molnsynkronisering och lokala exporter skiljer sig mellan appar; kontrollera att den valda metoden verkligen återställer TOTP-hemligheterna. Root-åtkomst på värden möjliggör också återställning enligt nedan. Spara en separat, säker kopia.", "setupTitle": "Ställ in steg för steg från panelen", "setupImageAlt": "2FA-inställning med QR-kod och återställningskoder", - "setupImageCaption": "2FA-dialogen visar QR-kod, Base32-hemlighet för manuell inmatning och åtta engångskoder för återställning. Kopiera dem innan dialogen stängs; de visas inte igen.", + "setupImageCaption": "Installationsdialogen för 2FA visar en QR-kod, en Base32-hemlighet för manuell inmatning och, efter verifieringen, åtta reservkoder för engångsbruk. Kopiera koderna innan dialogen stängs; de visas inte igen.", "setupSteps": [ "Installera autentiseringsappen på din telefon (eller öppna din lösenordshanterare). En av apparna från tabellen ovan. Du behöver bara göra det en gång - samma app kommer att hålla koder för varje tjänst du skyddar.", "Logga in på panelen med användarnamn och lösenord.", - "Öppna fliken Säkerhet och välj Aktivera 2FA. Dialogen visar QR-kod, Base32-hemlighet och åtta återställningskoder.", + "Öppna fliken Säkerhet i instrumentpanelens sidofält och klicka sedan på Aktivera 2FA och Starta installationen. Dialogen visar en QR-kod och den manuella nyckeln; de åtta reservkoderna visas när koden har verifierats.", "Lägg till posten i autentiseringsappen:", - "Spara återställningskoderna. Förvara alla åtta i en lösenordshanterare, krypterad anteckning eller säker papperskopia. Varje kod fungerar en gång när appen är otillgänglig.", - "Bekräfta med den aktuella sexsiffriga koden från appen i fältet \"Verifieringskod\" och skicka. Koden ändras var 30:e sekund; använd nästa om den hinner löpa ut.", + "Bekräfta med den aktuella sexsiffriga koden från appen i fältet \"Verifieringskod\" i installationsdialogen och skicka. Koden ändras var 30:e sekund; använd nästa om den hinner löpa ut medan du skriver.", + "Spara reservkoderna. Förvara efter verifieringen alla åtta säkert i en lösenordshanterare, krypterad anteckning eller säker papperskopia. Varje kod fungerar en gång om autentiseringsappen är otillgänglig.", "Klart. 2FA är aktivt. Nästa inloggning frågar först efter lösenord och sedan den aktuella sexsiffriga koden." ], "setupStep4Sub": [ @@ -261,17 +261,17 @@ "Manuellt alternativ när skanning inte är möjlig, exempelvis på samma telefon: Lägg till konto → Ange inställningsnyckel. Välj ett namn som Proxmox Monitor, klistra in Base32-hemligheten, lämna Typ som Tidsbaserad och spara." ], "testTitle": "Test innan du loggar ut", - "testBody": "Behåll den nuvarande sessionen och testa en ny inloggning i ett privat fönster omedelbart efter inställningen. Kontrollera serverns och telefonens klockor om koden nekas, innan du stänger den fungerande sessionen. Om åtkomsten redan är förlorad, använd återställningskod eller redigera auth.json från värdens skal.", + "testBody": "Behåll den nuvarande sessionen och testa en ny inloggning i ett privat fönster omedelbart efter inställningen. Kontrollera serverns och telefonens klockor om koden nekas, innan du loggar ut från den fungerande sessionen. Om åtkomsten redan är förlorad, använd en reservkod eller redigera auth.json från värdens skal.", "lostTitle": "Förlorad autentiseringsapp", "lostIntro": "Tre återställningsmetoder, från minst till mest ingripande:", "lostItems": [ - "Använd en återställningskod. Ange en av de åtta sparade koderna i TOTP-fältet. Den fungerar en gång; oanvända koder förblir giltiga. Ställ sedan in 2FA på nytt i inställningarna för åtta nya koder.", + "Använd en reservkod. Ange en av de åtta sparade koderna i TOTP-fältet. Den fungerar en gång; oanvända koder förblir giltiga. Öppna Säkerhet efter inloggningen, välj Inaktivera 2FA och sedan Aktivera 2FA för att få åtta nya koder.", "Återställ appen från moln eller säkerhetskopia. Med inställd molnsynkronisering kan appen installeras och kontot öppnas på en ny enhet: Google, Microsoft, Authy, Apple Passwords via iCloud-nyckelring, Ente eller 2FAS. Med en exportfil från Aegis, Raivo eller FreeOTP+, installera appen och importera filen.", "Stäng av 2FA från värdens skal. Om övriga metoder saknas, redigera /root/.config/proxmenux-monitor/auth.json som root via SSH eller konsol. Sätt totp_enabled till false, spara och starta om tjänsten:" ], "lostShellOutro": "Du kan logga in med användarnamn + lösenord bara, sedan aktivera 2FA från Inställningar.", "disableTitle": "Inaktivera 2FA", - "disableBody": "Öppna Säkerhet och välj Inaktivera 2FA. POST /api/auth/totp/disable kräver aktuellt lösenord och giltig TOTP- eller återställningskod. Hemligheten och återställningskoderna tas bort. Ta även bort den gamla posten i appen.", + "disableBody": "Öppna Säkerhet och välj Inaktivera 2FA. POST /api/auth/totp/disable kräver aktuellt lösenord och en giltig TOTP- eller reservkod. TOTP-hemligheten och reservkoderna tas bort. Ta även bort den gamla posten i autentiseringsappen.", "rejectedTitle": "Den sexsiffriga koden nekas alltid", "rejectedIntro": "TOTP är tidsbaserat. Serverns och telefonens klockor bör skilja mindre än cirka 30 s. Två kontroller:", "rejectedItems": [ diff --git a/web/messages/sv/docs/monitor/ai-assistant.json b/web/messages/sv/docs/monitor/ai-assistant.json index 8346ec59..635abe9f 100644 --- a/web/messages/sv/docs/monitor/ai-assistant.json +++ b/web/messages/sv/docs/monitor/ai-assistant.json @@ -14,7 +14,7 @@ }, "intro": { "title": "Avstängt som standard, aktiveras med ett reglage", - "body": "AI-omskrivning är avstängd som standard. Aktivera den under Inställningar → Aviseringar → Avancerat: AI-förbättring. Om kontextberikning eller omskrivning misslyckas skickas originalmallen. Varje omskrivning har högst 25 sekunders väntetid; därefter används mallen i stället för obegränsad väntan." + "body": "AI-omskrivning är avstängd som standard. Aktivera den under Inställningar → Aviseringar → Avancerat: AI-förbättring. Om kontextberikning eller omskrivning misslyckas skickar sändaren originalmallen. Omskrivningar i händelsernas sändningskö har en tidsgräns på 25 sekunder; när den nås skickas mallen i stället för att vänta." }, "howItWorks": { "heading": "Hur det fungerar", @@ -109,7 +109,7 @@ ], "customNote": "Läget med egen prompt har en fast gräns på 500 utdatatoken oavsett detaljnivå. Du styr prompten och gränsen motverkar alltför långa svar.", "sizingTitle": "Praktisk storlek", - "sizingBody": "Uppskatta förbrukningen som omskrivna händelser × AI-kanaler × in- och utdatatoken per anrop. Exempel: 50 händelser × en kanal × (500 indata + 300 utdata) = 40 000 token per dag. Förbrukning och kostnad beror på modell, kontext, cache och leverantörsgränser. Detaljnivå per kanal visar brief för chatt i stället för standard, med fortsatt detaljerad e-post." + "sizingBody": "Uppskatta förbrukningen som omskrivna händelser × AI-aktiverade kanaler × in- och utdatatoken per anrop. Exempel: 50 händelser × en kanal × (2 000 indata + 300 utdata) blir cirka 115 000 token per dag, eftersom standardsystemprompten ensam är ungefär 1 500 token. Faktisk förbrukning och kostnad beror på modell, kontext, cache och leverantörsgränser. Avsnittet Detaljnivå per kanal visar hur du använder brief för chatt i stället för standard, med fortsatt detaljerade e-postrapporter." }, "providers": { "heading": "AI-leverantörer", @@ -142,7 +142,7 @@ "items": [ "API-nyckel: console.anthropic.com/settings/keys", "Exempel från den medföljande modellistan: claude-haiku-4-5-20251001, claude-sonnet-4-6, claude-opus-4-6.", - "Medföljande rekommendation: claude-haiku-4-5-20251001. Denna exakta version är rekommenderad; de äldre Claude 3.5-posterna finns inte längre i listan." + "Medföljande rekommendation: claude-haiku-4-5-20251001, en fast ögonblicksbild i stället för ett rörligt alias." ] }, "gemini": { diff --git a/web/messages/sv/docs/monitor/api-reference.json b/web/messages/sv/docs/monitor/api-reference.json index 0fd9db90..d4d2817c 100644 --- a/web/messages/sv/docs/monitor/api-reference.json +++ b/web/messages/sv/docs/monitor/api-reference.json @@ -162,7 +162,7 @@ { "endpoint": "/api/vms//backup", "method": "POST", - "use": "Skapar en vzdump-säkerhetskopia av VM eller LXC. Valfria fält att anpassa till lagringen: storage (PVE-mål), mode (snapshot, suspend eller stop), compress (zstd, lzo, gzip eller none), protected (true eller false), notes, notification (auto, always, failure eller never) och pbs_change_detection (default, legacy eller data). Returnerar PVE-uppgiftens UPID." + "use": "Skapar en vzdump-säkerhetskopia av en VM eller LXC. Fält i begäran, alla valfria om inte standardvärdena passar lagringsupplägget: storage (en PVE-lagring), mode (snapshot, suspend eller stop), compress (zstd, lzo, gzip eller none), protected (true eller false), notes och pbs_change_detection (default, legacy eller data). Returnerar PVE-uppgiftens UPID." }, { "endpoint": "/api/vms//backups", @@ -286,7 +286,7 @@ { "endpoint": "/api/storage/smart//test", "method": "POST", - "use": "Startar ett SMART-självtest. Schema för begäran: '{'\"type\":\"short\"|\"long\"'}'." + "use": "Startar ett SMART-självtest. Schema för begäran: '{'\"test_type\":\"short\"|\"long\"'}'." }, { "endpoint": "/api/storage/smart/schedules", diff --git a/web/messages/sv/docs/monitor/architecture.json b/web/messages/sv/docs/monitor/architecture.json index b4c27043..f8127df2 100644 --- a/web/messages/sv/docs/monitor/architecture.json +++ b/web/messages/sv/docs/monitor/architecture.json @@ -73,13 +73,13 @@ "intro": "AppImage innehåller ett filsystem som monteras vid körning. AppRun i roten ställer in miljön och startar flask_server.py:", "consequencesIntro": "Två konsekvenser av denna layout:", "consequences": [ - "Medföljande Python-miljö. Tolken och paketen finns i AppImage utan installation i värdens system-Python. Appen använder fortfarande kärngränssnitt och externa värdverktyg.", + "Medföljande Python-paket. Python-paketen levereras i AppImage och körs med värdens egen Python-tolk 3.11 (PVE 8) eller 3.13 (PVE 9), utan att något installeras i värdens system-Python. Appen använder fortfarande värdens kärngränssnitt och externa värdverktyg.", "Maskinvaruklienter ingår. Här finns ipmitool, lm-sensors och upsc. Mätningar kräver maskinvarustöd, sensoråtkomst och för UPS en konfigurerad NUT-server." ] }, "flask": { "heading": "Flask-appens struktur", - "intro": "flask_server.py skapar en Flask(__name__)-instans med begränsat CORS, registrerar nio blueprints direkt och initierar terminalen. Tabellen visar huvudmoduler; även granskning, VM-säkerhetskopiering och PBS registreras. PVE-förladdning körs bara på PVE-värdar.", + "intro": "flask_server.py skapar en Flask(__name__)-instans med begränsade CORS-ursprung, registrerar tio blueprints direkt och initierar terminalrutterna. Tabellen visar huvudmodulerna; blueprints för PBS, Monitor-länkar, granskning och VM-säkerhetskopiering registreras också. PVE-specifik förladdning körs bara på PVE-värdar.", "headerBlueprint": "Blueprint / modul", "headerPrefix": "Ruttprefix", "headerOwns": "Ansvar", @@ -242,10 +242,10 @@ "Uppdateringar: väntande paket och säkerhetsuppdateringar.", "Loggar: ihållande mönster, toppar och kaskader i systemjournalen.", "Minne: OOM-händelser och ihållande minnestryck.", - "Temperatur: CPU- och diskvärden jämförs med övervakningsgränser; tillgängliga sensorer beror på maskinvaran.", + "CPU: användning och CPU-temperatur jämförs med de konfigurerbara gränserna; tillgängliga sensorer beror på maskinvaran.", "Säkerhet: inloggningsfel, blockeringar och Fail2Ban-jailstatus." ], - "afterIntro": "Resultat använder stabil error_key, kategori och allvarlighetsgrad. Rader i errors uppdateras med last_seen och räknare utan dubbletter. Aviseringssändning har även egna fingeravtryck och väntetider.", + "afterIntro": "Resultat använder stabil error_key, kategori och allvarlighetsgrad. Befintliga poster i errors uppdateras på plats (last_seen, allvarlighetsgrad, orsak) i stället för att dupliceras. Aviseringssändning har även egna regler för fingeravtryck och väntetider.", "cycleEnd": "Rensning kan lösa gamla fel med kategorins tid för undertryckning och statusregler, ta bort övergivna poster för borttagna resurser och radera events äldre än 30 dagar. Kategorierna beskrivs i Panel → Health Monitor." }, "notifications": { @@ -264,9 +264,9 @@ "intro": "Fliken Terminal ansluter en lätt xterm.js-klient till ett PTY på servern via WebSocket. Två lägen finns:", "items": [ "HTTP-läge, standard: den inbyggda Flask-servern med flask-sock hanterar byte till WebSocket-protokollet.", - "HTTPS-/WSS-läge: använder gevent.pywsgi.WSGIServer med geventwebsocket.handler.WebSocketHandler för WebSocket över TLS." + "HTTPS-/WSS-läge: TLS-servern använder gevent.pywsgi.WSGIServer med sin standardhanterare; flask-sock hanterar WebSocket-anslutningar över TLS." ], - "outro": "Terminalprocesser ärver User=root. Med autentisering på kräver WebSocket en kortlivad engångsbiljett från den autentiserade biljettslutpunkten med administratörsbehörighet. Om autentisering är avstängd eller avböjd följer anslutningen det oautentiserade läget.", + "outro": "Terminalens underprocesser ärver User=root från tjänsten. För att öppna en WebSocket krävs en kortlivad engångsbiljett från den autentiserade slutpunkten för terminalbiljetter med administratörsbehörighet.", "proxyNote": "Med omvänd proxy måste WebSocket och dess headers Upgrade och Connection vidarebefordras. Terminalen kräver det." }, "proxy": { diff --git a/web/messages/sv/docs/monitor/dashboard/network.json b/web/messages/sv/docs/monitor/dashboard/network.json index de31d3d0..dee26d4d 100644 --- a/web/messages/sv/docs/monitor/dashboard/network.json +++ b/web/messages/sv/docs/monitor/dashboard/network.json @@ -162,7 +162,7 @@ } ], "reportTitle": "Rapport om nätverkslatens (PDF)", - "reportIntro": "Båda lägena har knappen Rapport bredvid målväljaren. Den skapar en PDF med mätningarna som du kan bifoga ett supportärende hos internetleverantören.", + "reportIntro": "Båda lägena har knappen Rapport bredvid målväljaren. Den öppnar en utskrivbar rapport över mätningarna; spara den som PDF från webbläsarens utskriftsdialog och bifoga den till ett supportärende hos internetleverantören.", "reportPreviewAlt": "Första PDF-sidan i latensrapporten med sammanfattning, mätare, statistik, diagram och gränsvärdesguide", "reportPreviewCaption": "Första sidan innehåller sammanfattning, mätare, huvudstatistik, latens över tid och gränsvärdesguide. Från sida 2 följer mättabellen och metoden.", "downloadLabel": "Hämta exempelrapport om latens (PDF)", diff --git a/web/messages/sv/docs/monitor/dashboard/security.json b/web/messages/sv/docs/monitor/dashboard/security.json index 255bb94b..718d35a8 100644 --- a/web/messages/sv/docs/monitor/dashboard/security.json +++ b/web/messages/sv/docs/monitor/dashboard/security.json @@ -136,7 +136,7 @@ "configCaption": "Redigera jailen sshd: sänk Max Retries om du bara använder SSH från ditt eget undernät, eller öka Ban Time för en översikt som är åtkomlig från internet.", "outro": "Guiden Installation, konfiguration och avinstallation beskriver även manuell installation, ändringen av SSH MaxAuthTries och kopplingen till loggen proxmenux-auth.log. Se ProxMenux → Säkerhet → Fail2Ban.", "calloutTitle": "Utan Fail2Ban blockerar den här mekanismen inga IP-adresser", - "calloutBody": "ProxMenux Monitor kontrollerar IP-adresser som blockerats av Fail2Ban på applikationsnivå innan Flask-begäranden behandlas. Den frågar fail2ban-client och sparar resultatet i cache i 30 sekunder; ingen SQL-tabell med blockeringar läses. Utan Fail2Ban loggas misslyckade inloggningar i proxmenux-auth.log, men mekanismen blockerar inga IP-adresser." + "calloutBody": "ProxMenux Monitor kontrollerar IP-adresser som blockerats i Fail2Bans jail proxmenux på applikationsnivå innan Flask-begäranden behandlas och sparar resultatet i cache i 30 sekunder. Utan Fail2Ban loggas misslyckade inloggningar i proxmenux-auth.log och inloggningsslutpunkten begränsas till 5 försök per IP var 5:e minut, men ingen IP-adress blockeras." }, "lynis": { "heading": "Säkerhetsgranskning med Lynis", diff --git a/web/messages/sv/docs/monitor/dashboard/settings.json b/web/messages/sv/docs/monitor/dashboard/settings.json index 64a4198b..ec7dba49 100644 --- a/web/messages/sv/docs/monitor/dashboard/settings.json +++ b/web/messages/sv/docs/monitor/dashboard/settings.json @@ -76,7 +76,7 @@ }, "thresholds": { "heading": "Gränsvärden i Health Monitor", - "intro": "Förra kortet anger tystnadens längd efter avfärdande; detta anger värdet som utlöser en varning. De flesta gränskontroller har justerbara värden för Varning och Kritiskt. Tabellen förklarar undantag som kombinerad swapregel och aktuell RAM-detektor.", + "intro": "Förra kortet anger tystnadens längd efter avfärdande; detta anger värdet som utlöser en varning. De flesta gränskontroller har justerbara värden för Varning och Kritiskt. Tabellen nedan förklarar undantag som den kombinerade swapregeln.", "whatForTitle": "Vad det används till", "whatForIntro": "Standardvärdena är en utgångspunkt, men varje miljö har egna förutsättningar:", "whatForItems": [ @@ -85,7 +85,7 @@ "Välj temperaturgränser efter diskens specifikationer och faktiska förhållanden. Passiv eller forcerad kylning avgör inte ensam en allmänt lägre eller högre säker gräns.", "En tungt virtualiserad värd kan få CPU-toppar vid byggen utan att varna för varje topp på 80 %, men måste fortfarande varna vid långvarig överbelastning." ], - "whatForOutro": "Ändringar som stöds gäller vid nästa kontroll. Health Monitor läser /usr/local/share/proxmenux/health_thresholds.json varje cykel utan omstart. Vissa indikatorer, som disktemperatur, använder värdena; vissa kapacitetsstaplar har egna gränser. RAM-raden beskriver ett aktuellt undantag.", + "whatForOutro": "Ändringar av tröskelvärden som stöds gäller vid nästa kontroll. Health Monitor läser /usr/local/share/proxmenux/health_thresholds.json varje cykel utan omstart. Utvalda indikatorer, bland annat disktemperatur, använder värdena; vissa kapacitetsstaplar behåller egna visuella gränser.", "coloursTitle": "Statusfärger för Varning och Kritiskt", "coloursIntro": "Widgetar med det konfigurerade paret Varning/Kritiskt följer de tre lägena nedan. Andra indikatorer, som PVE-kapacitetsstaplar, har egna gränser; färgen ensam visar inte att Health Monitor har larmat.", "headerColour": "Färg", @@ -125,7 +125,7 @@ "section": "Minne", "warning": "85 %", "critical": "95 %", - "gates": "Värdens RAM-belastning. Den konfigurerbara standarden visar Kritiskt vid 95 %, men aktuell detektor använder en fast regel på 90 % över tid; inställningen ändrar för närvarande inte den körningsgrenen." + "gates": "Värdens RAM-belastning." }, { "section": "Swap (endast kritisk nivå)", @@ -185,7 +185,7 @@ "section": "PVE-lagring", "warning": "85 %", "critical": "95 %", - "gates": "Lagring som hanteras av PVE: LVM, LVM-thin, ZFS-pool, RBD/Ceph och PBS. Alla är inte blocklagringssystem." + "gates": "Endast PVE-lagring av typerna LVM, LVM-thin, ZFS-pool, RBD, CephFS och PBS. Katalog-, NFS- och CIFS-lagring täcks av raden för värdens diskutrymme." }, { "section": "ZFS-pool", @@ -218,7 +218,7 @@ "toggleTitle": "Aviseringsreglage när detektering är på", "toggleBody": "Reglaget lxc_updates_available per kanal under Aviseringar → Tjänster visas bara när detektering är på. När den stängs av döljs raden för alla kanaler. Valet sparas i databasen och samma värde återkommer när detektering slås på.", "purgeTitle": "Vad som rensas när detektering stängs av", - "purgeBody": "Avstängning tar genast bort type=lxc-poster från /usr/local/share/proxmenux/managed_installs.json. Räknarna för LXC-uppdateringar i Hårdvara försvinner vid nästa omladdning. Påslagning fyller registret vid nästa kontroll, eller tidigare med manuell API-uppdatering." + "purgeBody": "Avstängning tar genast bort alla type=lxc-poster från /usr/local/share/proxmenux/managed_installs.json. Räknarna för LXC-uppdateringar på fliken VM och LXC töms vid nästa uppdatering av instrumentpanelen. Påslagning fyller registret vid nästa identifieringscykel, eller tidigare med manuell API-uppdatering." }, "storageExclusions": { "heading": "Exklusioner för fjärrlagring", diff --git a/web/messages/sv/docs/monitor/dashboard/storage.json b/web/messages/sv/docs/monitor/dashboard/storage.json index c402ea5e..522a9a65 100644 --- a/web/messages/sv/docs/monitor/dashboard/storage.json +++ b/web/messages/sv/docs/monitor/dashboard/storage.json @@ -70,7 +70,7 @@ "items": [ "Enhetssökväg — /dev/sda, /dev/nvme0n1.", "Typetikett — SATA / NVMe och tillhörande ikon.", - "Systemetikett — orange markering för diskar som identifierats som operativsystemets diskar. Identifieringen använder monteringarna / och /boot och ger etiketten System. En saknad etikett bevisar inte att disken kan raderas eller användas för annat utan risk.", + "Systemetikett — orange markering för diskar som värden använder: systemets monteringspunkter (/, /boot, /usr, /var…), aktiv swap, ZFS-poolmedlemmar, fysiska LVM-volymer, aktiva RAID-medlemmar eller etiketter på systempartitioner. En saknad etikett bevisar inte att disken kan raderas eller användas för annat utan risk.", "Modell — tillverkare och modell från smartctl -i.", "Kapacitet — i lättlästa enheter.", "Temperatur — aktuellt värde i °C, färgat efter disktyp; NVMe använder högre gränser än SATA.", @@ -112,7 +112,7 @@ "pdfPreviewAlt": "Första sidan i SMART-rapporten med sammanfattning, PASSED-ring och diskinformation", "pdfPreviewCaption": "Första sidan: sammanfattning, PASSED-ring och fullständig diskinformation. Exempel-PDF:en innehåller SSD-slitage, alla SMART-attribut och testhistorik.", "pdfDownloadLabel": "Hämta exempelrapport för SMART (PDF)", - "pdfSectionsIntro": "Rapporten har sex huvudavsnitt:", + "pdfSectionsIntro": "Rapporten innehåller dessa huvudavsnitt:", "pdfSections": [ "Sammanfattning — PASSED/FAILED, begriplig diskbedömning — bra, sliten eller felande — och fyra uppgifter: rapporttid, senaste testtyp, resultat och kontrollerade attribut.", "Diskinformation — modell, serienummer, kapacitet, typ HDD/SSD/NVMe, familj, formfaktor, gränssnitt (SATA 3.3 · 6.0 Gb/s, …), TRIM, temperatur och optimal gräns, drifttimmar, starter, SMART, väntande/omallokerade sektorer och CRC-fel.", @@ -127,7 +127,7 @@ "historyImageCaption": "Diskens SMART-historik. Varje rad visar typ, tid, ålder, markering av senaste test samt hämtning av smartctl-utdata och borttagning.", "historyIntro": "Sparade slutförda korta och utökade tester för disken. Varje post innehåller ursprungliga smartctl-utdata och fälten som Monitor tolkar för översikten. Åtgärder per rad:", "historyItems": [ - "Hämta — sparar JSON-ögonblicksbilden med rapportens smartctl -a-data. Praktiskt när tillverkarsupporten behöver ursprungliga diagnostikfält.", + "Hämta — sparar testets JSON-ögonblicksbild (utdata från smartctl -a --json, eller nvme smart-log på NVMe när smartctl misslyckas). Praktiskt när tillverkarsupporten behöver ursprungliga diagnostikfält.", "Ta bort — raderar ett test manuellt ur historiken. Lagringsgränsen i Schema (senaste 5 / 10 / 20) tar automatiskt bort de äldsta." ], "scheduleTitle": "Flik 4 — Schema", diff --git a/web/messages/sv/docs/monitor/dashboard/vms-lxcs.json b/web/messages/sv/docs/monitor/dashboard/vms-lxcs.json index cf94d7ae..f71d6a3c 100644 --- a/web/messages/sv/docs/monitor/dashboard/vms-lxcs.json +++ b/web/messages/sv/docs/monitor/dashboard/vms-lxcs.json @@ -1,16 +1,16 @@ { "meta": { "title": "ProxMenux Monitor — Översikt: VM och LXC | ProxMenux-dokumentation", - "description": "Inventering av gäster med CPU, minne och disk i realtid. Detaljerna visar konfiguration, resurser, säkerhetskopior, senaste Proxmox-loggresultat, anteckningar och Starta / Stäng av / Starta om / Tvinga stopp." + "description": "Fliken VM och LXC inventerar alla gäster på värden med CPU-, minnes- och diskanvändning i realtid. Detaljerna per gäst visar konfiguration, resurser, säkerhetskopior, konsolloggen för OCI-containrar, anteckningar och Starta / Stäng av / Starta om / Tvinga stopp." }, "header": { "title": "Översikt: VM och LXC", - "description": "Hela nodens gästinventering: fyra mätvärden överst, en sorterbar lista över VM och LXC samt gästdetaljer med konfiguration, resurser, säkerhetskopior, loggar och Starta / Stäng av / Starta om / Tvinga stopp.", + "description": "Hela nodens gästinventering: fyra mätvärden överst, en sorterbar lista över alla VM och LXC nedanför samt gästdetaljer med konfiguration, resurser, säkerhetskopior, konsolloggen för OCI-containrar och de fyra livscykelkontrollerna (Starta / Stäng av / Starta om / Tvinga stopp).", "section": "ProxMenux Monitor · Översikt" }, "intro": { "title": "Kontroller för gäster", - "body": "Här styr du gästernas livscykel. Åtgärder går via POST /api/vms/<vmid>/control efter uttrycklig bekräftelse och uppdaterar gästens rad. Tvingad avstängning kräver den särskilda knappen Tvinga stopp." + "body": "Här styr du gästernas livscykel. Livscykelåtgärder går via POST /api/vms/<vmid>/control; Starta om och Tvinga stopp ber dig skriva VMID för att bekräfta, och svaret visas i gästens rad. Tvingad avstängning kräver den särskilda knappen Tvinga stopp." }, "topRow": { "heading": "Övre raden: fyra statistikkort", @@ -186,9 +186,9 @@ "source": "PVE RRD-data (pvesh get /nodes/<node>/qemu/<id>/rrddata) kondenserade till en diagramvänlig form." }, { - "section": "Senaste Proxmox-loggresultat", - "endpoint": "/api/vms//logs", - "source": "pvesh get /nodes/<node>/<qemu|lxc>/<vmid>/log --start 0 --limit 1000. Om kommandot misslyckas returneras en tom lista; detta ger inte fullständiga systemloggar inifrån gästen." + "section": "OCI-konsollogg (fliken Loggar)", + "endpoint": "/api/lxc//console-log", + "source": "Konsolutdata från avbildningens huvudprocess, läst från /var/log/proxmenux/oci/<vmid>.console.log på värden. Visas endast för OCI-containrar." }, { "section": "Backups tillgängliga för gäst", diff --git a/web/messages/sv/docs/monitor/health-monitor.json b/web/messages/sv/docs/monitor/health-monitor.json index 0dfa93ce..ae3a030e 100644 --- a/web/messages/sv/docs/monitor/health-monitor.json +++ b/web/messages/sv/docs/monitor/health-monitor.json @@ -68,7 +68,7 @@ { "category": "Lagring", "checks": "Proxmox-lagring, rotfilsystem", - "events": "Rotfilsystemet eller andra övervakade filsystem passerar inställda utrymmeströsklar (85% varning / 95% kritiskt som standard); NFS-export offline; misslyckad CIFS-autentisering; full LVM-thin-pool." + "events": "Rotfilsystemet eller andra övervakade filsystem passerar inställda utrymmeströsklar (85% varning / 95% kritiskt som standard); otillgänglig PVE-lagring; hängande eller oväntat skrivskyddade NFS-/CIFS-monteringar; LVM-thin och annan poollagring som passerar samma trösklar." }, { "category": "Disker och SMART", @@ -98,7 +98,7 @@ { "category": "Systemuppdateringar", "checks": "I väntan på uppdateringar, säkerhetsuppdateringar, kärna / PVE-version, systemålder", - "events": "Väntande säkerhetsuppdateringar eller uppdateringar av den kärna som används; system som inte uppdaterats på länge. Knappen Uppdatera nu visas i översiktens sidhuvud när uppdateringar finns. Den kör hela ProxMenux-flödet och uppdaterar hälsan med ?refresh=1 vid stängning utan att invänta nästa cykel." + "events": "Väntande säkerhetsuppdateringar eller uppdateringar av den kärna som används; system som inte uppdaterats på länge. Kategorin Uppdateringar i fönstret Hälsostatus visar knappen Uppdatera nu när uppdateringar väntar. Den kör hela ProxMenux-uppdateringsflödet direkt i fönstret; vid stängning uppdateras hälsan med ?refresh=1 så att indikatorn visar det nya tillståndet utan att invänta nästa cykel." }, { "category": "Säkerhet och certifikat", @@ -158,7 +158,7 @@ }, "dismiss": { "heading": "Avfärda larm och ange undertryckningstid", - "intro": "Vissa händelser kvarstår, som Systemuppdateringar: uppdateringar tillgängliga tills värden uppdaterats. En avisering var femte minut behövs inte. Knappen Uppdatera nu i översikten löser just det fallet direkt. För andra fall eller uppskjutna uppdateringar finns två sammankopplade sätt att tysta larm:", + "intro": "Vissa händelser kvarstår av naturen, som Systemuppdateringar: uppdateringar tillgängliga tills värden uppdaterats, och en avisering var femte minut i en vecka behövs inte. Knappen Uppdatera nu i kategorin Uppdateringar i fönstret Hälsostatus löser just det fallet direkt. För andra fall eller uppskjutna uppdateringar erbjuder hälsoövervakningen också två sammankopplade sätt att tysta larm:", "step1": "Avfärda en enskild händelse i fönstret. Menyn erbjuder 24 timmar, 7 dagar eller Permanent, oberoende av kategorins standard. Valet skickar POST /api/health/acknowledge med error_key och valda suppression_hours (-1 för permanent). Händelsen flyttas till Avfärdade med tidsstämpeln acknowledged_at.", "dropdownImageAlt": "Meny för att avfärda ett larm: 24 timmar, 7 dagar eller permanent", "dropdownImageCaption": "Vald tid gäller bara detta larm; utan enskilt val används kategorins standard. Permanent avfärdade larm har ett bärnstensfärgat märke Permanent och utlöses normalt inte igen. Undantaget för kritisk CPU-temperatur beskrivs nedan.", @@ -187,7 +187,7 @@ }, { "finding": "ZFS pool DEGRADED / FAULTED", - "why": "ZFS-poolernas kapacitetskontroller tillåter uttryckligen avfärdande. Andra poolfynd följer sin egen flagga. Kvittering reparerar inte en degraderad eller felaktig pool." + "why": "Fynd om ZFS-poolernas tillstånd (DEGRADED, FAULTED, UNAVAIL) tillåter uttryckligen avfärdande, liksom kontroller av poolkapacitet. Kvittering reparerar inte en degraderad eller felaktig pool." }, { "finding": "Disk-I/O-fel med SMART FAILED", @@ -289,7 +289,7 @@ }, "rest": { "heading": "REST-slutpunkter", - "intro": "Fönstrets åtgärder kan anropas via API för skript, översikter och botar. Med Monitors autentisering påslagen behövs en giltig Bearer-token från inloggning eller API-tokenskärmen. Ändringar som kvittering, sparande eller rensning av övergivna fel kräver full_admin; read_only får 403. Med autentisering avstängd eller avböjd tillåter dessa kontroller åtkomst utan token.", + "intro": "Fönstrets åtgärder kan också anropas via API för skript, egna översikter och botar. Anrop kräver en giltig Bearer-token, antingen från inloggning eller API-tokenskärmen. Ändringar som kvittering av larm, sparande av undertryckningsinställningar eller rensning av övergivna fel kräver omfånget full_admin; read_only får 403.", "headerEndpoint": "Slutpunkt", "headerMethod": "Metod", "headerUse": "Användning", @@ -297,7 +297,7 @@ { "endpoint": "/api/health", "method": "GET", - "use": "Lätt kontroll som ger JSON med status, timestamp och version. Passar Uptime Kumas nyckelordskontroller; när Monitors autentisering är påslagen måste klienten skicka en Bearer-header." + "use": "Lätt kontroll som ger JSON med status, timestamp och version. Passar Uptime Kumas nyckelordskontroller; klienten måste skicka en Bearer-header." }, { "endpoint": "/api/health/status", diff --git a/web/messages/sv/docs/monitor/index.json b/web/messages/sv/docs/monitor/index.json index 4e35572e..fa2eab2f 100644 --- a/web/messages/sv/docs/monitor/index.json +++ b/web/messages/sv/docs/monitor/index.json @@ -52,7 +52,7 @@ }, { "name": "Terminal", - "description": "Värdskal och konsolåtkomst till VM/CT som stöds i webbläsaren via xterm.js och WebSockets. Följer valt autentiseringsläge: om autentisering är avstängd eller avböjd kan klienter med nätåtkomst öppna en session utan inloggning. Det innebär ingen granskning av varje kommando." + "description": "Värdskal och konsolåtkomst till VM/CT som stöds i webbläsaren via xterm.js och WebSockets. Sessioner granskas inte per kommando." }, { "name": "Säkerhet", @@ -114,7 +114,7 @@ "heading": "REST API och integrationer", "intro": "REST-endpointar ger övervakningsdata som JSON över HTTP/HTTPS för Homepage, Home Assistant, Uptime Kuma och skript. Grafana kan använda den separata Prometheus-textexportören på /api/prometheus. Anrop kan göras med curl.", "tokens": "Långlivade API-token (365 dagar) skapas under Inställningar → API-åtkomsttoken eller via POST /api/auth/generate-api-token.", - "bearer": "Skicka token som Authorization: Bearer …. Den offentliga /api/health passar tillgänglighetskontroller utan inloggning. Under /api/auth/* finns offentliga inställnings-/inloggnings-/statusrutter och skyddad konto-/tokenhantering; alla är inte anonyma.", + "bearer": "Skicka token som Authorization: Bearer …. Även /api/health förväntar sig Bearer-headern, så tillgänglighetskontroller behöver en read_only-token. Under /api/auth/* finns både offentliga inställnings-/inloggnings-/statusrutter och skyddade rutter för konto-/tokenhantering; alla är inte anonyma.", "catalog": "Den fullständiga slutpunktskatalogen, vägledning för tokenrotation och bästa säkerhetspraxis finns i API Referens; Färdiga exempel för Homepage, Home Assistant, Grafana, Uptime Kuma och ett generiskt cURL-mönster finns i Integrationer." }, "serviceControl": { diff --git a/web/messages/sv/docs/monitor/integrations.json b/web/messages/sv/docs/monitor/integrations.json index 3ac16db2..60d5ee3b 100644 --- a/web/messages/sv/docs/monitor/integrations.json +++ b/web/messages/sv/docs/monitor/integrations.json @@ -220,7 +220,7 @@ "heading": "n8n, Zapier och anpassade skript", "intro": "Arbetsflöden och skript kan skicka aviseringar med POST till /api/notifications/send, exempelvis vid CI-fel eller långa cronjobb. Direktsändning kringgår händelsekö och spärrtid per händelseavtryck. Kanalformatering, valfri AI och leverans finns kvar. Hantera eventuella dubbletter i anroparen.", "n8nBody": "Använd en HTTP Request-nod i n8n med POST, URL ovan och samma JSON som curl. Välj generiska Header Auth-uppgifter: namn Authorization och värde Bearer YOUR_API_TOKEN, och ersätt platshållaren. Anslut ett schema, en webhook eller en föregående nod som utlösare.", - "severityBody": "Allvarlighetsgrad anges som INFO, WARNING eller CRITICAL med versaler. Objektet data ger sammanhang. AI använder renderad titel och text samt stödd berikning; godtyckliga fält ingår inte säkert i prompt eller resultat. Se Aviseringar → Händelsekatalog." + "severityBody": "Allvarlighetsgrad anges som INFO, WARNING eller CRITICAL med versaler. Objektet data ger händelsekontext och mallfält. På denna slutpunkt får AI-omskrivningen bara titel och text; fält i data skickas inte till leverantören. Se Aviseringar → Händelsekatalog för händelsernas betydelse." }, "pveWebhook": { "heading": "Inbyggd Proxmox VE-webhook (inkommande)", diff --git a/web/messages/sv/docs/monitor/notifications.json b/web/messages/sv/docs/monitor/notifications.json index ca940a34..1f20b3f6 100644 --- a/web/messages/sv/docs/monitor/notifications.json +++ b/web/messages/sv/docs/monitor/notifications.json @@ -171,7 +171,7 @@ "Öppna account.microsoft.com/security och aktivera tvåstegsverifiering.", "Om kontot erbjuder Avancerade säkerhetsalternativ → Applösenord, välj Skapa ett nytt applösenord. Det garanterar inte att e-posttjänsten godtar SMTP med lösenord.", "Om Microsoft skapar ett applösenord, kopiera det och kontrollera att SMTP-tjänsten godtar det.", - "Använd bara dessa godkända inställningar om tjänsten tillåter SMTP med lösenord: Server smtp.office365.com för Exchange Online, Port 587, TLS-läge STARTTLS, Användarnamn din e-postadress och Lösenord den tillåtna SMTP-inloggningsuppgiften. Personliga Outlook.com-konton har andra inställningar och krav." + "Fyll bara i tjänstens godkända inställningar om den tillåter SMTP med lösenord: SMTP-värd smtp.office365.com för Exchange Online, Port 587, TLS-läge STARTTLS, Användarnamn din postlådeadress och Lösenord den tillåtna SMTP-inloggningsuppgiften. Personliga Outlook.com-konton har andra inställningar och autentiseringskrav; utgå inte från att dessa uppgifter fungerar." ], "relayTitle": "Eget SMTP-relä", "relayBody": "Anslut Monitor till ett SMTP-relä du kontrollerar, till exempel Postfix. Reläet hanterar tjänstens autentisering. Anpassa Monitors autentisering och TLS-läge till reläet; att det körs lokalt stänger inte av kryptering." @@ -266,7 +266,7 @@ "howItems": [ "Aktiveras per kanal. Avstängt som standard. Aktivera sammanfattning på önskade kanaler och behåll direktleverans på andra.", "Leveranstid i lokal tidszon, som standard 09:00. Du kan välja en annan tid; sammanfattningen skickas inom ungefär 60 sekunder från den minuten.", - "Ingår i sammanfattningen: lämpliga allmänna händelser med nivån INFO. Exempel: programuppdatering tillgänglig, Tailscale-uppdatering tillgänglig, ProxMenux-optimeringsuppdatering tillgänglig, APT-säkerhetsuppdateringar väntar och frekvensgräns nådd. Säkerhetskopieringsresultat och andra undantagna åtgärdshändelser skickas direkt.", + "Ingår i sammanfattningen: lämpliga allmänna händelser med nivån INFO. Exempel: programuppdatering tillgänglig, Tailscale-uppdatering tillgänglig, ProxMenux-optimeringsuppdatering tillgänglig och APT-säkerhetsuppdateringar väntar. Säkerhetskopieringsresultat och andra undantagna åtgärdshändelser skickas direkt.", "Fördröjs aldrig av den dagliga sammanfattningen:", "Beständig lagring. Väntande händelser sparas i SQLite-tabellen digest_pending till vald tid. En omstart av Monitor förlorar inte innehållet.", "Tyst när inget har hänt. Om inga INFO-händelser väntar skickas ingen sammanfattning." @@ -301,7 +301,7 @@ { "stage": "Väntetid mellan upprepningar", "what": "Efter lyckad leverans undertrycks samma fingeravtryck och tillståndet sparas i notification_last_sent. Grundvärden för CRITICAL, WARNING och INFO är 86 400 s, liksom för resources och updates. Undantag: 5 s för VM/CT-åtgärder och värdens avstängning/omstart, 10 s för säkerhetskopierings-/replikeringsresultat och 1 800–3 600 s för flera hälsokategorier. Egna händelse- eller gruppinställningar kan ersätta värdena.", - "tunable": "Ja — uttryckliga väntetider för händelsetyp eller grupp ersätter standardvärdena i sändningskonfigurationen." + "tunable": "Endast via inställnings-API:t — en nyckel cooldown.<event_type> eller cooldown.<group> ersätter standardvärdena; det finns ingen kontroll i gränssnittet." }, { "stage": "Gruppering av händelsetoppar", @@ -330,7 +330,7 @@ "Metod och URL. POST http://127.0.0.1:8008/api/notifications/webhook när HTTPS är avstängt i Monitor. Med HTTPS används en separat lokal HTTP-mottagare på port 8009. Båda finns på samma värd.", "Meddelandemall. JSON med PVE:s Handlebars-funktioner. PVE sparar mallen base64-kodad i konfigurationen. Avkodad blir den:", "Matchare. Ett tillhörande matcher: proxmenux-matcher-block med mode all skickar alla PVE-aviseringar till målet.", - "Privat konfiguration. Installationen skriver blocket webhook: proxmenux-webhook i /etc/pve/priv/notifications.cfg, med den delade hemligheten base64-kodad. Det offentliga målet hänvisar till hemligheten för att skicka X-Webhook-Secret. Blocket är alltså inte tomt." + "Privat konfiguration. Installationen skriver det matchande blocket webhook: proxmenux-webhook i /etc/pve/priv/notifications.cfg med en secret-post som heter X-Webhook-Secret, base64-kodad. Det offentliga målblocket innehåller bara body-mallen, metoden och URL:en. Det privata blocket är ingen tom stub." ], "securityTitle": "Så skyddas mottagaren", "securityIntro": "Webhookmottagaren på POST /api/notifications/webhook tillämpar olika säkerhetskontroller beroende på anropets källa:",