Événements
Le registre de la station sur ce qui s'est passé : 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.
Événements est la page qui répond à la question « que s'est-il passé ? ». 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 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 dans lequel é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 à tout rôle autre qu'Admin. Exporter depuis 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 | 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 | 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 tant 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 reste 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 un pack de support sur Console | Le bouton Exporter n'est pas dessiné ; un appui qui atteindrait tout de même le traitement répond « L'export 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 restent 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 connecté sous un autre utilisateur voit son propre jeu de boutons, et une connexion, une déconnexion 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, 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 connectée 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 sûre » ; 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 Identifiant de l'é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é » 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é » 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 des événements d'alarme correspondants les plus récents dans le journal persistant. » (le nom suit l'onglet). |
| Rien d'enregistré | « Aucun événement d'alarme pour l'instant » avec une ligne disant ce qui apparaîtra là ; la page de chaque onglet cite la sienne. |
| Rien ne correspond | « Aucun événement d'alarme ne correspond à ces filtres » avec « Ajustez la priorité ou les termes de recherche pour élargir cet historique. » (priorité, gravité ou transition, selon l'onglet). |
| Le journal ne peut pas être lu | « Les alarmes n'ont pas pu être chargées » 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 « Alarmes indisponibles ». |
| Une actualisation ultérieure échoue | Les dernières lignes valides restent à l'écran et le journal des actions signale « Échec de l'actualisation des alarmes. » |
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 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, les identifiants 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 ensuite ne réécrit jamais ce que la station vous a dit sur le moment. 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 s'est passé 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é.