Console

Il flusso di diagnostica in tempo reale del programma in esecuzione: 500 voci in memoria, cercate e filtrate per livello, area e componente, con una cattura dettagliata e un pacchetto di supporto per la ricerca dei guasti.

Visualizza come Markdown

La scheda Console di Eventi (/events?view=console) è il flusso di diagnostica di tutto il programma: ogni sottosistema (l'applicazione, il server OPC UA incorporato, i driver, Logic, Process, le dashboard, l'accesso agente e le licenze) scrive in un unico flusso, e Console ne mostra dal vivo le 500 voci più recenti. È l'ultima scheda perché è il dettaglio tecnico che si legge per ultimo, dopo le cronologie tipizzate. Vederla richiede Visualizzare gli eventi; esportare righe o creare un pacchetto di supporto richiede Esportare/importare gli storici; avviare o arrestare una cattura dettagliata richiede Modificare le impostazioni.

Il flusso e il suo buffer

Console è una proiezione dell'unico flusso di diagnostica del processo, tenuto in memoria: le 500 voci più recenti, condivise da ogni superficie che lo mostra (la finestra propria della stazione, ogni browser remoto, ogni scheda). Le voci più vecchie escono man mano che ne arrivano di nuove; niente in questa scheda sopravvive a un riavvio. Lo stesso flusso è scritto in un file giornaliero a rotazione, logs\ganter-lab-<date>.log nella cartella dati della stazione (30 giorni conservati, 50 MB per file), ed è ciò che un pacchetto di supporto raccoglie.

Ogni voce è ripulita prima di raggiungere Console o il file: password, token, chiavi e credenziali dentro gli URL sono sostituite da "[REDACTED]", i payload di protocollo (byte grezzi, documenti JSON o XML) da "[PROTOCOL PAYLOAD OMITTED]", un messaggio è tagliato a 16 KB e un'eccezione a 64 KB con "…[TRUNCATED]". Nel flusso entrano soltanto le voci di livello Informazione e superiore; il dettaglio verboso, e le voci che un produttore marca come dettaglio diagnostico (chiacchiera di protocollo grezza e ripetitiva), raggiungono soltanto un file di cattura dettagliata. I guasti di comunicazione che si ripetono sono raggruppati dal loro produttore in una riga di primo guasto, in riepiloghi periodici e in una riga di ripristino, così un dispositivo rotto non inonda l'elenco.

Una voce

Ogni riga mostra l'ora del giorno, un punto per il livello (neutro per Info, cautela per Avviso, critico per Errore), "Area · Componente" e il messaggio. Il pulsante Copia riga sul bordo destro di una riga copia "istante completo [Gravità] Area · Componente messaggio" e il registro delle azioni risponde "Riga copiata negli appunti." (oppure "Gli appunti hanno rifiutato la copia." su un browser che nega gli appunti). Un clic sulla riga la seleziona e apre il pannello di dettaglio.

La casella "Cerca nei messaggi e in tutto il contesto disponibile" filtra mentre si digita, senza ritardo. Una riga corrisponde quando il testo è contenuto (senza distinzione fra maiuscole e minuscole) in uno qualsiasi di questi: il messaggio, l'area, il componente, il logger, il dispositivo, il tag, l'operazione, il client, la sessione, l'unità, la procedura, l'id della prova o il testo di dettaglio (un'eccezione e la sua traccia dello stack).

Le pastiglie di livello

Tre pastiglie, Info, Avviso ed Errore, ciascuna un interruttore con un punto nel tono del livello e un conteggio dal vivo. Una pastiglia accesa mostra il proprio livello; premila per nascondere quel livello. Il conteggio è quante voci la pastiglia rivelerebbe con la ricerca, l'area e il componente attuali: rispetta quei tre filtri e ignora gli interruttori di livello stessi, così un livello nascosto dichiara comunque che cosa contiene. Tutte e tre nascono accese.

Non c'è una pastiglia Debug: le voci sotto Informazione non entrano mai nel flusso, quindi una pastiglia per loro potrebbe soltanto dire 0 e non nasconderebbe nulla. Il dettaglio verboso si trova invece in un file di cattura dettagliata.

Gli elenchi Area e Componente

Elenco Valori Che cosa fa
Area Tutte le aree (predefinito), poi uno per sottosistema: App, Server, Connector, Logic, Process, Dashboard, Agente, Licenze Tiene le voci di un solo sottosistema.
Componente Tutti i componenti (predefinito), poi ogni componente presente nel buffer per l'area selezionata, in ordine alfabetico Tiene le voci di un solo produttore concreto dentro l'area (un driver, un lavoratore, l'SDK OPC UA).
Area Che cosa vi scrive
App Ciclo di vita dell'applicazione: l'ospite desktop, la registrazione, la gestione degli arresti anomali e degli aggiornamenti, i guasti propri del diario degli eventi e tutto ciò che non ha nominato altre aree.
Server Il server OPC UA incorporato e il suo SDK.
Connector Comunicazione con i dispositivi: il connettore, i driver, le letture e le scritture dei tag.
Logic Variabili, azioni, attivatori, allarmi e l'unico punto di scrittura.
Process Modelli, ricette, valutazioni, occorrenze, il sorvegliante dell'interblocco e il ciclo di vita delle prove.
Dashboard I comandi premuti sulle dashboard e l'ospite web incorporato che le serve.
Agente Che cosa ha fatto un agente di intelligenza artificiale attraverso MCP.
Licenze La licenza della stazione e il limitatore del runtime senza licenza.

Il componente scelto resta nell'elenco anche dopo che ogni voce che lo portava è uscita dal buffer, così un filtro impostato per sorvegliare un solo driver non viene allargato in silenzio a ogni componente; un elenco vuoto è allora la risposta onesta. Cambiare l'area ricostruisce l'elenco dei componenti per quell'area.

Inseguire la coda

Con Insegui la coda (scorrimento automatico) acceso (il valore predefinito), l'elenco resta attaccato alla voce più recente mentre il flusso cresce. Scorrere verso l'alto lo spegne, così si può leggere qualcosa mentre le voci continuano ad arrivare; tornare a meno di 24 pixel dal fondo lo riaccende. Mentre è spento, una pastiglia "N nuove voci" (oppure "1 nuova voce") conta gli arrivi che corrispondono ai filtri attuali; premila, o premi il pulsante della barra dei comandi, per tornare alla coda. Passare a un'altra scheda e tornare conserva lo stato di inseguimento, e salta alla coda se era acceso.

La barra dei comandi

Comando Che cosa fa In grigio quando Non disegnato quando
Avvia la cattura / Interrompi la cattura Avvia una cattura diagnostica dettagliata per un massimo di 15 minuti, oppure interrompe quella in corso (vedi sotto). Mentre l'interruttore viene applicato Il ruolo non ha Modificare le impostazioni
Apri in una finestra Apre la pagina Eventi in una nuova scheda o finestra del browser, tanto sulla finestra propria della stazione quanto su un browser remoto, così il flusso si può tenere su un secondo monitor. La nuova finestra si apre sulla scheda Console, quella su cui il pulsante sta. Un browser che blocca i pop-up non apre nulla e il registro delle azioni lo dice: "Il browser non ha aperto una seconda finestra. Consenti i pop-up per questa stazione e riprova."
A capo automatico Manda a capo i messaggi lunghi su più righe invece di tagliarli.
Insegui la coda (scorrimento automatico) Accende l'inseguimento (saltando alla coda e azzerando il conteggio delle nuove voci) oppure lo spegne.
Svuota la vista Svuota il flusso in memoria su ogni superficie in una volta: la finestra della stazione, ogni browser remoto e ogni scheda vedono lo stesso elenco vuoto. Il registro delle azioni risponde "Vista della Console svuotata per tutta la stazione." I file di log a rotazione, i file di cattura e il diario degli eventi restano intatti. Il runtime è fermo: il pulsante è in grigio e il suo suggerimento dice che la stazione non accetta alcuna modifica in questo momento Il ruolo non ha Modificare le impostazioni
Esporta Apre il menu: Esporta in CSV…, Esporta in JSON… e, dopo un separatore, Crea pacchetto di supporto…. Crea pacchetto di supporto è in grigio mentre uno è in costruzione Il ruolo non ha Esportare/importare gli storici

Cattura dettagliata

Avvia la cattura porta l'intero processo alla registrazione verbosa per un massimo di quindici minuti e scrive tutto, dettaglio verboso e chiacchiera di protocollo compresi, in un file di cattura tutto suo: logs\diagnostic-captures\ganter-temporary-diagnostic-<stamp>-<id>.log nella cartella dati della stazione (una sessione ruota a 25 MB conservando due file; si tengono le dieci sessioni più recenti). Il flusso di 500 voci e il normale file a rotazione restano esattamente come erano: niente di più li raggiunge.

Il pulsante allora dice Interrompi la cattura; il suo suggerimento dice "Interrompe in anticipo la cattura diagnostica dettagliata. Avviata hh:mm:ss." La cattura si interrompe da sé quando il conto alla rovescia arriva a zero, quando si preme il pulsante o quando l'applicazione si chiude. I due estremi sono annunciati nel registro delle azioni ("Cattura dettagliata avviata per un massimo di 15 minuti.", "Cattura dettagliata interrotta.") e lasciano righe in Console sotto App · Cattura diagnostica.

La cattura è un interruttore di tutta la stazione: ogni circuito vede lo stesso conto alla rovescia, ed essa sopravvive alla finestra che l'ha premuta. Per questo richiede Modificare le impostazioni: a un ruolo che non lo ha il pulsante non viene disegnato, e una pressione che raggiunga comunque il gestore risponde "Per avviare o interrompere la cattura dettagliata serve il permesso Modificare le impostazioni." Quello che la cattura sta facendo non sta sotto alcun permesso: mentre registra, una lettura accanto al pulsante porta un punto di registrazione, "Cattura dettagliata attiva" e il tempo che le resta (mm:ss, da 15:00), e ogni ruolo la legge. Quando non registra nulla, quella stessa lettura resta ai soli lettori di schermo, che dicono "Cattura dettagliata non attiva".

Crea pacchetto di supporto

L'ultima voce del menu Esporta costruisce uno zip da consegnare all'assistenza e lo scarica attraverso il browser; il registro delle azioni risponde "Pacchetto di supporto creato:" seguito dal nome del file (ganter-support-<stamp>-<id>.zip), oppure "Creazione del pacchetto di supporto non riuscita:" seguita dal motivo. Richiede Esportare/importare gli storici come ogni esportazione. Il pacchetto contiene:

Voce Contenuto
recent-console.json Le voci del flusso in memoria come record strutturati (ogni campo di ogni voce, non la vista filtrata).
logs/ganter-lab-*.log I normali file di log a rotazione.
diagnostic-captures/ganter-temporary-diagnostic-*.log I file di cattura dettagliata.
manifest.json Quando è stato generato, lo stato della cattura (attiva, avviata, fine, arrestata, nome del file), quante voci del flusso sono state incluse, i limiti, l'elenco dei file inclusi con le loro dimensioni e ogni omissione con il suo motivo.

I file sono presi dal più recente entro un limite: al massimo 8 file, al massimo 24 MB per file e 96 MB in totale; un file più grande della sua quota è incluso solo per la coda (i suoi byte più recenti) e il manifesto lo dice. Lo zip è costruito nella cartella temporanea del sistema ed è eliminato una volta servito lo scaricamento.

Il pannello di dettaglio

Selezionare una voce apre il pannello con il distintivo della gravità, "Area · Componente" e una croce di chiusura, poi:

Sezione Campo Contenuto
Testata Istante Data e ora complete con i millisecondi.
Testata Messaggio Il messaggio su una riga.
CONTESTO Area Il sottosistema.
CONTESTO Componente Il produttore concreto.
CONTESTO Logger La categoria di logger dietro alla voce, mostrata quando è nota.
CONTESTO Livello Debug, Informazione, Avviso o Errore.
CONTESTO Dispositivo, Tag, Operazione, Client, Sessione, Unità, Procedura, Prova Ciascuno mostrato solo quando la voce lo porta: il dispositivo e il tag a cui si riferisce una riga del connettore, l'operazione in esame (una lettura, una scrittura, una connessione), il client e la sessione OPC o di protocollo, e l'unità, la procedura e l'id della prova di Process.
DETTAGLI Il testo dell'eccezione e la traccia dello stack, quando la voce ne portava una.

Copia voce in fondo copia l'intero pannello come testo (la riga di intestazione, il messaggio, una riga "Etichetta: valore" per campo di contesto, poi il blocco di dettaglio) e risponde "Voce copiata negli appunti." La selezione è abbandonata se la voce esce dal buffer, ed è azzerata da Svuota la vista.

Esportazione

Esporta in CSV… ed Esporta in JSON… scrivono le righe attualmente visibili (la vista filtrata) come scaricamento del browser di nome app-logs-<yyyyMMdd-HHmmss>.csv o .json; il registro delle azioni risponde "Esportate N riga/righe in" seguito dal nome del file. I due portano le stesse colonne, in questo ordine: Timestamp (intestata "Timestamp (UTC-03:00)" nel CSV, il riferimento temporale dichiarato una volta sola), Severity, Area, Component, Logger, Device, Tag, Operation, Client, Session, Unit, Procedure, RunId, Message ed Exception. Il JSON è una busta, { "TimeZone": "...", "Entries": [ ... ] }. Una cella CSV che comincia con =, +, - o @ è preceduta da un apostrofo perché un foglio di calcolo la legga come testo.

La riga di stato

"N mostrate · M nel buffer", poi " · filtrate" mentre una ricerca, un'area, un componente o un filtro di livello è in vigore; a destra, "1 selezionata" mentre una voce è selezionata e "Aggiornato hh:mm:ss", l'ora dell'ultima voce arrivata. Quando niente corrisponde, l'elenco dice "Nessuna voce corrisponde ai filtri attuali. Modifica il livello, l'area, il componente o la ricerca per vederne di più."

Che cosa Console non fa

  • Non è una registrazione: tiene 500 voci in memoria, le perde al riavvio, e Svuota la vista la azzera per tutti. La registrazione duratura sono le tre cronologie e, su disco, i file di log a rotazione.
  • Non mostra nulla sotto Informazione, e mai il dettaglio di protocollo; a quello serve una cattura dettagliata.
  • Svuota la vista non elimina alcun file né alcuna riga del diario, è rifiutato mentre il runtime è fermo, ed è disegnato solo per un ruolo che può modificare le impostazioni, come Esporta e Avvia la cattura che gli stanno accanto.
  • La cattura dettagliata non si può allungare oltre i quindici minuti; avviane un'altra.
  • L'esportazione scrive ciò che è visibile, mai i file su disco; il pacchetto di supporto è il modo in cui i file lasciano la stazione.
  • Un agente con l'area Logs aperta legge lo stesso flusso attraverso logs_read (vedi Strumenti); non lo può svuotare.