15 Commits

Author SHA1 Message Date
sases 5e694f6b74 Komunikat offline mówi, co faktycznie nie działa: powiadamianie o alarmach
"Dane mogą być nieaktualne" wprowadzało w błąd — iframe pokazuje infoterminal
ALS bezpośrednio, więc jego dane są aktualne niezależnie od LuPorta. Przy
zerwanym WebSockecie pada wyłącznie nasza warstwa wykrywania alarmów i to
komunikat ma mówić. (Niuans opisany w README: karty na ekranie alarmowym przy
przerwie w trakcie alarmu mogą być nieświeże do 5 min, potem znikają.)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-31 08:19:28 +02:00
sases 89155c3f2a Wskaźnik offline: ramka zamiast belki + naprawa cyklicznego migania
Dwa zgłoszenia z kiosku (2026-07-31):

1. BELKA ZASŁANIAŁA DANE ALS. Pełnoekranowy pasek u góry zajmował pas
   ekranu i obcinał dane informacyjne w iframe. Zastąpiony cienką pulsującą
   RAMKĄ wokół całego ekranu (pointer-events: none, niczego nie zakrywa)
   plus małą plakietką w rogu. Z daleka widoczna równie dobrze.

2. WSKAŹNIK MIGAŁ zamiast świecić ciągle. disconnectedSince było resetowane
   przy KAŻDEJ nieudanej próbie reconnectu, nie tylko przy przejściu
   połączone->rozłączone — przy odstępie ponowień > 10 s (backoff dochodzi
   do 30 s) licznik ciszy zerował się co próbę i wskaźnik cyklicznie znikał
   i wracał. Teraz znacznik początku przerwy ustawiany wyłącznie przy
   przejściu ze stanu połączonego.

   Kontekst zgłoszenia: strona działa jeszcze przeciw STAREMU LuPortowi,
   który nie ma kanału zbiorczego ani uwierzytelniania WS — połączenie pada
   ciągle (oczekiwane do czasu wdrożenia; potem wstaje bez zmian), a błąd
   zamieniał tę ciągłą przerwę w miganie.

Testy: scenariusz 7 próbkuje wskaźnik co 500 ms przez 90 s ciągłej awarii
i wymaga 100% aktywnych próbek — z błędem aktywnych było 51/182 (72% czasu
zgaszony; dokładnie zgłoszone "pojawia się i znika"). Fałszywy WebSocket
odrzuca teraz połączenia jak przeglądarka (onclose po nieudanej próbie),
więc długa przerwa z ponowieniami jest testowalna. 11/11 scenariuszy PASS,
mutacja poprawki wywraca scenariusz 7.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-31 08:16:36 +02:00
sases d97d139d52 Pasek statusu ukryty przez CSS (nakładał się na dane ALS w iframe)
Ukrycie WYŁĄCZNIE przez display:none — element zostaje w DOM. Usunięcie go
z HTML to dokładnie ten błąd, który w starej wersji ubijał reconnect
(TypeError w onclose; README, Historia). refreshStatus() i tak ma osłonę na
brak elementu, ale osłona jest siatką bezpieczeństwa, nie zaproszeniem.
Do diagnostyki: jedna linia CSS albo style.display="block" w konsoli.

Pomarańczowy pasek offline zostaje bez zmian — pojawia się tylko przy utracie
łączności, czyli dokładnie wtedy, gdy MA przykryć nieaktualne dane.

10/10 testów przechodzi (testy sprawdzają logikę i klasy, nie widoczność
paska, więc ukrycie ich nie dotyka).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-31 08:09:12 +02:00
sases 199e71327f Przejście na kanał zbiorczy LuPort + naprawa reconnectu, watchdog, widoczny offline
PRZYCZYNA ZNIKAJĄCYCH ALARMÓW ZNALEZIONA — i nie była nią liczba połączeń.
Commit 7cf0634 ("hidden status-bar & machine.status") zakomentował element
#status-bar w HTML, ale refreshStatus() nadal po niego sięgał. TypeError na
null przerywał handler ws.onclose PRZED zaplanowaniem reconnectu — każda
maszyna po pierwszym zerwaniu połączenia milkła NA ZAWSZE. Restart z crona
co 2 h maskował problem, zaczynając od zera.

Czerwcowe poprawki na kiosku (timery świeżości per-maszyna, ubijanie "zombie"
połączeń, jitter) szły w dobrą stronę, ale nieświadomie POGORSZYŁY objaw:
watchdog celowo zamykał ciche połączenie, a każde zamknięcie przechodziło
przez ten sam wadliwy onclose — własna obrona uśmiercała maszynę na stałe.
Ich sedno jest zachowane w tej wersji (wykrywanie ciszy, jitter, nakładkowy
iframe z "iframe optimalization").

NOWA ARCHITEKTURA (pod nowy system LuPort):
- JEDNO połączenie na kanał zbiorczy /ws/als-data/ zamiast 35 per-maszyna;
  serwer wysyła migawkę stanu wszystkich maszyn zaraz po połączeniu (dodane
  w LuPort równolegle), więc trwający alarm wraca na ekran natychmiast po
  reconnexie
- token ApiUser w adresie (nowy system wymaga uwierzytelnienia WS); konto
  bot-als-alert-screen bez żadnych uprawnień
- reconnect z wykładniczym odstępem (1->30 s) i jitterem; odstęp wraca do
  minimum dopiero po 60 s stabilnego połączenia
- watchdog ciszy > 90 s (przeglądarka nie wystawia ping/pong do JS — martwe
  półotwarte połączenie inaczej wisi w nieskończoność)
- dane maszyny starsze niż 5 min znikają z ekranu; przy rozłączeniu dane NIE
  są czyszczone od razu (alarm nie znika przy 3-sekundowym czknięciu sieci —
  o niepewności mówi pomarańczowy pasek, migawka po reconnexie przywraca
  prawdę)
- utrata łączności WIDOCZNA: pomarańczowy pasek po 10 s + przywrócony pasek
  statusu; element MUSI istnieć w DOM, refreshStatus() ma mimo to osłonę
- MACHINES stało się filtrem wyświetlania; ?ws= i ?token= nadpisują
  konfigurację z adresu strony
- karty przez textContent; celowo BRAK ws.onerror (po błędzie przeglądarka
  i tak wywołuje onclose)

TESTY (test/testy_ekranu.py): 10 deterministycznych scenariuszy bez sieci —
skrypt wycinany z żywego HTML, WebSocket podmieniony fałszywką, wirtualny
czas Chromium. Scenariusz 6 to bezpośredni test regresji błędu reconnectu;
mutacja (usunięcie planowania reconnectu) wywraca scenariusze 6, 8 i 9.

CRON RESTARTUJĄCY CO 2 H MOŻNA USUNĄĆ — README opisuje czemu.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-31 08:04:30 +02:00
admin c893b5e975 iframe optimalization 2026-06-22 14:49:42 +02:00
admin 9d196fcfca websocket connection fixes 2026-06-19 13:36:50 +02:00
admin 90fd95e978 DATA_STALE_MS - 2 minutes 2026-06-08 10:28:11 +02:00
admin 4b7b54d4d3 data timers 2026-06-08 09:55:59 +02:00
admin 53c7423c5e unicode char fix 2026-06-08 09:43:26 +02:00
admin b0a66ed982 Merge branch 'main' of https://git.sases.pl/sases/als-alert-screen 2026-06-08 09:39:11 +02:00
admin 7171e5ea09 alarm clear on disconnect 2026-06-08 09:37:18 +02:00
sases 7cf063431d hidden status-bar & machine.status 2026-06-01 19:41:16 +02:00
sases c170807172 unicode char fix 2026-05-28 15:40:37 +02:00
sases 7d868462a2 status text disabled 2026-05-28 15:37:50 +02:00
admin e1a61044e0 first commit 2026-05-28 14:51:09 +02:00