rmm2/agent/collector/hardware.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

56 lines
1.2 KiB
Go

package collector
import (
"os/exec"
"strings"
)
type HardwareInfo struct {
Manufacturer string `json:"manufacturer"`
Model string `json:"model"`
Serial string `json:"serial"`
BIOSVersion string `json:"bios_version"`
}
func CollectHardware() HardwareInfo {
info := HardwareInfo{}
// Hersteller via kenv
info.Manufacturer = kenvGet("smbios.system.maker")
info.Model = kenvGet("smbios.system.product")
info.Serial = kenvGet("smbios.system.serial")
info.BIOSVersion = kenvGet("smbios.bios.version")
// Fallback auf dmidecode wenn kenv leer
if info.Manufacturer == "" {
info.Manufacturer = dmidecodeGet("system-manufacturer")
}
if info.Model == "" {
info.Model = dmidecodeGet("system-product-name")
}
if info.Serial == "" {
info.Serial = dmidecodeGet("system-serial-number")
}
if info.BIOSVersion == "" {
info.BIOSVersion = dmidecodeGet("bios-version")
}
return info
}
func kenvGet(key string) string {
out, err := exec.Command("kenv", key).Output()
if err != nil {
return ""
}
return strings.TrimSpace(string(out))
}
func dmidecodeGet(keyword string) string {
out, err := exec.Command("dmidecode", "-s", keyword).Output()
if err != nil {
return ""
}
return strings.TrimSpace(string(out))
}