Skip to content

Commit f2757bb

Browse files
feat: Added MemInfo struct, GetMemInfo API
1 parent 79b5dff commit f2757bb

File tree

3 files changed

+82
-14
lines changed

3 files changed

+82
-14
lines changed

cmd/main.go

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,10 @@ import (
77
)
88

99
func main() {
10-
cpuinfo, _ := psutils.GetCpuInfo()
11-
log.Printf("%v",cpuinfo)
10+
cpuInfo, _ := psutils.GetCpuInfo()
11+
log.Printf("%v",cpuInfo)
12+
memInfo, err := psutils.GetMemInfo()
13+
log.Printf("%v",memInfo)
14+
log.Fatalf("err %v",err)
1215

1316
}

pkg/cpuInfo.go

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,10 @@ type Loader interface {
1010
Load() (string, error)
1111
}
1212

13-
type RealLoader struct{}
13+
type RealCpuLoader struct{}
1414

15-
func (l *RealLoader) Load() (string, error) {
16-
return loadCpuFile()
15+
func (l *RealCpuLoader) Load() (string, error) {
16+
return loadFile("/proc/cpuinfo")
1717
}
1818

1919
type CpuInfo struct {
@@ -24,17 +24,17 @@ type CpuInfo struct {
2424
CpuMHZ float32
2525
}
2626

27-
func loadCpuFile() (cpuFile string, err error) {
28-
file, err := os.ReadFile("/proc/cpuinfo")
29-
cpuFile = string(file)
27+
func loadFile(filepath string) (fileData string, err error) {
28+
file, err := os.ReadFile(filepath)
29+
fileData = string(file)
3030

3131
return
3232
}
3333

34-
func setCpuInfo(cpuFile string) (cpuInfo CpuInfo, err error) {
34+
func setCpuInfo(cpuData string) (cpuInfo CpuInfo, err error) {
3535
var processorsNum int
3636
var totalFreq float32
37-
lines := strings.SplitN(cpuFile, "\n", -1)
37+
lines := strings.SplitN(cpuData, "\n", -1)
3838
for _, line := range lines {
3939
if strings.HasPrefix(line, "processor") {
4040
processorsNum++
@@ -66,16 +66,16 @@ func setCpuInfo(cpuFile string) (cpuInfo CpuInfo, err error) {
6666
}
6767

6868
func GetCpuInfo() (cpuInfo CpuInfo, err error) {
69-
var _ Loader = (*RealLoader)(nil)
70-
return getCpuInfo(&RealLoader{})
69+
var _ Loader = (*RealCpuLoader)(nil)
70+
return getCpuInfo(&RealCpuLoader{})
7171
}
7272

7373
func getCpuInfo(loader Loader) (cpuInfo CpuInfo, err error) {
7474

75-
cpuFile, err := loader.Load()
75+
cpuData, err := loader.Load()
7676
if err != nil {
7777
return
7878
}
79-
cpuInfo, err = setCpuInfo(cpuFile)
79+
cpuInfo, err = setCpuInfo(cpuData)
8080
return
8181
}

pkg/memInfo.go

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
package psutils
2+
3+
import (
4+
"strconv"
5+
"strings"
6+
)
7+
8+
type MemInfo struct {
9+
TotalMemoryKB float64
10+
UsedMemoryKB float64
11+
AvailableMemoryKB float64
12+
}
13+
14+
type RealMemLoader struct{}
15+
16+
func (l *RealMemLoader) Load() (string, error) {
17+
return loadFile("/proc/meminfo")
18+
}
19+
20+
func extractValue(line string) (valueNoKB string) {
21+
parts := strings.Split(line, ":")
22+
value := strings.Replace(parts[1], "kB", "", 1)
23+
valueNoKB = strings.TrimSpace(value)
24+
return
25+
}
26+
27+
func setMemInfo(memData string) (memInfo MemInfo, err error) {
28+
lines := strings.SplitN(memData, "\n", -1)
29+
30+
for _, line := range lines {
31+
if strings.HasPrefix(line, "MemTotal") {
32+
33+
memTotalNoKB := extractValue(line)
34+
memInfo.TotalMemoryKB, err = strconv.ParseFloat(memTotalNoKB, 64)
35+
36+
} else if strings.HasPrefix(line, "MemAvailable") {
37+
38+
memavailabeNoKB := extractValue(line)
39+
memInfo.AvailableMemoryKB, err = strconv.ParseFloat(memavailabeNoKB, 64)
40+
41+
} else if strings.HasPrefix(line, "MemFree") {
42+
43+
var free float64
44+
MemFreeNoKB := extractValue(line)
45+
free, err = strconv.ParseFloat(MemFreeNoKB, 64)
46+
memInfo.UsedMemoryKB = memInfo.TotalMemoryKB - free
47+
}
48+
}
49+
return
50+
}
51+
52+
func GetMemInfo() (memInfo MemInfo, err error) {
53+
var _ Loader = (*RealMemLoader)(nil)
54+
return getMemInfo(&RealMemLoader{})
55+
}
56+
57+
func getMemInfo(loader Loader) (memInfo MemInfo, err error) {
58+
59+
memData, err := loader.Load()
60+
if err != nil {
61+
return
62+
}
63+
memInfo, err = setMemInfo(memData)
64+
return
65+
}

0 commit comments

Comments
 (0)