@@ -25,160 +25,158 @@ const (
25
25
GB = 1024 * MB
26
26
)
27
27
28
- var (
29
- //Version string
30
- //expectDiskFsTypes = []string{
31
- // "apfs", "ext4", "ext3", "ext2", "f2fs", "reiserfs", "jfs", "btrfs",
32
- // "fuseblk", "zfs", "simfs", "ntfs", "fat32", "exfat", "xfs", "fuse.rclone",
33
- //}
34
- excludeNetInterfaces = []string {
35
- "lo" , "tun" , "docker" , "veth" , "br-" , "vmbr" , "vnet" , "kube" ,
36
- }
37
- //getMacDiskNo = regexp.MustCompile(`\/dev\/disk(\d)s.*`)
38
- )
39
-
40
- var (
41
- netInSpeed , netOutSpeed , netInTransfer , netOutTransfer , lastUpdateNetStats uint64
42
- cachedBootTime time.Time
43
- )
28
+ var excludeNetInterfaces = []string {
29
+ "lo" , "tun" , "docker" , "veth" , "br-" , "vmbr" , "vnet" , "kube" ,
30
+ }
44
31
45
32
type ServerMonitor struct {
46
33
api.Api
47
34
}
48
35
49
36
// GetHourDiffer 获取相差时间
50
37
func GetHourDiffer (startTime , endTime string ) int64 {
51
- var hour int64
52
38
t1 , err1 := time .ParseInLocation ("2006-01-02 15:04:05" , startTime , time .Local )
53
39
t2 , err2 := time .ParseInLocation ("2006-01-02 15:04:05" , endTime , time .Local )
54
- if err1 == nil && err2 == nil && t1 .Before (t2 ) {
55
- diff := t2 .Unix () - t1 .Unix () //
56
- hour = diff / 3600
57
- return hour
58
- } else {
59
- return hour
40
+ if err1 != nil || err2 != nil || ! t1 .Before (t2 ) {
41
+ return 0
60
42
}
43
+ return (t2 .Unix () - t1 .Unix ()) / 3600
61
44
}
62
45
63
46
// ServerInfo 获取系统信息
64
- // @Summary 系统信息
65
- // @Description 获取JSON
66
- // @Tags 系统信息
67
- // @Success 200 {object} response.Response "{"code": 200, "data": [...]}"
68
- // @Router /api/v1/server-monitor [get]
69
- // @Security Bearer
70
47
func (e ServerMonitor ) ServerInfo (c * gin.Context ) {
71
48
e .Context = c
72
49
50
+ osInfo := getOSInfo ()
51
+ memInfo := getMemoryInfo ()
52
+ swapInfo := getSwapInfo ()
53
+ cpuInfo := getCPUInfo ()
54
+ diskInfo := getDiskInfo ()
55
+ netInfo := getNetworkInfo ()
56
+
57
+ bootTime , _ := host .BootTime ()
58
+ cachedBootTime := time .Unix (int64 (bootTime ), 0 )
59
+
60
+ e .Custom (gin.H {
61
+ "code" : 200 ,
62
+ "os" : osInfo ,
63
+ "mem" : memInfo ,
64
+ "cpu" : cpuInfo ,
65
+ "disk" : diskInfo ,
66
+ "net" : netInfo ,
67
+ "swap" : swapInfo ,
68
+ "location" : "Aliyun" ,
69
+ "bootTime" : GetHourDiffer (cachedBootTime .Format ("2006-01-02 15:04:05" ), time .Now ().Format ("2006-01-02 15:04:05" )),
70
+ })
71
+ }
72
+
73
+ func getOSInfo () map [string ]interface {} {
73
74
sysInfo , _ := host .Info ()
74
- osDic := make (map [string ]interface {}, 0 )
75
- osDic ["goOs" ] = runtime .GOOS
76
- osDic ["arch" ] = runtime .GOARCH
77
- osDic ["mem" ] = runtime .MemProfileRate
78
- osDic ["compiler" ] = runtime .Compiler
79
- osDic ["version" ] = runtime .Version ()
80
- osDic ["numGoroutine" ] = runtime .NumGoroutine ()
81
- osDic ["ip" ] = pkg .GetLocalHost ()
82
- osDic ["projectDir" ] = pkg .GetCurrentPath ()
83
- osDic ["hostName" ] = sysInfo .Hostname
84
- osDic ["time" ] = time .Now ().Format ("2006-01-02 15:04:05" )
75
+ return map [string ]interface {}{
76
+ "goOs" : runtime .GOOS ,
77
+ "arch" : runtime .GOARCH ,
78
+ "mem" : runtime .MemProfileRate ,
79
+ "compiler" : runtime .Compiler ,
80
+ "version" : runtime .Version (),
81
+ "numGoroutine" : runtime .NumGoroutine (),
82
+ "ip" : pkg .GetLocalHost (),
83
+ "projectDir" : pkg .GetCurrentPath (),
84
+ "hostName" : sysInfo .Hostname ,
85
+ "time" : time .Now ().Format ("2006-01-02 15:04:05" ),
86
+ }
87
+ }
85
88
89
+ func getMemoryInfo () map [string ]interface {} {
86
90
memory , _ := mem .VirtualMemory ()
87
- memDic := make ( map [string ]interface {}, 0 )
88
- memDic [ "used" ] = memory .Used / MB
89
- memDic [ "total" ] = memory .Total / MB
90
-
91
- fmt . Println ( "mem" , int ( memory . Total / memory . Used * 100 ))
92
- memDic [ "percent" ] = pkg . Round ( memory . UsedPercent , 2 )
91
+ return map [string ]interface {}{
92
+ "used" : memory .Used / MB ,
93
+ "total" : memory .Total / MB ,
94
+ "percent" : pkg . Round ( memory . UsedPercent , 2 ),
95
+ }
96
+ }
93
97
94
- swapDic := make (map [string ]interface {}, 0 )
95
- swapDic ["used" ] = memory .SwapTotal - memory .SwapFree
96
- swapDic ["total" ] = memory .SwapTotal
98
+ func getSwapInfo () map [string ]interface {} {
99
+ memory , _ := mem .VirtualMemory ()
100
+ return map [string ]interface {}{
101
+ "used" : memory .SwapTotal - memory .SwapFree ,
102
+ "total" : memory .SwapTotal ,
103
+ }
104
+ }
97
105
98
- cpuDic := make ( map [string ]interface {}, 0 )
99
- cpuDic [ " cpuInfo" ] , _ = cpu .Info ()
106
+ func getCPUInfo () map [string ]interface {} {
107
+ cpuInfo , _ : = cpu .Info ()
100
108
percent , _ := cpu .Percent (0 , false )
101
- cpuDic ["percent" ] = pkg .Round (percent [0 ], 2 )
102
- cpuDic ["cpuNum" ], _ = cpu .Counts (false )
109
+ cpuNum , _ := cpu .Counts (false )
110
+ return map [string ]interface {}{
111
+ "cpuInfo" : cpuInfo ,
112
+ "percent" : pkg .Round (percent [0 ], 2 ),
113
+ "cpuNum" : cpuNum ,
114
+ }
115
+ }
103
116
104
- //服务器磁盘信息
105
- disklist := make ([]disk.UsageStat , 0 )
106
- //所有分区
117
+ func getDiskInfo () map [string ]interface {} {
107
118
var diskTotal , diskUsed , diskUsedPercent float64
119
+ diskList := make ([]disk.UsageStat , 0 )
120
+
108
121
diskInfo , err := disk .Partitions (true )
109
122
if err == nil {
110
123
for _ , p := range diskInfo {
111
124
diskDetail , err := disk .Usage (p .Mountpoint )
112
125
if err == nil {
113
126
diskDetail .UsedPercent , _ = strconv .ParseFloat (fmt .Sprintf ("%.2f" , diskDetail .UsedPercent ), 64 )
114
- diskDetail .Total = diskDetail .Total / 1024 / 1024
115
- diskDetail .Used = diskDetail .Used / 1024 / 1024
116
- diskDetail .Free = diskDetail .Free / 1024 / 1024
117
- disklist = append (disklist , * diskDetail )
118
-
127
+ diskDetail .Total /= MB
128
+ diskDetail .Used /= MB
129
+ diskDetail .Free /= MB
130
+ diskList = append (diskList , * diskDetail )
119
131
}
120
132
}
121
133
}
122
134
123
135
d , _ := disk .Usage ("/" )
124
-
125
136
diskTotal = float64 (d .Total / GB )
126
137
diskUsed = float64 (d .Used / GB )
127
138
diskUsedPercent , _ = strconv .ParseFloat (fmt .Sprintf ("%.2f" , d .UsedPercent ), 64 )
128
139
129
- diskDic := make (map [string ]interface {}, 0 )
130
- diskDic ["total" ] = diskTotal
131
- diskDic ["used" ] = diskUsed
132
- diskDic ["percent" ] = diskUsedPercent
133
-
134
- bootTime , _ := host .BootTime ()
135
- cachedBootTime = time .Unix (int64 (bootTime ), 0 )
140
+ return map [string ]interface {}{
141
+ "total" : diskTotal ,
142
+ "used" : diskUsed ,
143
+ "percent" : diskUsedPercent ,
144
+ }
145
+ }
136
146
137
- TrackNetworkSpeed ()
138
- netDic := make (map [string ]interface {}, 0 )
139
- netDic ["in" ] = pkg .Round (float64 (netInSpeed / KB ), 2 )
140
- netDic ["out" ] = pkg .Round (float64 (netOutSpeed / KB ), 2 )
141
- e .Custom (gin.H {
142
- "code" : 200 ,
143
- "os" : osDic ,
144
- "mem" : memDic ,
145
- "cpu" : cpuDic ,
146
- "disk" : diskDic ,
147
- "net" : netDic ,
148
- "swap" : swapDic ,
149
- "location" : "Aliyun" ,
150
- "bootTime" : GetHourDiffer (cachedBootTime .Format ("2006-01-02 15:04:05" ), time .Now ().Format ("2006-01-02 15:04:05" )),
151
- })
147
+ func getNetworkInfo () map [string ]interface {} {
148
+ netInSpeed , netOutSpeed := trackNetworkSpeed ()
149
+ return map [string ]interface {}{
150
+ "in" : pkg .Round (float64 (netInSpeed / KB ), 2 ),
151
+ "out" : pkg .Round (float64 (netOutSpeed / KB ), 2 ),
152
+ }
152
153
}
153
154
154
- func TrackNetworkSpeed ( ) {
155
- var innerNetInTransfer , innerNetOutTransfer uint64
155
+ func trackNetworkSpeed () ( uint64 , uint64 ) {
156
+ var netInSpeed , netOutSpeed , netInTransfer , netOutTransfer , lastUpdateNetStats uint64
156
157
nc , err := net .IOCounters (true )
157
158
if err == nil {
158
159
for _ , v := range nc {
159
160
if isListContainsStr (excludeNetInterfaces , v .Name ) {
160
161
continue
161
162
}
162
- innerNetInTransfer += v .BytesRecv
163
- innerNetOutTransfer += v .BytesSent
163
+ netInTransfer += v .BytesRecv
164
+ netOutTransfer += v .BytesSent
164
165
}
165
166
now := uint64 (time .Now ().Unix ())
166
167
diff := now - lastUpdateNetStats
167
168
if diff > 0 {
168
- netInSpeed = (innerNetInTransfer - netInTransfer ) / diff
169
- fmt .Println ("netInSpeed" , netInSpeed )
170
- netOutSpeed = (innerNetOutTransfer - netOutTransfer ) / diff
171
- fmt .Println ("netOutSpeed" , netOutSpeed )
169
+ netInSpeed = (netInTransfer - netInTransfer ) / diff
170
+ netOutSpeed = (netOutTransfer - netOutTransfer ) / diff
172
171
}
173
- netInTransfer = innerNetInTransfer
174
- netOutTransfer = innerNetOutTransfer
175
172
lastUpdateNetStats = now
176
173
}
174
+ return netInSpeed , netOutSpeed
177
175
}
178
176
179
177
func isListContainsStr (list []string , str string ) bool {
180
- for i := 0 ; i < len ( list ); i ++ {
181
- if strings .Contains (str , list [ i ] ) {
178
+ for _ , item := range list {
179
+ if strings .Contains (str , item ) {
182
180
return true
183
181
}
184
182
}
0 commit comments