| | |
| | | |
| | | import ( |
| | | "encoding/json" |
| | | "fmt" |
| | | "time" |
| | | |
| | | "gat1400Exchange/config" |
| | | "gat1400Exchange/pkg/logger" |
| | | "gat1400Exchange/models" |
| | | "gat1400Exchange/pkg/logger" |
| | | "gat1400Exchange/util" |
| | | |
| | | "github.com/hashicorp/golang-lru/v2/expirable" |
| | | ) |
| | | |
| | | var deviceAliveCache *expirable.LRU[string, bool] |
| | | |
| | | func init() { |
| | | deviceAliveCache = expirable.NewLRU[string, bool](100, nil, time.Second*60) |
| | | } |
| | | |
| | | type DevReportData struct { |
| | | Code string `json:"code"` // 设备ID |
| | |
| | | return nil |
| | | } |
| | | |
| | | logger.Info("Start device info report task, server:%s.", config.ForwardConf.ReportServer) |
| | | logger.Info("Start device report task, server:%s.", config.ForwardConf.ReportServer) |
| | | |
| | | var d models.Device |
| | | var d models.Ape |
| | | devices, err := d.FindAll() |
| | | if err != nil { |
| | | return err |
| | | } |
| | | |
| | | for _, dev := range devices{ |
| | | if _, exists := deviceAliveCache.Get(dev.Id); !exists { |
| | | continue |
| | | for _, dev := range devices { |
| | | // 级联的设备不检查心跳 |
| | | if dev.FromId == "" { |
| | | hTime, err := time.ParseInLocation("2006-01-02 15:04:05", dev.HeartbeatTime, time.Local) |
| | | if err != nil || hTime.Unix()+120 < time.Now().Unix() { |
| | | continue |
| | | } |
| | | } |
| | | |
| | | device := DevReportData{ |
| | | Code: dev.Id, |
| | | Model: dev.Ext.Model, |
| | | Type: "camera", |
| | | Name: dev.Name, |
| | | Addr: dev.Addr+dev.Floor, |
| | | IpAddr: dev.Ip, |
| | | Addr: dev.Ext.Place, |
| | | IpAddr: dev.Ext.IPAddr, |
| | | Latitude: fmt.Sprintf("%f", dev.Ext.Latitude), |
| | | Longitude: fmt.Sprintf("%f", dev.Ext.Longitude), |
| | | } |
| | | |
| | | data, err := json.Marshal(device) |
| | |
| | | return err |
| | | } |
| | | |
| | | logger.Info("Report device info. %+v", dev) |
| | | |
| | | headers := map[string]string{"Content-Type": "applicaiton/json; charset=UTF-8"} |
| | | headers := map[string]string{"Content-Type": "application/json; charset=UTF-8"} |
| | | _, err = util.HttpPost(config.ForwardConf.ReportServer, headers, data) |
| | | if err != nil { |
| | | return err |
| | |
| | | } |
| | | |
| | | return nil |
| | | } |
| | | |
| | | func KeepDeviceAlive(id string) { |
| | | // 上报设备信息 |
| | | var d = models.Device{ |
| | | Id: id, |
| | | } |
| | | |
| | | err := d.Upsert() |
| | | if err != nil { |
| | | logger.Warn("Device db update camera error:%s", err.Error()) |
| | | } |
| | | |
| | | deviceAliveCache.Add(id, true) |
| | | } |