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 }