From f946512f64f1e2e9aa887f62f04f8ebedb53d810 Mon Sep 17 00:00:00 2001
From: zhangzengfei <zhangzengfei@smartai.com>
Date: 星期三, 22 五月 2024 15:20:21 +0800
Subject: [PATCH] 优化重传, 修改为每次读取一条记录
---
service/device.go | 71 ++++++++++++++++-------------------
1 files changed, 33 insertions(+), 38 deletions(-)
diff --git a/service/device.go b/service/device.go
index acfaf18..c552a4c 100644
--- a/service/device.go
+++ b/service/device.go
@@ -2,22 +2,13 @@
import (
"encoding/json"
+ "fmt"
"time"
- "errors"
"gat1400Exchange/config"
- "gat1400Exchange/pkg/logger"
"gat1400Exchange/models"
"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
@@ -38,34 +29,54 @@
}
func DeviceInfoReportTask() error {
- logger.Info("Start device info report task, server:%s.", config.ForwardConf.ReportServer)
-
if config.ServeConf.Role == "agent" {
return nil
}
- if config.ForwardConf.ReportServer == "" {
- return errors.New("Server addr is empty!")
- }
-
- var d models.Device
+ var d models.Ape
devices, err := d.FindAll()
if err != nil {
return err
}
+ for _, dev := range devices {
+ // 绾ц仈鐨勮澶囦笉妫�鏌ュ績璺�
+ if dev.FromId == "" {
+ hTime, err := time.ParseInLocation("2006-01-02 15:04:05", dev.HeartbeatTime, time.Local)
+ if err != nil {
+ dev.HeartbeatTime = time.Now().Format("2006-01-02 15:04:05")
+ dev.Ext.IsOnline = "1"
+ } else {
+ if hTime.Unix()+120 >= time.Now().Unix() {
+ dev.Ext.IsOnline = "1"
+ } else {
+ dev.Ext.IsOnline = "2"
+ }
+ }
- for _, dev := range devices{
- if _, exists := deviceAliveCache.Get(dev.Id); !exists {
+ // 鏇存柊鍦ㄧ嚎鐘舵��
+ dev.Save()
+
+ // 绂荤嚎璁惧涓嶆墽琛屼笂鎶�
+ if dev.Ext.IsOnline == "2" {
+ continue
+ }
+ }
+
+ // 閰嶇疆浜嗕笂鎶ュ湴鍧�, 鎺ㄩ�佹暟鎹�
+ if config.ForwardConf.ReportServer == "" {
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)
@@ -73,9 +84,7 @@
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
@@ -83,18 +92,4 @@
}
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)
}
--
Gitblit v1.8.0