mirror of
https://github.com/tw93/Mole.git
synced 2026-02-04 14:26:46 +00:00
77 lines
1.8 KiB
Go
77 lines
1.8 KiB
Go
package main
|
|
|
|
import (
|
|
"context"
|
|
"runtime"
|
|
"strings"
|
|
"time"
|
|
)
|
|
|
|
func collectHardware(totalRAM uint64, disks []DiskStatus) HardwareInfo {
|
|
if runtime.GOOS != "darwin" {
|
|
return HardwareInfo{
|
|
Model: "Unknown",
|
|
CPUModel: runtime.GOARCH,
|
|
TotalRAM: humanBytes(totalRAM),
|
|
DiskSize: "Unknown",
|
|
OSVersion: runtime.GOOS,
|
|
}
|
|
}
|
|
|
|
// Get model and CPU from system_profiler
|
|
ctx, cancel := context.WithTimeout(context.Background(), 3*time.Second)
|
|
defer cancel()
|
|
|
|
var model, cpuModel, osVersion string
|
|
|
|
// Get hardware overview
|
|
out, err := runCmd(ctx, "system_profiler", "SPHardwareDataType")
|
|
if err == nil {
|
|
lines := strings.Split(out, "\n")
|
|
for _, line := range lines {
|
|
lower := strings.ToLower(strings.TrimSpace(line))
|
|
// Prefer "Model Name" over "Model Identifier"
|
|
if strings.Contains(lower, "model name:") {
|
|
parts := strings.Split(line, ":")
|
|
if len(parts) == 2 {
|
|
model = strings.TrimSpace(parts[1])
|
|
}
|
|
}
|
|
if strings.Contains(lower, "chip:") {
|
|
parts := strings.Split(line, ":")
|
|
if len(parts) == 2 {
|
|
cpuModel = strings.TrimSpace(parts[1])
|
|
}
|
|
}
|
|
if strings.Contains(lower, "processor name:") && cpuModel == "" {
|
|
parts := strings.Split(line, ":")
|
|
if len(parts) == 2 {
|
|
cpuModel = strings.TrimSpace(parts[1])
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
// Get macOS version
|
|
ctx2, cancel2 := context.WithTimeout(context.Background(), 1*time.Second)
|
|
defer cancel2()
|
|
out2, err := runCmd(ctx2, "sw_vers", "-productVersion")
|
|
if err == nil {
|
|
osVersion = "macOS " + strings.TrimSpace(out2)
|
|
}
|
|
|
|
// Get disk size
|
|
diskSize := "Unknown"
|
|
if len(disks) > 0 {
|
|
diskSize = humanBytes(disks[0].Total)
|
|
}
|
|
|
|
return HardwareInfo{
|
|
Model: model,
|
|
CPUModel: cpuModel,
|
|
TotalRAM: humanBytes(totalRAM),
|
|
DiskSize: diskSize,
|
|
OSVersion: osVersion,
|
|
}
|
|
}
|