zhangzengfei
2024-06-05 8c2d873b46cd91d4e7bd2fc55137b9190689e9b8
controller/systemCtl.go
@@ -1,13 +1,13 @@
package controller
import (
   "gat1400Exchange/pkg/logger"
   "gat1400Exchange/service"
   "net/http"
   "sync"
   "time"
   "gat1400Exchange/config"
   "gat1400Exchange/pkg/auth"
   "gat1400Exchange/pkg/logger"
   "gat1400Exchange/repository"
   "gat1400Exchange/vo"
@@ -15,8 +15,9 @@
)
type SystemController struct {
   Auth    *auth.DigestAuth
   ApeRepo repository.ApeRepository
   Auth     *auth.DigestAuth
   ApeRepo  repository.ApeRepository
   DevCache *sync.Map // 缓存设备类型, id为key, value为 ape 采集设备, subPlatform 下级, cascade上级
}
// 构造函数
@@ -24,7 +25,12 @@
   svr := repository.NewApeRepository()
   controller := SystemController{ApeRepo: svr}
   controller.Auth = auth.NewDigestAuthenticator("Basic Realm", func(user, realm string) string {
   realm := "Basic Realm"
   if config.ServeConf.Realm != "" {
      realm = config.ServeConf.Realm
   }
   controller.Auth = auth.NewDigestAuthenticator(realm, func(user, realm string) string {
      if user == config.ServeConf.Username {
         return config.ServeConf.Password
      }
@@ -33,6 +39,8 @@
   })
   controller.Auth.PlainTextSecrets = true
   controller.DevCache = new(sync.Map)
   controller.InitDeviceCache()
   return controller
}
@@ -60,11 +68,18 @@
      LocalTime:    time.Now().Format("20060102150405"),
   }
   if user == config.ServeConf.Username {
   if user == config.ServeConf.Username || user == req.RegisterObject.DeviceID {
      s.DevCache.Store(req.RegisterObject.DeviceID, 0)
      if err := s.ApeRepo.Create(req.RegisterObject.DeviceID); err != nil {
         logger.Warn("Create ape failure,%s", err.Error())
         c.AbortWithStatus(http.StatusInternalServerError)
         return
      }
   } else {
      // 未缓存的id, 可能是新添加的上下级, 更新缓存
      if _, ok := s.DevCache.Load(req.RegisterObject.DeviceID); !ok {
         s.InitDeviceCache()
      }
   }
@@ -79,8 +94,9 @@
      return
   }
   service.KeepDeviceAlive(req.KeepaliveObject.DeviceID)
   s.ApeRepo.Keepalive(req.KeepaliveObject.DeviceID)
   if devType, ok := s.DevCache.Load(req.KeepaliveObject.DeviceID); ok {
      s.ApeRepo.Keepalive(req.KeepaliveObject.DeviceID, devType.(int))
   }
   rspMsg := vo.ResponseStatus{
      RequestURL:   c.FullPath(),
@@ -142,7 +158,8 @@
      return
   }
   err := s.ApeRepo.Update(&req)
   fromId := c.Param("from_id")
   err := s.ApeRepo.Save(fromId, &req)
   if err != nil {
      c.JSON(http.StatusBadRequest, gin.H{"msg": err.Error()})
      return
@@ -150,3 +167,16 @@
   c.JSON(http.StatusOK, gin.H{"msg": "ok"})
}
func (s SystemController) InitDeviceCache() {
   // 清空
   s.DevCache.Range(func(key, value interface{}) bool {
      s.DevCache.Delete(key)
      return true
   })
   for k, v := range s.ApeRepo.CollectDeviceType() {
      s.DevCache.Store(k, v)
   }
}