mirror of
https://github.com/MacRimi/ProxMenux.git
synced 2026-11-02 19:02:31 +00:00
Describe the Monitor pages as the code behaves
This commit is contained in:
@@ -19,7 +19,7 @@
|
||||
"reaching": {
|
||||
"heading": "Raggiungere la dashboard",
|
||||
"intro": "ProxMenux Monitor si lega a <code>0.0.0.0:8008</code>. 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 <code>X-Forwarded-For</code> servono PROXMENUX_TRUST_PROXY=1 e un proxy sotto il tuo controllo. <code>X-Forwarded-Proto</code> o <code>X-Forwarded-Host</code> 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 <code>X-Forwarded-For</code> servono PROXMENUX_TRUST_PROXY=1 e un proxy sotto il tuo controllo. La sola presenza di <code>X-Forwarded-Proto</code> o <code>X-Forwarded-Host</code> non attiva la fiducia nel proxy. Sulle porte 80/443 il frontend usa URL <code>/api/*</code> 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 <code>requires_totp: true</code>. 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 <code>/api/system-info</code> sono pubblici:",
|
||||
"publicItems": [
|
||||
"<code>/api/auth/login</code> e <code>/api/auth/status</code> sono pubblici. <code>/api/auth/setup</code> crea il primo account e rifiuta di sovrascrivere credenziali esistenti.",
|
||||
"<code>/api/system-info</code> è un endpoint pubblico con informazioni di base sul sistema, incluso <code>health.status</code>. 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": "<code>auth.json</code> → <code>totp_secret</code> + <code>backup_codes[]</code>"
|
||||
},
|
||||
{
|
||||
@@ -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": [
|
||||
"<strong>Installa l’app di autenticazione sul telefono</strong> o apri il gestore di password. Basta farlo una volta: la stessa app può conservare i codici di tutti i servizi protetti.",
|
||||
"<strong>Accedi alla dashboard</strong> con nome utente e password.",
|
||||
"<strong>Apri la scheda Sicurezza</strong> e scegli <strong>Abilita 2FA</strong>. Il dialogo mostra QR, segreto Base32 e otto codici di recupero.",
|
||||
"<strong>Apri la scheda Sicurezza</strong> nella barra laterale della dashboard, poi fai clic su <strong>Abilita 2FA</strong> e <strong>Avvia la configurazione</strong>. Il dialogo mostra il QR e la chiave manuale; gli otto codici di backup compaiono dopo la verifica del codice.",
|
||||
"<strong>Aggiungi la voce all’app di autenticazione:</strong>",
|
||||
"<strong>Salva i codici di recupero.</strong> Conserva tutti e otto in un gestore di password, nota cifrata o copia cartacea sicura. Ciascuno funziona una volta se l’app non è disponibile.",
|
||||
"<strong>Conferma inserendo il codice attuale a sei cifre</strong> dell’app nel campo \"Codice di verifica\" e invia. Cambia ogni 30 secondi: se scade mentre lo scrivi, usa il successivo.",
|
||||
"<strong>Conferma inserendo il codice attuale a sei cifre</strong> 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.",
|
||||
"<strong>Salva i codici di backup.</strong> 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.",
|
||||
"<strong>Fatto.</strong> 2FA è attivo. Al prossimo accesso verrà richiesta prima la password, poi il codice attuale a sei cifre."
|
||||
],
|
||||
"setupStep4Sub": [
|
||||
@@ -261,17 +261,17 @@
|
||||
"<em>Alternativa manuale</em> se non puoi scansionare, ad esempio sullo stesso telefono: <em>Aggiungi account</em> → <em>Inserisci chiave di configurazione</em>. Scegli un nome come <em>Proxmox Monitor</em>, incolla il segreto Base32, lascia <em>Tipo</em> su <em>Basato sul tempo</em> e salva."
|
||||
],
|
||||
"testTitle": "Prova prima di uscire",
|
||||
"testBody": "Mantieni la sessione attuale aperta e prova un nuovo accesso in una finestra privata <em>subito</em> 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 <code>auth.json</code> dalla shell dell’host.",
|
||||
"testBody": "Mantieni la sessione attuale aperta e prova un nuovo accesso in una finestra privata <em>subito</em> 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 <code>auth.json</code> dalla shell dell’host.",
|
||||
"lostTitle": "Autenticatore perso",
|
||||
"lostIntro": "Tre metodi di recupero, dal meno al più invasivo:",
|
||||
"lostItems": [
|
||||
"<strong>Usa un codice di recupero.</strong> 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.",
|
||||
"<strong>Usa un codice di backup.</strong> Inserisci uno degli otto codici salvati nel campo TOTP. Funziona una volta; i codici non usati restano validi. Dopo l’accesso apri Sicurezza, scegli <strong>Disattiva 2FA</strong> e poi <strong>Abilita 2FA</strong> per ottenere otto nuovi codici.",
|
||||
"<strong>Ripristina l’app da cloud o backup.</strong> 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.",
|
||||
"<strong>Disattiva 2FA dalla shell dell’host.</strong> Se gli altri metodi non sono disponibili, modifica <code>/root/.config/proxmenux-monitor/auth.json</code> come root via SSH o console, imposta <code>totp_enabled</code> su <code>false</code>, salva e riavvia il servizio:"
|
||||
],
|
||||
"lostShellOutro": "È possibile accedere solo con nome utente + password, quindi abilitare 2FA da Impostazioni.",
|
||||
"disableTitle": "Disabilita 2FA",
|
||||
"disableBody": "Apri <strong>Sicurezza</strong> e scegli <strong>Disattiva 2FA</strong>. <code>POST /api/auth/totp/disable</code> 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 <strong>Sicurezza</strong> e scegli <strong>Disattiva 2FA</strong>. <code>POST /api/auth/totp/disable</code> 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": [
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
},
|
||||
"intro": {
|
||||
"title": "Off per impostazione predefinita, singolo interruttore per abilitare",
|
||||
"body": "La riscrittura IA è disattivata per impostazione predefinita. Attivala in <em>Impostazioni → Notifiche → Avanzate: miglioramento IA</em>. 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 <em>Impostazioni → Notifiche → Avanzate: miglioramento IA</em>. 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. <link>Dettaglio per canale</link> spiega come usare <code>brief</code> nelle chat invece di <code>standard</code>, 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 <link>Dettaglio per canale</link> spiega come usare <code>brief</code> nelle chat invece di <code>standard</code>, mantenendo report e-mail dettagliati."
|
||||
},
|
||||
"providers": {
|
||||
"heading": "Fornitori di AI",
|
||||
@@ -142,7 +142,7 @@
|
||||
"items": [
|
||||
"Chiave API: <a>console.anthropic.com/settings/keys</a>",
|
||||
"Esempi dall’elenco di modelli incluso: <code>claude-haiku-4-5-20251001</code>, <code>claude-sonnet-4-6</code>, <code>claude-opus-4-6</code>.",
|
||||
"Raccomandazione inclusa: <strong><code>claude-haiku-4-5-20251001</code></strong>. Questa versione precisa è configurata come consigliata; le vecchie voci Claude 3.5 non sono più nella lista inclusa."
|
||||
"Raccomandazione inclusa: <strong><code>claude-haiku-4-5-20251001</code></strong>, uno snapshot fisso anziché un alias variabile."
|
||||
]
|
||||
},
|
||||
"gemini": {
|
||||
|
||||
@@ -162,7 +162,7 @@
|
||||
{
|
||||
"endpoint": "/api/vms/<vmid>/backup",
|
||||
"method": "POST",
|
||||
"use": "Crea un backup vzdump di VM o LXC. Campi facoltativi da adattare allo storage: <code>storage</code> (destinazione PVE), <code>mode</code> (<code>snapshot</code>, <code>suspend</code> o <code>stop</code>), <code>compress</code> (<code>zstd</code>, <code>lzo</code>, <code>gzip</code> o <code>none</code>), <code>protected</code> (<code>true</code> o <code>false</code>), <code>notes</code>, <code>notification</code> (<code>auto</code>, <code>always</code>, <code>failure</code> o <code>never</code>) e <code>pbs_change_detection</code> (<code>default</code>, <code>legacy</code> o <code>data</code>). 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: <code>storage</code> (uno storage PVE), <code>mode</code> (<code>snapshot</code>, <code>suspend</code> o <code>stop</code>), <code>compress</code> (<code>zstd</code>, <code>lzo</code>, <code>gzip</code> o <code>none</code>), <code>protected</code> (<code>true</code> o <code>false</code>), <code>notes</code> e <code>pbs_change_detection</code> (<code>default</code>, <code>legacy</code> o <code>data</code>). Restituisce l’UPID della task PVE."
|
||||
},
|
||||
{
|
||||
"endpoint": "/api/vms/<vmid>/backups",
|
||||
@@ -286,7 +286,7 @@
|
||||
{
|
||||
"endpoint": "/api/storage/smart/<disk>/test",
|
||||
"method": "POST",
|
||||
"use": "Avvia un autotest SMART. Schema del corpo: <code>'{'\"type\":\"short\"|\"long\"'}'</code>."
|
||||
"use": "Avvia un autotest SMART. Schema del corpo: <code>'{'\"test_type\":\"short\"|\"long\"'}'</code>."
|
||||
},
|
||||
{
|
||||
"endpoint": "/api/storage/smart/schedules",
|
||||
|
||||
@@ -73,13 +73,13 @@
|
||||
"intro": "L’AppImage contiene un filesystem montato all’esecuzione. <code>AppRun</code> alla radice prepara l’ambiente e avvia <code>flask_server.py</code>:",
|
||||
"consequencesIntro": "Due conseguenze di questo layout:",
|
||||
"consequences": [
|
||||
"<strong>Ambiente Python incluso.</strong> Interprete e pacchetti sono nell’AppImage, senza installazione nel Python di sistema. L’app usa comunque interfacce del kernel e strumenti esterni dell’host.",
|
||||
"<strong>Pacchetti Python inclusi.</strong> 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.",
|
||||
"<strong>Client hardware inclusi.</strong> Sono presenti <code>ipmitool</code>, <code>lm-sensors</code> e <code>upsc</code>. Le letture richiedono hardware compatibile, accesso ai sensori e, per l’UPS, un server NUT configurato."
|
||||
]
|
||||
},
|
||||
"flask": {
|
||||
"heading": "Struttura dell’applicazione Flask",
|
||||
"intro": "<code>flask_server.py</code> crea un’istanza <code>Flask(__name__)</code> 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": "<code>flask_server.py</code> crea un’istanza <code>Flask(__name__)</code> 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 <code>error_key</code>, categoria e gravità stabili. Le righe in <code>errors</code> vengono aggiornate con <code>last_seen</code> e contatori, senza duplicarle. L’invio delle notifiche ha anche impronte e intervalli propri.",
|
||||
"afterIntro": "I risultati usano <code>error_key</code>, categoria e gravità stabili. I record esistenti in <code>errors</code> vengono aggiornati sul posto (<code>last_seen</code>, 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 <em>durata del silenziamento</em> per categoria e regole di stato, rimuovere voci orfane di risorse eliminate e cancellare <code>events</code> oltre 30 giorni. Le categorie sono in <link>Pannello → Health Monitor</link>."
|
||||
},
|
||||
"notifications": {
|
||||
@@ -264,9 +264,9 @@
|
||||
"intro": "La scheda <em>Terminale</em> collega un client leggero <code>xterm.js</code> a un PTY del server via WebSocket. Esistono due modalità:",
|
||||
"items": [
|
||||
"<strong>Modalità HTTP, predefinita:</strong> il server Flask integrato con <code>flask-sock</code> gestisce il passaggio al protocollo WebSocket.",
|
||||
"<strong>Modalità HTTPS / WSS:</strong> usa <code>gevent.pywsgi.WSGIServer</code> con <code>geventwebsocket.handler.WebSocketHandler</code> per WebSocket su TLS."
|
||||
"<strong>Modalità HTTPS / WSS:</strong> il server TLS usa <code>gevent.pywsgi.WSGIServer</code> con il suo gestore predefinito; <code>flask-sock</code> gestisce le connessioni WebSocket su TLS."
|
||||
],
|
||||
"outro": "I processi del terminale ereditano <code>User=root</code>. 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 <code>User=root</code> 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 <code>Upgrade</code> e <code>Connection</code>. Il terminale richiede questo inoltro."
|
||||
},
|
||||
"proxy": {
|
||||
|
||||
@@ -162,7 +162,7 @@
|
||||
}
|
||||
],
|
||||
"reportTitle": "Rapporto sulla latenza di rete (PDF)",
|
||||
"reportIntro": "Entrambe le modalità hanno un pulsante <strong>Rapporto</strong> 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 <strong>Rapporto</strong> 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)",
|
||||
|
||||
@@ -136,7 +136,7 @@
|
||||
"configCaption": "Modifica del jail sshd: riduci <em>Max Retries</em> se accedi a SSH solo dalla tua sottorete, oppure aumenta <em>Ban Time</em> per la dashboard esposta a Internet.",
|
||||
"outro": "La guida <em>Installazione, configurazione e disinstallazione</em> include anche l’installazione manuale, la modifica di SSH MaxAuthTries e il registro <code>proxmenux-auth.log</code>. Vedi <link>ProxMenux → Sicurezza → Fail2Ban</link>.",
|
||||
"calloutTitle": "Senza Fail2Ban, questo meccanismo non blocca gli IP",
|
||||
"calloutBody": "ProxMenux Monitor controlla gli IP bloccati da Fail2Ban a <em>livello applicativo</em> 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 <code>proxmenux-auth.log</code>, ma questo meccanismo non blocca gli IP."
|
||||
"calloutBody": "ProxMenux Monitor controlla gli IP bloccati nella jail <code>proxmenux</code> di Fail2Ban a <em>livello applicativo</em> prima di elaborare le richieste Flask, conservando il risultato in cache per 30 secondi. Senza Fail2Ban, gli accessi falliti sono registrati in <code>proxmenux-auth.log</code> 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",
|
||||
|
||||
@@ -76,7 +76,7 @@
|
||||
},
|
||||
"thresholds": {
|
||||
"heading": "Soglie di Health Monitor",
|
||||
"intro": "La scheda precedente imposta <em>il silenzio dopo aver ignorato un avviso</em>; questa regola <strong>il valore che attiva un avviso</strong>. La maggior parte dei controlli ha valori <strong>Avviso</strong> e <strong>Critico</strong> modificabili. La tabella spiega eccezioni come la regola combinata dello swap e il rilevatore RAM attuale.",
|
||||
"intro": "La scheda precedente imposta <em>il silenzio dopo aver ignorato un avviso</em>; questa regola <strong>il valore che attiva un avviso</strong>. La maggior parte dei controlli a soglia ha valori <strong>Avviso</strong> e <strong>Critico</strong> 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 <strong>dall’analisi successiva</strong>. Health Monitor legge <code>/usr/local/share/proxmenux/health_thresholds.json</code> 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 <strong>dall’analisi successiva</strong>. Health Monitor legge <code>/usr/local/share/proxmenux/health_thresholds.json</code> 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 <code>lxc_updates_available</code> per canale in <strong>Notifiche → Servizi</strong> 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 <code>type=lxc</code> da <code>/usr/local/share/proxmenux/managed_installs.json</code>. 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 <code>type=lxc</code> da <code>/usr/local/share/proxmenux/managed_installs.json</code>. 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",
|
||||
|
||||
@@ -70,7 +70,7 @@
|
||||
"items": [
|
||||
"<strong>Percorso del dispositivo</strong> — <code>/dev/sda</code>, <code>/dev/nvme0n1</code>.",
|
||||
"<strong>Etichetta del tipo</strong> — SATA / NVMe e relativa icona.",
|
||||
"<strong>Etichetta di sistema</strong> — indicatore arancione dei dischi identificati come dischi del sistema operativo. Il rilevamento usa i montaggi <code>/</code> e <code>/boot</code> e assegna <em>System</em>. L’assenza dell’etichetta non dimostra che il disco possa essere cancellato o riutilizzato senza rischi.",
|
||||
"<strong>Etichetta di sistema</strong> — indicatore arancione dei dischi usati dall’host: punti di montaggio di sistema (<code>/</code>, <code>/boot</code>, <code>/usr</code>, <code>/var</code>…), 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.",
|
||||
"<strong>Modello</strong> — produttore e modello da <code>smartctl -i</code>.",
|
||||
"<strong>Capacità</strong> — espressa in unità leggibili.",
|
||||
"<strong>Temperatura</strong> — 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": [
|
||||
"<strong>Sintesi</strong> — 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.",
|
||||
"<strong>Informazioni sul disco</strong> — 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 <code>smartctl</code> ed eliminazione.",
|
||||
"historyIntro": "Test brevi ed estesi completati e conservati per il disco. Ogni voce contiene l’output originale <code>smartctl</code> e i campi interpretati da Monitor per la dashboard. Azioni per riga:",
|
||||
"historyItems": [
|
||||
"<strong>Scarica</strong> — salva lo snapshot JSON con i dati <code>smartctl -a</code> usati dal rapporto. Utile se il supporto richiede i campi diagnostici originali.",
|
||||
"<strong>Scarica</strong> — salva lo snapshot JSON di quel test (output di <code>smartctl -a --json</code>, o <code>nvme smart-log</code> su NVMe quando smartctl fallisce). Utile se il supporto del produttore richiede i campi diagnostici originali.",
|
||||
"<strong>Elimina</strong> — rimuove manualmente un test dalla cronologia. La conservazione in Pianificazione (<em>ultimi 5 / 10 / 20</em>) elimina automaticamente i più vecchi."
|
||||
],
|
||||
"scheduleTitle": "Scheda 4 — Pianificazione",
|
||||
|
||||
@@ -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 <code>POST /api/vms/<vmid>/control</code> 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 <code>POST /api/vms/<vmid>/control</code>; 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 (<code>pvesh get /nodes/<node>/qemu/<id>/rrddata</code>) adattati alla visualizzazione in grafico."
|
||||
},
|
||||
{
|
||||
"section": "Risultati recenti del log Proxmox",
|
||||
"endpoint": "/api/vms/<vmid>/logs",
|
||||
"source": "<code>pvesh get /nodes/<node>/<qemu|lxc>/<vmid>/log --start 0 --limit 1000</code>. 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/<vmid>/console-log",
|
||||
"source": "Output della console del processo principale dell’immagine, letto da <code>/var/log/proxmenux/oci/<vmid>.console.log</code> sull’host. Mostrato solo per i container OCI."
|
||||
},
|
||||
{
|
||||
"section": "Backup disponibili per gli ospiti",
|
||||
|
||||
@@ -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 <em>Aggiorna ora</em> quando ci sono aggiornamenti. Avvia l’intera procedura ProxMenux; alla chiusura aggiorna lo stato con <code>?refresh=1</code> 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 <em>Aggiorna ora</em> quando ci sono aggiornamenti in attesa. Avvia l’intera procedura di aggiornamento ProxMenux nella finestra stessa; alla chiusura aggiorna lo stato con <code>?refresh=1</code>, 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 <em>Aggiornamenti di sistema: aggiornamenti disponibili</em> finché non aggiorni l’host. Non serve una notifica ogni cinque minuti. Il pulsante <em>Aggiorna ora</em> 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 <em>Aggiornamenti di sistema: aggiornamenti disponibili</em> finché non aggiorni l’host, e una notifica ogni cinque minuti per una settimana non serve. Il pulsante <em>Aggiorna ora</em> 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": "<strong>Silenziare un singolo evento</strong> nella finestra. Il menu offre <strong>24 ore</strong>, <strong>7 giorni</strong> o <strong>Permanentemente</strong>, indipendentemente dalla categoria. La scelta invia <code>POST /api/health/acknowledge</code> con <code>error_key</code> e <code>suppression_hours</code> (<code>-1</code> per permanente). L’evento passa tra i silenziati con data <code>acknowledged_at</code>.",
|
||||
"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 <em>Permanente</em> 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 <code>status</code>, <code>timestamp</code> e <code>version</code>. 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 <code>status</code>, <code>timestamp</code> e <code>version</code>. Adatto ai controlli per parola chiave Uptime Kuma; il client deve inviare un’intestazione Bearer."
|
||||
},
|
||||
{
|
||||
"endpoint": "/api/health/status",
|
||||
|
||||
@@ -52,7 +52,7 @@
|
||||
},
|
||||
{
|
||||
"name": "Terminale",
|
||||
"description": "Shell host e console VM/CT supportate nel browser tramite <code>xterm.js</code> 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 <code>xterm.js</code> 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 <code>/api/prometheus</code>. Le richieste possono usare <code>curl</code>.",
|
||||
"tokens": "I token API a lunga durata (365 giorni) vengono generati in <strong>Impostazioni → Token di accesso API</strong> o tramite <code>POST /api/auth/generate-api-token</code>.",
|
||||
"bearer": "Invia i token con <code>Authorization: Bearer …</code>. L’endpoint pubblico <code>/api/health</code> serve ai controlli di disponibilità senza credenziali. Sotto <code>/api/auth/*</code> ci sono rotte pubbliche di configurazione/login/stato e rotte protette per account e token; non sono tutte anonime.",
|
||||
"bearer": "Invia i token con <code>Authorization: Bearer …</code>. Anche <code>/api/health</code> richiede l’intestazione Bearer, quindi i controlli di disponibilità necessitano di un token read_only. Sotto <code>/api/auth/*</code> 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 <linkApi>Riferimento API</linkApi>; esempi per Homepage, Home Assistant, Grafana, Uptime Kuma e cURL sono in <linkIntegrations>Integrazioni</linkIntegrations>."
|
||||
},
|
||||
"serviceControl": {
|
||||
|
||||
@@ -220,7 +220,7 @@
|
||||
"heading": "n8n, Zapier e script personalizzati",
|
||||
"intro": "Workflow e script possono <em>inviare</em> notifiche con POST a <code>/api/notifications/send</code>, 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 <em>HTTP Request</em> con POST, URL sopra e lo stesso JSON di curl. Scegli credenziali generiche Header Auth: nome <em>Authorization</em> e valore <code>Bearer YOUR_API_TOKEN</code>, sostituendo il segnaposto. Collega una pianificazione, webhook o altro nodo per avviare la richiesta.",
|
||||
"severityBody": "La gravità usa <code>INFO</code>, <code>WARNING</code> o <code>CRITICAL</code> in maiuscolo. L’oggetto <code>data</code> 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 <link>Notifiche → Catalogo eventi</link>."
|
||||
"severityBody": "La gravità usa <code>INFO</code>, <code>WARNING</code> o <code>CRITICAL</code> in maiuscolo. L’oggetto <code>data</code> fornisce il contesto dell’evento e i campi del modello. Su questo endpoint la riscrittura IA riceve solo titolo e messaggio; i campi in <code>data</code> non vengono inviati al provider. Vedi <link>Notifiche → Catalogo eventi</link> per il significato degli eventi."
|
||||
},
|
||||
"pveWebhook": {
|
||||
"heading": "Webhook nativo Proxmox VE (in ingresso)",
|
||||
|
||||
@@ -171,7 +171,7 @@
|
||||
"Apri <a>account.microsoft.com/security</a> e attiva la verifica in due passaggi.",
|
||||
"Se disponibile, apri <em>Opzioni di sicurezza avanzate</em> → <em>Password per le app</em> → <em>Crea una nuova password per app</em>. 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: <em>Server</em> <code>smtp.office365.com</code> per Exchange Online, <em>Porta</em> <code>587</code>, <em>Modalità TLS</em> <code>STARTTLS</code>, <em>Nome utente</em> con l’indirizzo email e <em>Password</em> 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: <em>Host SMTP</em> <code>smtp.office365.com</code> per Exchange Online, <em>Porta</em> <code>587</code>, <em>Modalità TLS</em> <code>STARTTLS</code>, <em>Nome utente</em> con l’indirizzo della casella e <em>Password</em> 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": [
|
||||
"<strong>Attivazione per canale.</strong> Disattivato inizialmente. Attivalo solo sui canali dove desideri un riepilogo; gli altri mantengono gli invii immediati.",
|
||||
"<strong>Ora di invio</strong> nel fuso locale, inizialmente 09:00. Puoi cambiarla; il processo invia entro circa 60 secondi dal minuto impostato.",
|
||||
"<strong>Nel riepilogo:</strong> eventi generici idonei di livello <strong>INFO</strong>, come <em>aggiornamenti applicazioni</em>, <em>aggiornamenti Tailscale</em>, <em>aggiornamenti ottimizzazioni ProxMenux</em>, <em>aggiornamenti di sicurezza APT</em> e <em>avvisi di limite di frequenza</em>. Risultati backup e altre azioni escluse restano immediati.",
|
||||
"<strong>Nel riepilogo:</strong> eventi generici idonei di livello <strong>INFO</strong>. Ad esempio <em>aggiornamenti applicazioni</em>, <em>aggiornamenti Tailscale</em>, <em>aggiornamenti ottimizzazioni ProxMenux</em> e <em>aggiornamenti di sicurezza APT</em>. Risultati backup e altri eventi di azione esclusi restano immediati.",
|
||||
"<strong>Che cosa non è mai ritardato:</strong>",
|
||||
"<strong>Persistenza.</strong> Gli eventi restano in SQLite, nella tabella <code>digest_pending</code>, fino all’ora scelta e sopravvivono ai riavvii di Monitor.",
|
||||
"<strong>Nessun evento, nessun riepilogo.</strong> 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 <code>notification_last_sent</code>. Valori base: 86 400 s per <code>CRITICAL</code>, <code>WARNING</code>, <code>INFO</code>, <code>resources</code> e <code>updates</code>. 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 <code>cooldown.<event_type></code> o <code>cooldown.<group></code> sostituisce i valori predefiniti; nell’interfaccia non c’è alcun controllo."
|
||||
},
|
||||
{
|
||||
"stage": "Aggregazione eventi ravvicinati",
|
||||
@@ -330,7 +330,7 @@
|
||||
"<strong>Metodo e URL.</strong> <code>POST http://127.0.0.1:8008/api/notifications/webhook</code> senza HTTPS Monitor. Con HTTPS usa il listener HTTP locale separato sulla porta 8009. Entrambi restano sullo stesso host.",
|
||||
"<strong>Modello del corpo.</strong> Usa gli helper Handlebars di PVE. PVE lo salva codificato in base64; il contenuto JSON è:",
|
||||
"<strong>Matcher.</strong> Un compagno blocco <code>matcher: proxmenux-matcher</code> con <code>mode all</code> così ogni notifica PVE raggiunge l'obiettivo.",
|
||||
"<strong>Configurazione privata.</strong> Crea il blocco <code>webhook: proxmenux-webhook</code> in <code>/etc/pve/priv/notifications.cfg</code> con il segreto condiviso in base64. Il destinatario pubblico lo usa per X-Webhook-Secret. Il blocco non è vuoto."
|
||||
"<strong>Configurazione privata.</strong> La configurazione scrive il blocco corrispondente <code>webhook: proxmenux-webhook</code> in <code>/etc/pve/priv/notifications.cfg</code> con una voce <code>secret</code> 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 <code>POST /api/notifications/webhook</code> applica diversi livelli di sicurezza a seconda di dove proviene la richiesta:",
|
||||
|
||||
Reference in New Issue
Block a user