Événements

Le registre de la station sur ce qui est arrivé : chronologies durables des alarmes, des occurrences et des verrouillages, à côté de la console de diagnostic en direct, avec recherche, filtres et export CSV/JSON.

Afficher en Markdown

Événements est la page qui répond à « qu'est-ce qui est arrivé? ». Elle occupe le groupe du bas de la barre de navigation (Vérification, Événements, Accès agent, Paramètres, Compte) et porte quatre onglets : Alarmes, Occurrences Process et Verrouillages sont des chronologies durables lues dans le journal d'événements de la station, et Console est le flux de diagnostic en direct où écrit chaque sous-système. L'en-tête de la page indique « Historiques persistants des alarmes, des occurrences et des verrouillages, et console de diagnostic en direct. »

Voir la page demande la permission Voir les événements (domaine Système) : l'entrée de la barre de navigation comme l'adresse /events s'y contrôlent. Chaque rôle d'usine la détient par défaut, « Non connecté » compris, et Admin la détient toujours; un rôle créé vide commence sans elle, et un administrateur peut la retirer de tout rôle autre qu'Admin. Exporter à partir d'un onglet demande en plus Exporter/importer les historiques.

Les onglets et leurs adresses

Onglet Ce qu'il liste Adresse Page
Alarmes Les alarmes qui attendent maintenant, au-dessus de la chronologie durable des changements d'état des alarmes /events?view=alarms Alarmes
Occurrences Process Chaque front d'occurrence observé pendant un essai ou par le surveillant Toujours, hors essai /events?view=occurrences Occurrences
Verrouillages Chaque changement de l'état mémorisé du verrouillage d'arrêt d'une unité /events?view=interlocks Verrouillages
Console technique Les 500 dernières entrées de diagnostic du programme en cours /events?view=console Console

La page s'ouvre sur Alarmes. Cliquer sur un onglet réécrit l'adresse (il la remplace, donc la bande d'onglets ne remplit jamais la pile de retour du navigateur), et un lien qui porte view= arrive sur cet onglet; une valeur que la page ne connaît pas la laisse s'ouvrir sur Alarmes. C'est ainsi que l'indicateur d'alarmes de la barre d'état (la cloche avec « N actives (M non acquittées) », dessinée seulement pendant qu'une alarme est active ou attend un acquittement) atteint la liste des alarmes : il navigue vers /events?view=alarms, l'écran où ce qu'il compte se lit et se traite à la fois, jamais la page Logic où les alarmes se configurent.

Console demeure montée derrière les autres onglets, donc son suivi de la fin et sa position de défilement survivent à un changement d'onglet; chacune des trois chronologies conserve sa propre recherche, son filtre, ses lignes et sa sélection pendant que vous passez de l'une à l'autre.

Qui peut voir et exporter

Permission Ce qu'elle ouvre sur cette page Sans elle
Voir les événements L'entrée de la barre de navigation, l'adresse et tous les onglets L'entrée n'est pas dessinée et l'adresse est refusée
Exporter/importer les historiques Exporter sur chaque onglet (CSV, JSON) et Créer une trousse de soutien technique sur Console Le bouton Exporter n'est pas dessiné; un appui qui atteindrait tout de même le traitement répond « Exporter des événements demande la permission Exporter/importer les historiques. » dans le journal des actions
Piloter Logic Acquitter et Tout acquitter sur l'onglet Alarmes Les verbes ne sont pas dessinés; les lignes demeurent lisibles
Modifier les paramètres Démarrer la capture et Arrêter la capture sur Console Le bouton n'est pas dessiné; l'état de la capture est tout de même annoncé aux lecteurs d'écran

Les permissions sont décidées par connexion, donc un circuit de navigateur ouvert sous un autre utilisateur voit son propre jeu de boutons, et une ouverture de session, une fermeture de session ou une modification de rôle les redessine aussitôt. Le catalogue se trouve sur Permissions.

Comment se comportent les trois chronologies

Les onglets Alarmes, Occurrences et Verrouillages partagent une seule conduite, donc changer d'onglet ne change jamais les règles :

Comportement Détail
Fenêtre Chaque onglet liste 500 événements par page, ceux qui correspondent à sa recherche, à son filtre et à la période choisie, du plus récent au plus ancien (une égalité d'horodatage est tranchée par l'ordre d'insertion). Sous la liste, Plus récents et Plus anciens parcourent le reste du journal page par page, et la bande n'est dessinée que tant qu'une autre page reste à atteindre. La page la plus récente suit le journal en direct; une page située derrière elle reste immobile, de sorte qu'un événement qui arrive maintenant ne pousse pas vers le bas ce que vous lisez.
Période Deux champs de date, Du et Au, chacun une extrémité de la période lue. Un champ vide n'est aucune borne : les deux vides, l'onglet lit tout le journal, et le jour choisi comme borne de fin est compté en entier, jusqu'à son dernier instant. La croix à côté efface la paire et ramène l'onglet à la première page.
Recherche Un champ de texte dont le texte d'exemple nomme les colonnes qu'il compare (nom, message, source, modèle, unité, procédure, auteur, selon l'onglet). La comparaison est « contient », sans distinction de casse, appliquée 250 ms après que vous cessez de taper; les espaces de tête et de fin sont ignorés.
Filtre de niveau Une liste par onglet : Priorité sur Alarmes, Gravité sur Occurrences, Type de transition sur Verrouillages. La modifier relit le journal aussitôt.
Actualiser Le bouton à la flèche circulaire relit le journal à la demande; son infobulle nomme l'onglet (« Actualiser les événements d'alarme », « Actualiser les occurrences », « Actualiser les événements de verrouillage »). Il est grisé pendant qu'une lecture est en cours.
Actualisation en direct Chaque événement inscrit dans le journal interroge de nouveau l'onglet ouvert de lui-même, avec un regroupement qui fait qu'une rafale coûte une seule lecture (environ 200 ms après la dernière inscription). Un onglet que vous ne regardez pas est relu quand vous y revenez.
Sélection Cliquer sur une ligne ouvre le volet de détail à droite. La sélection est conservée d'une actualisation à l'autre par l'identifiant de l'événement, et abandonnée si la ligne n'est pas sur la page lue; la croix dans l'en-tête du volet le referme.
Copier l'événement Le bouton au pied du volet de détail copie l'événement en une seule ligne de texte : horodatage complet, genre, niveau, nom, résumé de la transition, message et, pour les occurrences et les verrouillages, les identités. Le journal des actions répond « Événement copié dans le presse-papiers. », ou « Le presse-papiers a refusé la copie. » quand le navigateur l'a retenue.
Exporter Exporter ouvre un menu avec Exporter en CSV… et Exporter en JSON… pour chaque événement que la recherche, le filtre et la période atteignent, page après page, et pas seulement les lignes dessinées. Le bouton est grisé tant que la page est vide.
Registre non filtré Le journal n'est filtré ni par la personne dont la session est ouverte ni par ce que son rôle peut voir ailleurs : c'est le registre technique de la station, et une ligne silencieusement absente ferait mentir l'historique.

La liste et le volet de détail

Chaque ligne porte la date et l'heure de l'événement au format configuré sous Localisation, un point dans la teinte de son niveau, le nom de l'événement, un résumé d'une ligne de la transition et, sur le bord droit, le mot propre au niveau (la priorité, la gravité ou la transition). Les teintes suivent une seule échelle sur toutes les surfaces : la teinte critique pour une alarme Critique, une occurrence Critique ou un déclenchement de verrouillage; la teinte de prudence pour Haute, Avertissement et « Source saine »; la teinte d'attention pour Moyenne; neutre pour le reste.

Le volet de détail s'ouvre sur le badge de niveau et le nom, puis l'horodatage complet avec les millisecondes, le résumé de la transition, le message (ou « Aucun message capturé. » quand la définition n'en avait pas), une carte ÉVÉNEMENT avec Niveau et ID d'événement, et une ou plusieurs cartes d'instantané dont la page de chaque onglet liste les champs.

La ligne d'état

Sous chaque chronologie : « N affichés · page 1 », où N compte les lignes de la page ouverte, suivi de « · filtrées » tant qu'une recherche, un filtre de niveau ou une période est en vigueur; « N affichés · actualisation… » pendant une relecture; à droite, « 1 sélectionnée » tant qu'une ligne est sélectionnée et « Mise à jour hh:mm:ss », l'heure de la dernière lecture réussie.

États de chargement, de vide et d'échec

État Ce que l'onglet montre
Première lecture « Chargement des événements d'alarme… » avec « Lecture, dans le journal persistant, des événements d'alarme les plus récents qui correspondent. » (le nom suit l'onglet).
Rien d'enregistré « Rien encore dans les événements d'alarme » avec une ligne disant ce qui apparaîtra là; la page de chaque onglet cite la sienne.
Rien ne correspond « Rien dans les événements d'alarme ne correspond à ces filtres » avec « Ajustez la priorité ou les termes de recherche pour élargir cet historique. » (la priorité, la gravité ou le type de transition, selon l'onglet).
Le journal ne peut pas être lu « Chargement impossible : événements d'alarme » avec « Le journal persistant est momentanément indisponible. Les journaux de la console ne sont pas touchés. » et un bouton Réessayer; la ligne d'état indique « événements d'alarme indisponibles ».
Une actualisation ultérieure échoue Les dernières lignes valides demeurent à l'écran et le journal des actions signale « Échec de l'actualisation des événements d'alarme. »

Exporter une chronologie

Les deux formats sont des téléchargements du navigateur, donc ils fonctionnent aussi bien dans la fenêtre de la station que dans un navigateur distant; le journal des actions répond « N événement(s) exporté(s) vers » suivi du nom du fichier, ou « Échec de l'export. ». Le nom du fichier porte l'onglet et un horodatage triable : alarm-history-20260902-143000.csv, occurrence-history-<stamp>.json, interlock-history-<stamp>.csv.

Chaque instant est écrit au format d'affichage configuré, et le fichier déclare la référence de temps une seule fois : le CSV la nomme dans l'en-tête de sa première colonne, « Timestamp (UTC-03:00) » (ou « Timestamp (UTC) »), et le JSON est une enveloppe avec un champ TimeZone de premier niveau à côté d'un tableau Events. Au-delà de ce que la ligne montre, les colonnes portent l'instantané figé complet, identités comprises (l'identifiant de l'événement, ceux de l'alarme, de l'occurrence ou de l'observation, ceux du modèle et de l'unité), afin qu'une chronologie exportée puisse être recoupée avec les fichiers d'essai et les rapports. Une cellule CSV qui commence par =, +, - ou @ est préfixée d'une apostrophe pour qu'un tableur l'ouvre comme du texte et non comme une formule. La page de chaque onglet liste ses colonnes.

Ce que le journal conserve

Les trois chronologies vivent dans events.db, une base à part dans le dossier de données de la station, à côté de config.db et de history-index.db, avec une table en ajout seul par chronologie. Ce qui est écrit est un instantané pris à l'instant de l'événement (noms, priorité, message, modèle, unité, source, la valeur observée), donc renommer, modifier ou supprimer la définition par la suite ne réécrit jamais ce que la station vous a dit sur le coup. Rien sur cette page, ni ailleurs dans l'application, ne supprime une ligne : la conservation garde les 100 000 lignes les plus récentes par chronologie, en élaguant les plus anciennes par ordre d'insertion à chaque ajout, de sorte qu'une horloge corrigée ne puisse pas évincer un événement frais.

Le journal survit à un redémarrage et à une restauration de configuration : une sauvegarde copie seulement la base de configuration et le dossier des ressources, donc en restaurer une n'emporte pas le journal avec elle et ne le ramène pas en arrière. C'est un registre de transitions, pas d'états : après un redémarrage, le registre des alarmes redérive chaque alarme dès le premier cycle, les acquittements qui étaient en attente sont perdus, et la chronologie montre simplement ce qui est arrivé avant et après.

Les événements atteignent le journal par une file ordonnée qui ne bloque jamais le runtime : le producteur prend l'instantané immédiatement, un rédacteur unique valide dans l'ordre d'arrivée, et une écriture qui échoue sans cesse est retentée jusqu'à dix fois avant que l'événement soit abandonné avec une ligne Error dans Console. Une occurrence observée pendant un essai est d'abord écrite dans le fichier de cet essai (la source que lisent les historiques et les rapports) puis copiée dans le journal avec le même identifiant d'événement et le contexte de l'essai; une observation faite hors essai par une occurrence Toujours ne va que dans le journal. Les transitions de verrouillage et d'alarme n'ont pas d'autre trace que le journal. Un agent dont le domaine Logs est ouvert lit ce même journal par event_history_read, en lecture seule (voir Domaines autorisés).

La console à côté du registre

Console est autre chose que les trois chronologies : une vue glissante de 500 entrées du flux de diagnostic du programme, en mémoire, perdue au redémarrage et vidée par Vider la vue. Les deux se recoupent là où le runtime raconte ce qu'il fait. Un front d'occurrence laisse une ligne de Console sous le domaine Process (une activation au niveau de sa gravité : Critique en erreur, Avertissement en avertissement, Information en information), et une transition de verrouillage aussi (un déclenchement en avertissement, une source sûre et un réarmement en information). Les transitions d'alarme n'apparaissent pas dans Console : la trace de l'évaluateur est un détail de diagnostic que seule une capture détaillée enregistre. Les chronologies sont le registre typé; Console explique le runtime autour de lui.

Ce que la page Événements ne fait pas

  • Elle ne configure rien. Les alarmes se définissent sur Logic > Alarmes, les occurrences sous Process > Réglage > Occurrences et le verrouillage d'arrêt sous Process > Définition > Automatisme.
  • Elle ne réarme aucun verrouillage : cela revient au composant Verrouillage d'un tableau de bord ou à la vue de l'unité elle-même.
  • Elle n'a ni filtre d'unité, ni filtre d'essai : cherchez par le nom, ou ouvrez l'essai dans Historiques pour son propre registre d'occurrences.
  • Elle ne supprime rien et ne modifie rien; seule la conservation retire des lignes.
  • Tant que le runtime est arrêté, cette page n'est pas dessinée du tout : tous les écrans sauf Compte sont remplacés par l'avis de mise en pause, les chronologies comprises. Le journal lui-même est intact et se lit exactement comme avant dès que le runtime est redémarré.