153 lines
3.3 KiB
Go
153 lines
3.3 KiB
Go
|
package main
|
||
|
|
||
|
import (
|
||
|
"bytes"
|
||
|
"fmt"
|
||
|
"github.com/shirou/gopsutil/disk"
|
||
|
"github.com/shirou/gopsutil/mem"
|
||
|
"os/exec"
|
||
|
"time"
|
||
|
)
|
||
|
|
||
|
type SystemState struct{
|
||
|
MemTotal string `json:"MemTotal"`
|
||
|
MemUse string `json:"MemUse"`
|
||
|
DiskTotal string `json:"DiskTotal"`
|
||
|
DiskUse string `json:"DiskUse"`
|
||
|
Name string `json:"Name"`
|
||
|
SN string `json:"SN"`
|
||
|
HardVer string `json:"HardVer"`
|
||
|
SoftVer string `json:"SoftVer"`
|
||
|
SystemRTC string `json:"SystemRTC"`
|
||
|
RunTime string `json:"RunTime"` //累计时间
|
||
|
DeviceOnline string `json:"DeviceOnline"` //设备在线率
|
||
|
DevicePacketLoss string `json:"DevicePacketLoss"` //设备丢包率
|
||
|
}
|
||
|
|
||
|
type DataPointTemplate struct{
|
||
|
Value string
|
||
|
Time string
|
||
|
}
|
||
|
|
||
|
type DataStreamTemplate struct{
|
||
|
DataPoint []DataPointTemplate `json:"DataPoint"`
|
||
|
DataPointCnt int `json:"DataPointCnt"`
|
||
|
Legend string `json:"Legend"` //别名
|
||
|
}
|
||
|
|
||
|
var systemState = SystemState{
|
||
|
MemTotal :"0",
|
||
|
MemUse :"0",
|
||
|
DiskTotal : "0",
|
||
|
DiskUse :"0",
|
||
|
Name :"WDT600",
|
||
|
SN :"22005260001",
|
||
|
HardVer :"WDT600-V.A",
|
||
|
SoftVer :"V0.0.1",
|
||
|
SystemRTC :"2020-05-26 12:00:00",
|
||
|
RunTime :"0",
|
||
|
DeviceOnline :"100",
|
||
|
DevicePacketLoss : "0",
|
||
|
}
|
||
|
|
||
|
var timeStart time.Time
|
||
|
var (
|
||
|
|
||
|
MemoryDataStream *DataStreamTemplate
|
||
|
DiskDataStream *DataStreamTemplate
|
||
|
DeviceOnlineDataStream *DataStreamTemplate
|
||
|
DevicePacketLossDataStream *DataStreamTemplate
|
||
|
)
|
||
|
|
||
|
|
||
|
func mCmdReboot() {
|
||
|
cmd := exec.Command("reboot")
|
||
|
var out bytes.Buffer
|
||
|
cmd.Stdout = &out
|
||
|
cmd.Start()
|
||
|
|
||
|
str := out.String()
|
||
|
fmt.Println(str)
|
||
|
}
|
||
|
|
||
|
func getMemState(){
|
||
|
|
||
|
v, _ := mem.VirtualMemory()
|
||
|
|
||
|
// almost every return value is a struct
|
||
|
//log.Printf("Mem Total: %v, Free:%v, UsedPercent:%f%%\n",
|
||
|
// v.Total/1024/1024, v.Free/1024/1024, v.UsedPercent)
|
||
|
|
||
|
systemState.MemTotal = fmt.Sprintf("%d",v.Total/1024/1024)
|
||
|
systemState.MemUse = fmt.Sprintf("%3.1f",v.UsedPercent)
|
||
|
}
|
||
|
|
||
|
func getDiskState(){
|
||
|
|
||
|
v, _ := disk.Usage("/opt")
|
||
|
|
||
|
// almost every return value is a struct
|
||
|
//log.Printf("Disk Total: %v, Free:%v, UsedPercent:%f%%\n",
|
||
|
// v.Total/1024/1024, v.Free/1024/1024, v.UsedPercent)
|
||
|
|
||
|
systemState.DiskTotal = fmt.Sprintf("%d",v.Total/1024/1024)
|
||
|
systemState.DiskUse = fmt.Sprintf("%3.1f",v.UsedPercent)
|
||
|
}
|
||
|
|
||
|
func setTimeStart(){
|
||
|
|
||
|
timeStart = time.Now()
|
||
|
}
|
||
|
|
||
|
func getRunTime(){
|
||
|
|
||
|
elapsed := time.Since(timeStart)
|
||
|
sec := int64(elapsed.Seconds())
|
||
|
day := sec/86400
|
||
|
hour := sec%86400/3600
|
||
|
min := sec%3600/60
|
||
|
sec = sec % 60
|
||
|
|
||
|
strRunTime := fmt.Sprintf("%d天%d时%d分%d秒",day,hour,min,sec)
|
||
|
|
||
|
systemState.SystemRTC = time.Now().Format("2006-01-02 15:04:05")
|
||
|
systemState.RunTime = strRunTime
|
||
|
}
|
||
|
|
||
|
func newDataStreamTemplate(legend string) *DataStreamTemplate{
|
||
|
|
||
|
return &DataStreamTemplate{
|
||
|
DataPoint: make([]DataPointTemplate,0),
|
||
|
DataPointCnt: 0,
|
||
|
Legend: legend,
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func (d *DataStreamTemplate)AddDataPoint(data DataPointTemplate){
|
||
|
|
||
|
if d.DataPointCnt < 300{
|
||
|
d.DataPoint = append(d.DataPoint,data)
|
||
|
d.DataPointCnt++
|
||
|
}else{
|
||
|
d.DataPoint = d.DataPoint[1:]
|
||
|
d.DataPoint = append(d.DataPoint,data)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func CollectSystemParam(){
|
||
|
|
||
|
getMemState()
|
||
|
getRunTime()
|
||
|
|
||
|
point := DataPointTemplate{}
|
||
|
|
||
|
point.Value = systemState.MemUse
|
||
|
point.Time = systemState.SystemRTC
|
||
|
MemoryDataStream.AddDataPoint(point)
|
||
|
|
||
|
point.Value = systemState.DiskUse
|
||
|
point.Time = systemState.SystemRTC
|
||
|
DiskDataStream.AddDataPoint(point)
|
||
|
}
|
||
|
|