diff options
Diffstat (limited to 'internal/speed/cpuinfo.go')
-rw-r--r-- | internal/speed/cpuinfo.go | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/internal/speed/cpuinfo.go b/internal/speed/cpuinfo.go new file mode 100644 index 0000000..09e7a89 --- /dev/null +++ b/internal/speed/cpuinfo.go @@ -0,0 +1,54 @@ +package speed + +import ( + "io/ioutil" + "os" + "runtime" + "strings" +) + +// cpuModelName returns the "model name" acc. to /proc/cpuinfo, or "" +// on error. +// +// Examples: On my desktop PC: +// +// $ grep "model name" /proc/cpuinfo +// model name : Intel(R) Core(TM) i5-3470 CPU @ 3.20GHz +// +// --> Returns "Intel(R) Core(TM) i5-3470 CPU @ 3.20GHz". +// +// On a Raspberry Pi 4: +// +// $ grep "model name" /proc/cpuinfo +// (empty) +// $ grep Hardware /proc/cpuinfo +// Hardware : BCM2835 +// +// --> Returns "BCM2835" +func cpuModelName() string { + if runtime.GOOS != "linux" { + return "" + } + f, err := os.Open("/proc/cpuinfo") + if err != nil { + return "" + } + content, err := ioutil.ReadAll(f) + if err != nil { + return "" + } + lines := strings.Split(string(content), "\n") + // Look for "model name", then for "Hardware" (arm devices don't have "model name") + for _, want := range []string{"model name", "Hardware"} { + for _, line := range lines { + if strings.HasPrefix(line, want) { + parts := strings.SplitN(line, ":", 2) + if len(parts) != 2 { + continue + } + return strings.TrimSpace(parts[1]) + } + } + } + return "" +} |