55 lines
1.1 KiB
Go
55 lines
1.1 KiB
Go
|
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 ""
|
||
|
}
|