| | |
| | | package controller |
| | | |
| | | import ( |
| | | "gat1400Exchange/pkg/logger" |
| | | "gat1400Exchange/service" |
| | | "net/http" |
| | | "sync" |
| | | "time" |
| | | |
| | | "gat1400Exchange/config" |
| | | "gat1400Exchange/pkg/auth" |
| | | "gat1400Exchange/pkg/logger" |
| | | "gat1400Exchange/repository" |
| | | "gat1400Exchange/vo" |
| | | |
| | |
| | | ) |
| | | |
| | | type SystemController struct { |
| | | Auth *auth.DigestAuth |
| | | ApeRepo repository.ApeRepository |
| | | Auth *auth.DigestAuth |
| | | ApeRepo repository.ApeRepository |
| | | DevCache *sync.Map // 缓存设备类型, id为key, value为 ape 采集设备, subPlatform 下级, cascade上级 |
| | | } |
| | | |
| | | // 构造函数 |
| | |
| | | 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 |
| | | } |
| | |
| | | }) |
| | | |
| | | controller.Auth.PlainTextSecrets = true |
| | | controller.DevCache = new(sync.Map) |
| | | controller.InitDeviceCache() |
| | | |
| | | return controller |
| | | } |
| | |
| | | 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() |
| | | } |
| | | } |
| | | |
| | |
| | | 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(), |
| | |
| | | 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 |
| | |
| | | |
| | | 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) |
| | | } |
| | | |
| | | } |