Eventos
O registro da estação sobre o que aconteceu: linhas do tempo persistentes de alarmes, ocorrências e intertravamentos ao lado do console de diagnóstico ao vivo, com busca, filtros e exportação CSV/JSON.
Eventos é a página que responde "o que aconteceu?". Ela fica no grupo do pé do trilho de navegação (Validação, Eventos, Agente, Configurações, Conta) e tem quatro abas: Alarmes, Ocorrências e Intertravamentos são linhas do tempo persistentes lidas do diário de eventos da estação, e Console é o feed de diagnóstico ao vivo em que todo subsistema escreve. O cabeçalho da página diz "Históricos persistentes de alarmes, ocorrências e intertravamentos, e o console de diagnóstico ao vivo."
Ver a página exige a permissão Ver eventos (área Sistema): tanto a entrada do trilho quanto o
endereço /events dependem dela. Todo papel de fábrica a tem por padrão, "Não conectado"
incluído, e o Admin sempre a tem; um papel criado em branco começa sem ela, e um administrador pode
removê-la de qualquer papel que não seja o de administrador. Exportar a partir de qualquer aba exige
Exportar/importar históricos além dela.
As abas e seus endereços
| Aba | O que lista | Endereço | Página |
|---|---|---|---|
| Alarmes | Os alarmes que aguardam agora, sobre a linha do tempo persistente das transições de estado de alarme | /events?view=alarms |
Alarmes |
| Ocorrências | Toda aresta de ocorrência observada durante uma execução ou pelo vigia do modo Sempre fora de execução | /events?view=occurrences |
Ocorrências |
| Intertravamentos | Toda transição da trava de intertravamento de uma unidade | /events?view=interlocks |
Intertravamentos |
| Console | As 500 entradas de diagnóstico mais recentes do programa em execução | /events?view=console |
Console |
A página abre em Alarmes. Clicar numa aba reescreve o endereço (substituindo-o, para que a faixa de
abas nunca encha a pilha de voltar do navegador), e um link que carrega view= cai naquela aba; um
valor que a página não conhece a deixa abrindo em Alarmes. É assim que o indicador de alarme da
barra de status (o sino com "N ativos (M sem reconhecimento)", desenhado apenas enquanto um alarme
está ativo ou aguardando reconhecimento) chega à lista de alarmes: ele navega para
/events?view=alarms, a tela onde o que ele conta é ao mesmo tempo lido e respondido, nunca a
página Logic, onde os alarmes são configurados.
O Console fica montado atrás das outras abas, então o estado de acompanhar o fim e a posição de rolagem sobrevivem a uma troca; cada uma das três linhas do tempo mantém a sua própria busca, o seu filtro, as suas linhas e a sua seleção enquanto você circula entre elas.
Quem pode ver e exportar
| Permissão | O que ela abre nesta página | Sem ela |
|---|---|---|
| Ver eventos | A entrada do trilho, o endereço e todas as abas | A entrada não é desenhada e o endereço é recusado |
| Exportar/importar históricos | Exportar em toda aba (CSV, JSON) e Criar pacote de suporte no Console | O botão Exportar não é desenhado; um acionamento que ainda assim chegue ao tratador responde "Exportar eventos exige a permissão Exportar/importar históricos." no feed de ações |
| Operar a lógica | Reconhecer e Reconhecer todos na aba Alarmes | Os verbos não são desenhados; as linhas continuam legíveis |
| Alterar configurações | Iniciar captura e Parar captura no Console | O botão não é desenhado; o estado da captura continua sendo anunciado aos leitores de tela |
As permissões são decididas por conexão, então um circuito de navegador autenticado como outro usuário vê o seu próprio conjunto de botões, e entrar, sair ou editar um papel os redesenha na hora. O catálogo está em Permissões.
Como as três linhas do tempo se comportam
As abas Alarmes, Ocorrências e Intertravamentos compartilham uma conduta só, de modo que trocar de aba nunca muda as regras:
| Comportamento | Detalhe |
|---|---|
| Janela | Cada aba lista 500 eventos por página, os que casam com a sua busca, o seu filtro e o período escolhido, do mais novo para o mais antigo (um empate no instante é desfeito pela ordem de inserção). Sob a lista, Mais recentes e Mais antigos percorrem o resto do diário, uma página de cada vez, e a faixa só é desenhada enquanto há outra página a alcançar. A página mais nova acompanha o diário ao vivo; uma página atrás dela fica parada, de modo que um evento que chega agora não empurra para baixo o que você está lendo. |
| Período | Duas caixas de data, De e Até, cada uma um extremo do período lido. Uma caixa vazia não é limite nenhum, então deixar as duas vazias lê o diário inteiro, e o dia escolhido como limite final entra inteiro, até o seu último instante. O xis ao lado delas limpa o par e devolve a aba à primeira página. |
| Busca | Uma caixa de texto cujo texto de exemplo nomeia as colunas em que ela casa (nome, mensagem, origem, modelo, unidade, procedimento, autor, conforme a aba). O casamento é "contém", sem diferenciar maiúsculas, aplicado 250 ms depois que você para de digitar; espaços no início e no fim são ignorados. |
| Filtro de nível | Uma lista por aba: Prioridade em Alarmes, Severidade em Ocorrências, Transição em Intertravamentos. Mudá-la relê o diário na hora. |
| Atualizar | O botão de seta circular relê o diário sob demanda; a sua dica nomeia a aba ("Atualizar eventos de alarme", "Atualizar ocorrências", "Atualizar eventos de intertravamento"). Ele fica cinza enquanto uma leitura corre. |
| Atualização ao vivo | Todo evento gravado no diário reconsulta a aba aberta sozinho, agrupado para que uma rajada custe uma leitura só (cerca de 200 ms depois da última gravação). Uma aba que você não está olhando é relida quando você volta a ela. |
| Seleção | Clicar numa linha abre o painel de detalhes à direita. A seleção é mantida entre atualizações pelo id do evento e descartada se a linha não estiver na página lida; o xis no cabeçalho do painel o fecha. |
| Copiar evento | O botão no pé do painel de detalhes copia o evento como uma linha de texto: instante completo, tipo, nível, nome, o resumo da transição, a mensagem e, para ocorrências e intertravamentos, as identidades. O feed de ações responde "Evento copiado para a área de transferência." ou "A área de transferência recusou a cópia." quando o navegador a negou. |
| Exportar | Exportar abre um menu com Exportar como CSV… e Exportar como JSON… para todo evento que a busca, o filtro e o período alcançam, página após página, e não só as linhas desenhadas. O botão fica cinza enquanto a página está vazia. |
| Registro sem filtro | O diário não é filtrado por quem está autenticado nem pelo que aquele papel pode ver em outro lugar: ele é o registro técnico da estação, e uma linha faltando em silêncio faria o histórico mentir. |
A lista e o painel de detalhes
Toda linha carrega a data e a hora do evento no formato configurado em Idioma e formatos, um ponto no tom do seu nível, o nome do evento, um resumo de uma linha da transição e, na borda direita, a palavra do próprio nível (a prioridade, a severidade ou a transição). Os tons seguem uma escala só em toda superfície: o tom crítico para um alarme Crítico, uma ocorrência Crítica ou o disparo de um intertravamento; o tom de cautela para Alta, Alerta e "Origem segura"; o tom de atenção para Média; neutro para o resto.
O painel de detalhes abre com o distintivo do nível e o nome, depois o instante completo com milissegundos, o resumo da transição, a mensagem (ou "Nenhuma mensagem capturada." quando a definição não tinha nenhuma), um cartão EVENTO com Nível e ID do evento, e um ou mais cartões de snapshot cujos campos a página de cada aba lista.
A linha de status
Sob toda linha do tempo: "N mostrados · página 1", em que N conta as linhas da página aberta, seguido de " · filtrado" enquanto uma busca, um filtro de nível ou um período está em vigor; "N mostrados · atualizando…" durante uma releitura; à direita, "1 selecionado" enquanto uma linha está selecionada e "Atualizado hh:mm:ss", a hora da última leitura bem-sucedida.
Estados de carga, vazio e falha
| Estado | O que a aba mostra |
|---|---|
| Primeira leitura | "Carregando eventos de alarme…" com "Lendo do diário persistente os eventos de alarme mais recentes que casam." (o substantivo acompanha a aba). |
| Nada gravado | "Nenhum evento de alarme ainda" com uma frase dizendo o que vai aparecer ali; a página de cada aba cita a sua. |
| Nada casa | "Nenhum evento de alarme casa com estes filtros" com "Ajuste a prioridade ou os termos de busca para ampliar este histórico." (prioridade, severidade ou transição, conforme a aba). |
| O diário não pode ser lido | "Não foi possível carregar os alarmes" com "O diário persistente está temporariamente indisponível. Os registros do Console não são afetados." e um botão Tentar de novo; a linha de status diz "Alarmes indisponíveis". |
| Uma atualização posterior falha | As últimas linhas boas continuam na tela e o feed de ações informa "Falha ao atualizar os alarmes." |
Exportar uma linha do tempo
Os dois formatos são downloads do navegador, então funcionam igualmente na janela da própria estação
e num navegador remoto; o feed de ações responde "Exportado(s) N evento(s) para" seguido do nome do
arquivo, ou "Falha na exportação.". O
nome do arquivo carrega a aba e um carimbo ordenável: alarm-history-20260902-143000.csv,
occurrence-history-<stamp>.json, interlock-history-<stamp>.csv.
Todo instante é escrito no formato de exibição configurado, e o arquivo declara a referência de
tempo uma vez: o CSV a nomeia no cabeçalho da sua primeira coluna, "Timestamp (UTC-03:00)" (ou
"Timestamp (UTC)"), e o JSON é um envelope com um campo TimeZone no topo, ao lado de um vetor
Events. Além do que a linha mostra, as colunas carregam o snapshot congelado inteiro, identidades
incluídas (o id do evento, os ids do alarme, da ocorrência ou da observação, os ids do modelo e da
unidade), de modo que uma linha do tempo exportada pode ser correlacionada com arquivos de execução
e relatórios. Uma célula de CSV que começa com =, +, - ou @ recebe um apóstrofo na frente
para que a planilha a abra como texto e não como fórmula. A página de cada aba lista as suas
colunas.
O que o diário guarda
As três linhas do tempo vivem em events.db, um banco só delas na pasta de dados da estação, ao
lado de config.db e history-index.db, com uma tabela somente de acréscimo por linha do tempo. O
que é escrito é um snapshot tirado no instante do evento (nomes, prioridade, mensagem, modelo,
unidade, origem, o valor observado), então renomear, editar ou excluir a definição depois nunca
reescreve o que a estação lhe disse na hora. Nada nesta página, nem em qualquer outro lugar da
aplicação, exclui uma linha: a retenção guarda as 100.000 linhas mais recentes por linha do
tempo, podando as mais antigas pela ordem de inserção a cada acréscimo, de modo que um relógio
corrigido não possa despejar um evento novo.
O diário sobrevive a um reinício e à restauração de uma configuração: um backup copia apenas o banco de configuração e a pasta de ativos, então restaurá-lo não leva o diário junto nem o faz voltar no tempo. Ele é um registro de transições, não de estado: depois de um reinício o registro de alarmes rededuz todo alarme a partir da primeira varredura, os reconhecimentos que estavam pendentes se perdem, e a linha do tempo simplesmente mostra o que aconteceu antes e depois.
Os eventos chegam ao diário por uma fila ordenada que nunca bloqueia o runtime: o produtor tira o
snapshot na hora, um único escritor grava na ordem de chegada, e uma gravação que continua falhando
é repetida até dez vezes antes de o evento ser descartado com uma linha de Error no Console. Uma
ocorrência observada durante uma execução é escrita primeiro no arquivo daquela execução (a
fonte que Históricos e relatórios leem) e depois copiada para o diário com o mesmo id de evento e o
contexto da execução; uma observação feita fora de execução por uma ocorrência do modo Sempre vai apenas
para o diário. Transições de intertravamento e de alarme não têm registro nenhum além do diário. Um
agente com a área Logs aberta lê esse mesmo diário por event_history_read, somente leitura (veja
Áreas permitidas).
O console ao lado do registro
O Console é coisa diferente das três linhas do tempo: uma visão rotativa de 500 entradas do fluxo de diagnóstico do programa, em memória, perdida no reinício e esvaziada por Limpar a visão. Os dois se sobrepõem onde o runtime narra o que está fazendo. Uma aresta de ocorrência deixa uma linha no Console sob a área Process (uma ativação no nível da sua severidade: Crítica como erro, Alerta como alerta, Informação como informação), e uma transição de intertravamento também (um disparo como alerta, uma origem segura e um rearme como informação). Transições de alarme não aparecem no Console: o rastro do avaliador é detalhe de diagnóstico que só uma captura detalhada grava. As linhas do tempo são o registro tipado; o Console explica o runtime em volta dele.
O que Eventos não faz
- Ele não configura nada. Alarmes são definidos em Logic > Alarmes, ocorrências em Process > Preparação > Ocorrências e o intertravamento de parada em Process > Definição > Automação.
- Ele não rearma intertravamento nenhum: isso é o componente Intertravamento de um dashboard ou a própria visão da unidade.
- Ele não tem filtro por unidade ou por execução: busque pelo nome, ou abra a execução em Históricos para ver o registro de ocorrências dela.
- Ele não exclui nada e não edita nada; só a retenção remove linhas.
- Enquanto o runtime está parado esta página não é desenhada de jeito nenhum: toda tela exceto Conta é substituída pelo aviso de pausa, as linhas do tempo inclusive. O diário em si fica intocado e é lido exatamente como antes assim que o runtime é reiniciado.