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

3.1 KiB
Raw Blame History

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/ (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:
{"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:
{"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).