|
Bogdan Timofte
authored
4 days ago
|
1
|
# Database Development Log
|
|
|
2
|
|
|
|
3
|
Decizii despre SQLite, schema runtime, migrare, seed, backup/restore si sursele de adevar pentru date operationale.
|
|
|
4
|
|
|
|
5
|
## 2026-06-09 - SQLite Runtime Source of Truth
|
|
|
6
|
|
|
|
7
|
Observatie: editarile de hosts facute in aplicatia live puteau ramane in working tree-ul de pe jumper sau puteau fi suprascrise/confuzionate la push-ul de cod. Modelul vechi descria simultan `config/hosts.yaml` ca registry editabil in git si ca data operationala runtime, ceea ce nu era o sursa de adevar clara.
|
|
|
8
|
|
|
|
9
|
Decizie:
|
|
|
10
|
|
|
|
11
|
- `var/host-manager.sqlite` devine sursa de adevar runtime pentru registry si Work Orders
|
|
|
12
|
- `config/hosts.yaml` si `config/work-orders.yaml` raman seed/snapshot/export compatibility files
|
|
|
13
|
- la prima pornire, aplicatia seed-uieste documentele lipsa din YAML in SQLite
|
|
Bogdan Timofte
authored
a day ago
|
14
|
- download-urile sunt randate din SQLite
|
|
|
15
|
- la acel moment exista un manifest TSV explicit pentru sync-ul DNS local; acesta a fost retras prin contractul din 2026-06-11
|
|
Bogdan Timofte
authored
4 days ago
|
16
|
- push-urile de cod catre jumper nu trebuie sa inlocuiasca baza runtime din `var/`
|
|
|
17
|
|
|
|
18
|
Scop:
|
|
|
19
|
|
|
|
20
|
- editarile facute in UI sa nu se piarda la deploy/push de cod
|
|
|
21
|
- sa existe o singura autoritate runtime
|
|
Bogdan Timofte
authored
a day ago
|
22
|
- YAML/exporturile sa ramana utile pentru review si bootstrap fara sa fie storage-ul live
|
|
Bogdan Timofte
authored
4 days ago
|
23
|
|
|
|
24
|
## 2026-06-09 - Relational Runtime Schema
|
|
|
25
|
|
|
|
26
|
Observatie: primul pas SQLite mutase sursa de adevar din git in baza de date, dar o pastra ca document YAML intr-o tabela generica. Asta rezolva pierderea editarilor la push, dar nu oferea o baza de date operationala reala.
|
|
|
27
|
|
|
|
28
|
Decizie:
|
|
|
29
|
|
|
|
30
|
- `hosts.fqdn` devine cheia reala pentru hosturi, ca numele complete sa evite coliziuni intre domenii
|
|
|
31
|
- `legacy_id` ramane doar compatibilitate pentru UI/API-ul curent
|
|
|
32
|
- aliasurile sunt pastrate in `host_aliases`, inclusiv dupa retragere
|
|
|
33
|
- vhosturile sunt in `vhosts` si pot fi mutate prin schimbarea `host_fqdn`
|
|
|
34
|
- rolurile, sursele, flagurile si SSH sunt in tabele separate, nu coloane adaugate continuu in `hosts`
|
|
|
35
|
- workerii de date au `data_workers`, `dhcp_leases` si `mdns_observations`
|
|
|
36
|
- certificatele emise au `certificates` si `certificate_dns_names`
|
|
|
37
|
- `documents` ramane doar tabel legacy pentru migrare din modelul vechi document-store
|
|
|
38
|
|
|
|
39
|
Scop:
|
|
|
40
|
|
|
|
41
|
- schema sa poata sustine inventar, DNS, vhosturi, observatii externe si certificate fara sa piarda istoric operational
|
|
|
42
|
- aliasurile/vhosturile retrase sa ramana audibile in baza de date
|
|
|
43
|
- structura sa fie extensibila fara sa supraincarce tabelul `hosts`
|
|
Bogdan Timofte
authored
3 days ago
|
44
|
|
|
|
45
|
## 2026-06-10 - DHCP Lease Push Collector
|
|
|
46
|
|
|
|
47
|
Observatie: DHCP-ul de pe `192.168.2.1` este autoritatea pentru alocarea IP-urilor LAN, dar baza runtime avea doar tabela `dhcp_leases`, fara un colector operational.
|
|
|
48
|
|
|
|
49
|
Decizie:
|
|
|
50
|
|
|
|
51
|
- MikroTik impinge evenimentele de lease prin `lease-script` catre `POST /api/collect/dhcp-leases`
|
|
|
52
|
- endpoint-ul este protejat cu `HOST_MANAGER_DHCP_PUSH_TOKEN`, separat de sesiunea OTP pentru UI
|
|
|
53
|
- ingest-ul scrie doar in `dhcp_leases` si actualizeaza workerul `dhcp-router`
|
|
|
54
|
- observatiile DHCP raman material de audit/propunere si nu modifica automat host registry-ul sau manifestul DNS
|
|
|
55
|
|
|
|
56
|
Scop:
|
|
|
57
|
|
|
|
58
|
- sa colectam lease-uri fara credential SSH pentru router in aplicatie
|
|
|
59
|
- sa pastram DHCP ca sursa observata cu prioritate mare, dar fara side effect automat asupra DNS-ului local
|
|
Bogdan Timofte
authored
a day ago
|
60
|
|
|
|
61
|
## 2026-06-11 - Registry Maturity Contract
|
|
|
62
|
|
|
|
63
|
Observatie: modelul vechi pastra mai multe artefacte care puteau fi confundate cu surse de adevar: `local-hosts.tsv`, campuri legacy din export si surse istorice pe host.
|
|
|
64
|
|
|
|
65
|
Decizie:
|
|
|
66
|
|
|
|
67
|
- SQLite ramane singura sursa de adevar runtime
|
|
|
68
|
- `hosts.yaml` devine produsul finit descarcabil si vizibil raw in UI
|
|
|
69
|
- `local-hosts.tsv` nu mai este fisier versionat sau download; resolver sync genereaza recorduri efemere din SQLite
|
|
|
70
|
- schema urca la versiunea 3 cu `tags` si `host_tags`
|
|
|
71
|
- `dhcp_leases` si `mdns_observations` sunt inputuri observate pentru hinturi/autocomplete, nu muta automat registry-ul
|
|
|
72
|
|
|
|
73
|
Motiv:
|
|
|
74
|
|
|
|
75
|
- sa evitam drift intre DB, exporturi si configurarea resolverelor
|
|
|
76
|
- sa facem tagurile o functie administrabila, nu text liber fara catalog
|
|
|
77
|
- sa pastram observatiile externe utile fara sa le promovam automat in DNS
|