chore: update AGENTS.md + device-agent submodule
This commit is contained in:
@@ -280,6 +280,40 @@ go run -tags dev ./apps/server-core -create-admin -user admin -pass "..."
|
|||||||
sudo /usr/local/bin/nexusguard-server -create-admin -user admin -pass "..."
|
sudo /usr/local/bin/nexusguard-server -create-admin -user admin -pass "..."
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## heartbeat server <-> device-agent
|
||||||
|
|
||||||
|
Konsep yang Benar
|
||||||
|
Heartbeat = satu konsep, tiga jalur transport:
|
||||||
|
|
||||||
|
0 Transport Protocol Endpoint Kapan Dipakai
|
||||||
|
1 gRPC via domain (HTTPS proxy) gRPC bidi stream api-nexus.datadunia.com:443 Pertama dicoba
|
||||||
|
2 gRPC via WG IP (direct) gRPC bidi stream 10.172.21.1:8080 Fallback jika proxy swallowed
|
||||||
|
3 HTTP API REST POST /api/v1/heartbeat Fallback terakhir / always running
|
||||||
|
Satu konsep yang sama: kirim config_hash + last_handshake + tunnel_up → server compare → respond dengan config jika berubah.
|
||||||
|
|
||||||
|
Yang Perlu Diperbaiki
|
||||||
|
client.go: Perlu ada gRPC heartbeat loop (kirim HeartbeatRequest via stream periodik) + handle HeartbeatResponse
|
||||||
|
heartbeat.go: HTTP heartbeat tetap ada sebagai fallback
|
||||||
|
Transport switching: Saat gRPC connected → heartbeat via gRPC. Saat gRPC disconnected → heartbeat via HTTP
|
||||||
|
handler.go: Perlu handleHeartbeatResponse untuk process config dari gRPC heartbeat
|
||||||
|
Server manager.go: Perlu sendMu untuk prevent concurrent stream.Send()
|
||||||
|
Alur yang Benar (setelah perbaikan)
|
||||||
|
Agent Start
|
||||||
|
→ Provision (HTTP) → config pertama dari HTTP API → build tunnel
|
||||||
|
→ Start HTTP heartbeat (always running, fallback transport)
|
||||||
|
→ Start gRPC (HTTPS → WG IP)
|
||||||
|
|
||||||
|
gRPC Connected:
|
||||||
|
→ establishStream: kirim HelloMessage → terima ConfigUpdate (verify only, jangan rebuild)
|
||||||
|
→ heartbeatLoop: kirim HeartbeatRequest via gRPC setiap 30s
|
||||||
|
→ Server respond: HeartbeatResponse (config_changed? → rebuild via handler)
|
||||||
|
→ dispatch: handle Suspend/Resume/ConfigUpdate/Reconnect/Disconnect
|
||||||
|
|
||||||
|
gRPC Disconnected:
|
||||||
|
→ HTTP heartbeat continues (unaffected)
|
||||||
|
→ gRPC reconnect loop
|
||||||
|
→ When reconnected → switch heartbeat back to gRPC
|
||||||
|
|
||||||
## NOTES
|
## NOTES
|
||||||
- Submodules → private Gitea (`git.datadunia.com`); CI via Gitea Actions per submodule
|
- Submodules → private Gitea (`git.datadunia.com`); CI via Gitea Actions per submodule
|
||||||
- Go versions diverge: server-core `1.25.7`, device-agent `1.25.1`
|
- Go versions diverge: server-core `1.25.7`, device-agent `1.25.1`
|
||||||
|
|||||||
Reference in New Issue
Block a user