licence-server/docs/loggerservice/02-uredjaji-heartbeat-discovery.md
Nenad Djukic 3480766c3e Prijemnik dijagnostike sa TERMINIA uredjaja (logger/)
- UDP prijemnik (podrazumevano 46465, NE 46464 gde uredjaji slusaju discovery):
  dnevnik rada sa zaglavljem #TERMINIA, heartbeat JSON, sve ostalo se odbacuje
- paket bez zaglavlja (FW < 0.13.4) se vodi kao "nepoznat uredjaj" po izvornoj
  IP adresi i tako je i oznacen u prikazu
- dnevnik u fajlove po uredjaju i danu, rotacija po velicini + tri kvote
  (starost, po uredjaju, ukupno); otvoren fajl se nikad ne brise
- heartbeat u memoriji; interval se meri iz razmaka javljanja, "tih" = 3x interval
- web stranica (podrazumevano 127.0.0.1:8081): spisak uredjaja, crveno za tihe,
  poslednjih N linija sa pretragom, /dnevnik.txt i /api/uredjaji
- bez baze i bez spoljnih zavisnosti; ne dira licencni servis, njegovu bazu,
  rute ni nginx
- sanitizacija svega iz paketa (duzine, kontrolni znaci, ime foldera) — bez
  izlaska iz foldera dnevnika
- systemd unit + primer env fajla + README sa uputstvom za pustanje na server
- testovi: parsiranje (zaglavlje/JSON/bez zaglavlja/smece), registar, rotacija
  i kvote, web rute

Nije pusteno na server — puštanje radi vlasnik po logger/README.md.
2026-07-25 17:40:27 +02:00

66 lines
3.1 KiB
Markdown
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Uređaji: šta terminal VEĆ šalje (formati) i šta server treba da primi
> Firmware strana je GOTOVA (FW 0.10.0+, modul `firmware/10_terminia/svc.cpp`).
> ~~Server strana (prijemnik) NE postoji — to je zadatak u 04.~~
> **UDP prijemnik je NAPISAN 2026-07-25:** [`logger/`](../../logger/README.md)
> (Go, bez baze, zaseban proces i systemd unit; dnevnik u fajlove sa rotacijom,
> heartbeat u memoriji, mala web stranica). Nije još pušten na server —
> puštanje radi vlasnik po uputstvu u `logger/README.md`. Upis u `devices`
> tabelu (tačka 2 ispod) ostaje za RBAC fazu.
## 1. LAN discovery (za servisera na licu mesta / PC alat)
- Uređaj UVEK sluša **UDP port 46464**.
- Upit: paket čiji sadržaj počinje ASCII stringom `TERMINIA?` (može broadcast).
- Odgovor (unicast pošiljaocu), JSON u jednom paketu:
```json
{"app":"TERMINIA","name":"TERM-001","mac":"1C:DB:D4:A6:A4:60",
"ip":"192.168.123.1","fw":"0.11.0","serial":"1CDBD4A6A460"}
```
- `serial` = korisnički serijski broj ili MAC bez dvotačaka ako serijski nije zadat.
- `ip` = adresa interfejsa (ETH ima prednost nad WiFi ako je povezan).
- Provereno uživo 2026-07-24 (PowerShell UDP upit → odgovor za <100 ms).
**Upotreba:** serviserski PC/telefon alat nađi sve uređaje na mreži"
broadcast `TERMINIA?` na 255.255.255.255:46464 i skupi odgovore.
## 2. Heartbeat (za `devices.status` / `poslednji_heartbeat`)
- Uređaj šalje na **`cfg.svcLogHost` (`ip:port`, UDP)** na **`cfg.svcHbSeconds`**
sekundi (0 = isključeno). Podešava se u SPA: Podešavanja Servis.
- Format = isti identitet kao discovery + oznaka:
```json
{"app":"TERMINIA","name":"...","mac":"...","ip":"...","fw":"...","serial":"...","hb":1}
```
**Server treba:** UDP prijemnik (port po dogovoru, npr. 46465 javno) koji:
1. parsira JSON, ključ = `mac`;
2. upsert u `devices` (`fw_verzija`, `ip`, `poslednji_heartbeat = NOW()`);
3. status: `online` ako je heartbeat mlađi od 3×interval, inače `offline`
(interval po uređaju čuvati ili pretpostaviti default).
Heartbeat trenutno gađa LOKALNI prijemnik (LAN). Za javni server preko
interneta: NAT izlaz radi (UDP out), ali treba javna IP/port + odluka da li UDP
ili prelazak na HTTPS POST uz sync (v. Zahtevi ka firmveru" u 04 ako se menja).
## 3. Dnevnik rada (dbg) na server
- Isti `cfg.svcLogHost` prima i tok dbg linija (tekst, UDP, više linija po paketu,
do ~1 KB) kada je uključeno Šalji dnevnik rada na server".
- Namena: teren-dijagnostika („šta se dešava kad pravi problem").
- **Server treba:** isti prijemnik upisuje sirove linije u fajl po MAC-u/danu
(rotacija!) NE u bazu (obim). Toggle je na uređaju, podrazumevano isključen
server ne sme pretpostaviti da tok uvek stiže.
## 4. Identitet uređaja — izvor istine
- **MAC iz eFuse** (`1C:DB:D4:A6:A4:60` je razvojni uređaj) nepromenljiv,
ključ za `devices.mac` i za licencu.
- `serial` je korisnički (promenljiv) samo za prikaz.
- Registracija uređaja u org (ko ga poseduje) ide kroz RBAC/provisioning (03),
ne kroz heartbeat heartbeat samo ažurira POZNATE uređaje (nepoznat MAC:
zabeleži u neregistrovani" listu za kasnije usvajanje, ne pravi org sam).