rmm2/agent/collector/gateways.go
cynfo3000 6120d0cffa Initial commit: RMM Agent + Backend
- Go Agent (FreeBSD/amd64) fuer OPNsense
- Go Backend (Linux/amd64) mit REST API + SQLite
- Collector: Hardware, CPU, Memory, Disks, Network, Services,
  WireGuard, DHCP (KEA/ISC/dnsmasq), Routes, Gateways,
  Certificates, Plugins, Updates
- Persistente Agent-ID
- TLS + API-Key Auth
- WebSocket-Infrastruktur (WIP): bidirektionaler Command-Kanal,
  TCP-Tunnel fuer Remote-Zugriff auf Firewall-WebUI
- Lastenheft und README
2026-02-28 07:38:14 +01:00

69 lines
1.5 KiB
Go

package collector
import (
"encoding/json"
"os/exec"
)
type Gateway struct {
Name string `json:"name"`
Address string `json:"address"`
Status string `json:"status"`
Loss string `json:"loss,omitempty"`
Delay string `json:"delay,omitempty"`
Stddev string `json:"stddev,omitempty"`
Monitor string `json:"monitor,omitempty"`
}
// CollectGateways liest OPNsense Gateways via configctl
func CollectGateways() []Gateway {
out, err := exec.Command("/usr/local/sbin/configctl", "interface", "gateways", "status").Output()
if err != nil {
return nil
}
var raw []struct {
Name string `json:"name"`
Address string `json:"address"`
Status string `json:"status"`
Loss string `json:"loss"`
Delay string `json:"delay"`
Stddev string `json:"stddev"`
Monitor string `json:"monitor"`
StatusTranslated string `json:"status_translated"`
}
if err := json.Unmarshal(out, &raw); err != nil {
return nil
}
var gateways []Gateway
for _, r := range raw {
gw := Gateway{
Name: r.Name,
Address: r.Address,
Status: r.StatusTranslated,
Loss: r.Loss,
Delay: r.Delay,
Stddev: r.Stddev,
Monitor: r.Monitor,
}
// Normalisiere "~" zu leer
if gw.Loss == "~" {
gw.Loss = ""
}
if gw.Delay == "~" {
gw.Delay = ""
}
if gw.Stddev == "~" {
gw.Stddev = ""
}
if gw.Monitor == "~" {
gw.Monitor = ""
}
gateways = append(gateways, gw)
}
return gateways
}