zhangzengfei
2024-05-18 3771d5551480964ab17f4c23a152df2482bf6470
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,10 @@
   })
   controller.Auth.PlainTextSecrets = true
   for k, v := range svr.CollectDeviceType() {
      controller.DevCache.Store(k, v)
   }
   return controller
}
@@ -61,10 +71,18 @@
   }
   if user == config.ServeConf.Username {
      s.DevCache.Store(req.RegisterObject.DeviceID, "ape")
      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, 可能是新添加的上下级, 更新缓存
      _, ok := s.DevCache.Load(req.RegisterObject.DeviceID)
      if ok {
         s.ApeRepo.CollectDeviceType()
      }
   }
@@ -79,8 +97,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(),