package service
|
|
import (
|
"bytes"
|
"encoding/json"
|
"errors"
|
"io"
|
"net/http"
|
|
"vamicro/config"
|
"vamicro/system-service/sys"
|
|
"vamicro/device-client/models"
|
)
|
|
type DevReportData struct {
|
Code string `json:"code"` // 设备ID
|
Type string `json:"type"` // 设备类型
|
Model string `json:"model"` // 设备型号
|
SerialNum string `json:"serialNum"` // 硬件序列号
|
Name string `json:"name"` // 设备名称
|
Org string `json:"org"` // 所属机构
|
Position string `json:"position"` // 具体位置
|
Addr string `json:"addr"` // 地址
|
Longitude string `json:"lon"` // 经度
|
Latitude string `json:"lat"` // 纬度
|
Desc string `json:"desc"` // 设备描述
|
InstallTime string `json:"installTime"` // 安装时间
|
UpTime string `json:"upTime"` // 启动时间
|
Hardware map[string]interface{} `json:"hardware"` // 硬件信息
|
IpAddr string `json:"ip"`
|
}
|
|
func ReportDeviceInfo() error {
|
if models.ReportConfig.ServerAddr == "" {
|
return errors.New("server addr is empty !")
|
}
|
|
device := DevReportData{
|
Code: config.Server.AnalyServerId,
|
Type: config.Server.DeviceType,
|
Model: config.Server.DeviceModel,
|
SerialNum: config.Server.DeviceSerialNum,
|
|
Name: models.DeviceInfo.Name,
|
Org: models.DeviceInfo.Org,
|
Position: models.DeviceInfo.Position,
|
Addr: models.DeviceInfo.Addr,
|
Longitude: models.DeviceInfo.Latitude,
|
Latitude: models.DeviceInfo.Latitude,
|
Desc: models.DeviceInfo.Desc,
|
InstallTime: models.DeviceInfo.InstallTime,
|
}
|
|
// 添加ip
|
device.IpAddr, _, _ = sys.GetLocalIP(config.Server.NetworkAdapter)
|
// 添加硬件信息
|
device.Hardware = sys.GetDeviceInfo()
|
delete(device.Hardware, "cpu")
|
|
// 添加温度
|
device.Hardware["temp"] = sys.GetDeviceTemp()
|
|
data, err := json.Marshal(device)
|
if err != nil {
|
return err
|
}
|
|
_, err = HttpPost(models.ReportConfig.ServerAddr, nil, data)
|
|
return err
|
}
|
|
func HttpPost(url string, header map[string]string, data []byte) ([]byte, error) {
|
req, err := http.NewRequest(http.MethodPost, url, bytes.NewBuffer(data))
|
if err != nil {
|
return nil, err
|
}
|
req.Header.Set("Content-Type", "applicaiton/json; charset=UTF-8")
|
if header != nil {
|
for k, v := range header {
|
req.Header.Set(k, v)
|
}
|
}
|
cli := &http.Client{}
|
resp, err := cli.Do(req)
|
if err != nil {
|
return nil, err
|
}
|
defer resp.Body.Close()
|
body, err := io.ReadAll(resp.Body)
|
if err != nil {
|
return nil, err
|
}
|
return body, nil
|
}
|