Skip to content

Commit 92b6782

Browse files
author
root
committed
update
1 parent eaf18c3 commit 92b6782

File tree

115 files changed

+20147
-17
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

115 files changed

+20147
-17
lines changed

go.mod

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,5 +5,6 @@ go 1.15
55
require (
66
github.com/gin-gonic/gin v1.6.3
77
github.com/shirou/gopsutil/v3 v3.20.10
8+
github.com/tidwall/gjson v1.6.3 // indirect
89
github.com/wonderivan/logger v1.0.0
910
)

go.sum

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,12 @@ github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+
3636
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
3737
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
3838
github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
39+
github.com/tidwall/gjson v1.6.3 h1:aHoiiem0dr7GHkW001T1SMTJ7X5PvyekH5WX0whWGnI=
40+
github.com/tidwall/gjson v1.6.3/go.mod h1:BaHyNc5bjzYkPqgLq7mdVzeiRtULKULXLgZFKsxEHI0=
41+
github.com/tidwall/match v1.0.1 h1:PnKP62LPNxHKTwvHHZZzdOAOCtsJTjo6dZLCwpKm5xc=
42+
github.com/tidwall/match v1.0.1/go.mod h1:LujAq0jyVjBy028G1WhWfIzbpQfMO8bBZ6Tyb0+pL9E=
43+
github.com/tidwall/pretty v1.0.2 h1:Z7S3cePv9Jwm1KwS0513MRaoUe3S01WPbLNV40pwWZU=
44+
github.com/tidwall/pretty v1.0.2/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk=
3945
github.com/ugorji/go v1.1.7 h1:/68gy2h+1mWMrwZFeD1kQialdSzAb432dtpeJ42ovdo=
4046
github.com/ugorji/go v1.1.7/go.mod h1:kZn38zHttfInRq0xu/PH0az30d+z6vm202qpg1oXVMw=
4147
github.com/ugorji/go/codec v1.1.7 h1:2SvQaVZ1ouYrrKKwoSk2pzd4A9evlKJb9oTL+OaLUSs=

main.go

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,10 @@
11
package main
22

3-
import "pi-monitor/route"
3+
import (
4+
"pi-monitor/service"
5+
)
46

57
func main() {
6-
route.Run()
8+
service.GetCPU()
9+
//route.Run()
710
}

route/gin.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package route
22

33
import "github.com/gin-gonic/gin"
44

5+
//Server Server
56
type Server struct {
67
Gin *gin.Engine
78
Port string
@@ -12,11 +13,12 @@ var server *Server
1213
func init() {
1314
server = &Server{
1415
Gin: gin.Default(),
15-
Port: ":3000",
16+
Port: ":4000",
1617
}
1718
route()
1819
}
1920

21+
//Run Run
2022
func Run() {
2123
server.Gin.Run(server.Port)
2224
}

route/route.go

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,5 @@
11
package route
22

3-
import (
4-
"pi-monitor/service"
5-
)
6-
73
func route() {
8-
server.Gin.GET("/", service.GetCPU)
4+
//server.Gin.GET("/", service.GetCPU)
95
}

service/cpu.go

Lines changed: 128 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,140 @@
11
package service
22

33
import (
4-
"net/http"
4+
"strconv"
5+
"time"
56

6-
"github.com/gin-gonic/gin"
77
"github.com/shirou/gopsutil/v3/cpu"
8+
"github.com/shirou/gopsutil/v3/host"
89
"github.com/wonderivan/logger"
910
)
1011

11-
func GetCPU(c *gin.Context) {
12-
info, err := cpu.Info()
12+
type CPU struct {
13+
Cores int
14+
Threads int
15+
Freq *Freq
16+
Load *CPULoad
17+
Temp string
18+
}
19+
20+
type Freq struct {
21+
Maxfreq float64
22+
Minfreq float64
23+
Curfreq float64
24+
}
25+
26+
type CPULoad struct {
27+
Percent string
28+
Idle string
29+
User string
30+
Sys string
31+
Nice string
32+
Iowait string
33+
Irq string
34+
Softirq string
35+
}
36+
37+
var (
38+
lastTimesStat cpu.TimesStat
39+
)
40+
41+
//loadTimes 获取运行时间
42+
func loadTimes() cpu.TimesStat {
43+
t, err := cpu.Times(false)
1344
if err != nil {
1445
logger.Error(err)
1546
}
16-
c.String(http.StatusOK, "%s", info)
47+
return t[0]
48+
}
49+
50+
//initLastTimes 初始化运行时间,以便第一次做比较时使用
51+
func initLastTimes() {
52+
lastTimesStat = loadTimes()
53+
}
54+
55+
//cpuload 获取占用率
56+
func cpuLoad() *CPULoad {
57+
t := loadTimes()
58+
last_total := lastTimesStat.User + lastTimesStat.System + lastTimesStat.Idle + lastTimesStat.Nice + lastTimesStat.Iowait + lastTimesStat.Irq + lastTimesStat.Softirq + lastTimesStat.Steal
59+
cur_total := t.User + t.System + t.Idle + t.Nice + t.Iowait + t.Irq + t.Softirq + t.Steal
60+
used_total := cur_total - last_total
61+
62+
cpuload := &CPULoad{
63+
Percent: floatToString((1 - ((t.Idle - lastTimesStat.Idle) / used_total)) * 100),
64+
Idle: floatToString((t.Idle - lastTimesStat.Idle) / used_total * 100),
65+
User: floatToString((t.User - lastTimesStat.User) / used_total * 100),
66+
Sys: floatToString((t.System - lastTimesStat.System) / used_total * 100),
67+
Nice: floatToString((t.Nice - lastTimesStat.Nice) / used_total * 100),
68+
Iowait: floatToString((t.Iowait - lastTimesStat.Iowait) / used_total * 100),
69+
Irq: floatToString((t.Irq - lastTimesStat.Irq) / used_total * 100),
70+
Softirq: floatToString((t.Softirq - lastTimesStat.Softirq) / used_total * 100),
71+
}
72+
lastTimesStat = t
73+
return cpuload
74+
}
75+
76+
func cpuTemperature() string {
77+
temperatures, err := host.SensorsTemperatures()
78+
if err != nil {
79+
logger.Error(err)
80+
}
81+
return floatToString(temperatures[0].Temperature)
82+
}
83+
84+
func cpuCount(logical bool) int {
85+
c, err := cpu.Counts(logical)
86+
if err != nil {
87+
logger.Error(err)
88+
}
89+
return c
90+
}
91+
92+
func getFreq(name string) float64 {
93+
var lines []string
94+
var err error
95+
var freq float64
96+
var value float64
97+
98+
lines, err = ReadLines("/sys/devices/system/cpu/cpu0/cpufreq/" + name)
99+
if err != nil {
100+
logger.Error(err)
101+
}
102+
value, err = strconv.ParseFloat(lines[0], 64)
103+
if err != nil {
104+
logger.Error(err)
105+
}
106+
freq = value / 1000.0
107+
if freq > 9999 {
108+
freq = freq / 1000.0 // value in Hz
109+
}
110+
return freq
111+
}
112+
113+
func freq() *Freq {
114+
f := &Freq{
115+
Maxfreq: getFreq("cpuinfo_max_freq"),
116+
Minfreq: getFreq("cpuinfo_min_freq"),
117+
Curfreq: getFreq("cpuinfo_cur_freq"),
118+
}
119+
return f
120+
}
121+
122+
func GetCPU() {
123+
time.Sleep(time.Second)
124+
for {
125+
logger.Info(cpuLoad())
126+
time.Sleep(time.Second)
127+
}
128+
cpu := &CPU{
129+
Cores: cpuCount(false),
130+
Threads: cpuCount(false),
131+
Freq: freq(),
132+
Load: cpuLoad(),
133+
Temp: cpuTemperature(),
134+
}
135+
logger.Info(cpu.Cores)
136+
logger.Info(cpu.Threads)
137+
logger.Info(cpu.Freq)
138+
logger.Info(cpu.Load)
139+
logger.Info(cpu.Temp)
17140
}

service/host.go

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
package service
2+
3+
type Host struct {
4+
Hostname string
5+
IP string
6+
Uptime string
7+
OS string
8+
Kernal string
9+
Version string
10+
}

service/init.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
package service
2+
3+
func init() {
4+
initLastTimes()
5+
}

service/utils.go

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
package service
2+
3+
import (
4+
"bufio"
5+
"os"
6+
"strconv"
7+
"strings"
8+
)
9+
10+
func floatToString(num float64) string {
11+
return strconv.FormatFloat(num, 'f', 2, 64)
12+
}
13+
14+
func ReadLines(filename string) ([]string, error) {
15+
return ReadLinesOffsetN(filename, 0, -1)
16+
}
17+
18+
func ReadLinesOffsetN(filename string, offset uint, n int) ([]string, error) {
19+
f, err := os.Open(filename)
20+
if err != nil {
21+
return []string{""}, err
22+
}
23+
defer f.Close()
24+
25+
var ret []string
26+
27+
r := bufio.NewReader(f)
28+
for i := 0; i < n+int(offset) || n < 0; i++ {
29+
line, err := r.ReadString('\n')
30+
if err != nil {
31+
break
32+
}
33+
if i < int(offset) {
34+
continue
35+
}
36+
ret = append(ret, strings.Trim(line, "\n"))
37+
}
38+
39+
return ret, nil
40+
}

0 commit comments

Comments
 (0)