Files
nano_metrics/server/transport/udp.go
T
Gilles Soulier 66605e22e3 fix(server): logging UDP — debug SMART + format erreur JSON
Cargo.lock mis à jour pour refléter la version 0.1.11 de l'agent.
Logging temporaire côté serveur pour tracer les payloads SMART.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-23 12:49:32 +02:00

54 lines
1.2 KiB
Go

package transport
import (
"encoding/json"
"log"
"net"
"github.com/user/nanometrics/server/models"
)
func StartUDP(addr string, handler func(*models.AgentMetrics)) error {
conn, err := net.ListenPacket("udp", addr)
if err != nil {
return err
}
log.Printf("[udp] écoute sur %s", addr)
go func() {
buf := make([]byte, 65535)
for {
n, src, err := conn.ReadFrom(buf)
if err != nil {
log.Printf("[udp] erreur lecture: %v", err)
continue
}
data := make([]byte, n)
copy(data, buf[:n])
go processUDP(data, src.String(), handler)
}
}()
return nil
}
func processUDP(data []byte, src string, handler func(*models.AgentMetrics)) {
var m models.AgentMetrics
if err := json.Unmarshal(data, &m); err != nil {
end := 32
if len(data) < end {
end = len(data)
}
log.Printf("[udp] JSON invalide: %v | src=%s | octets: %x", err, src, data[:end])
return
}
if m.Hostname == "" {
return
}
// DEBUG SMART — logguer le payload ASUS complet
if m.Smart != nil {
log.Printf("[udp] SMART reçu de %s: %d disque(s)", m.Hostname, len(m.Smart))
} else {
log.Printf("[udp] payload de %s (v%s): smart=nil hdd=%v", m.Hostname, m.Version, m.HDDTotal)
}
handler(&m)
}