rmm2/agent-bsd/collector/hardware.go

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))
}