56 lines
1.2 KiB
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))
|
|
}
|