aboutsummaryrefslogtreecommitdiff
path: root/internal/speed/cpuinfo.go
diff options
context:
space:
mode:
Diffstat (limited to 'internal/speed/cpuinfo.go')
-rw-r--r--internal/speed/cpuinfo.go54
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 ""
+}