...
1
2
3
4
5 package sysinfo
6
7 import (
8 "bufio"
9 "bytes"
10 "io"
11 "os"
12 "strings"
13 )
14
15 func readLinuxProcCPUInfo(buf []byte) error {
16 f, err := os.Open("/proc/cpuinfo")
17 if err != nil {
18 return err
19 }
20 defer f.Close()
21
22 _, err = io.ReadFull(f, buf)
23 if err != nil && err != io.ErrUnexpectedEOF {
24 return err
25 }
26
27 return nil
28 }
29
30 func osCpuInfoName() string {
31 modelName := ""
32 cpuMHz := ""
33
34
35 buf := make([]byte, 512)
36 err := readLinuxProcCPUInfo(buf)
37 if err != nil {
38 return ""
39 }
40
41 scanner := bufio.NewScanner(bytes.NewReader(buf))
42 for scanner.Scan() {
43 line := scanner.Text()
44 if !strings.Contains(line, ":") {
45 continue
46 }
47
48 field := strings.SplitN(line, ": ", 2)
49 switch strings.TrimSpace(field[0]) {
50 case "Model Name", "model name":
51 modelName = field[1]
52 case "CPU MHz", "cpu MHz":
53 cpuMHz = field[1]
54 }
55 }
56
57 if modelName == "" {
58 return ""
59 }
60
61 if cpuMHz == "" {
62 return modelName
63 }
64
65
66
67
68
69 f := [...]string{"GHz", "MHz"}
70 for _, v := range f {
71 if strings.Contains(modelName, v) {
72 return modelName
73 }
74 }
75
76 return modelName + " @ " + cpuMHz + "MHz"
77 }
78
View as plain text