【BUG修复】视频综合管理平台EasyNVS首页设备接入情况显示与实际不符如何调整?

大家知道,在RTSP协议摄像头没有公网固定IP的情况下,TSINGSEE青犀视频云边端架构中的EasyNVR是部署在内网的,而要实现公网直播,则需要在公网部署一套EasyNVS视频综合管理平台,用于同一接入管理EasyNVR。

NVS.png

这几天TSINGSEE青犀视频团队在运行EasyNVS进行测试,进入首页后查看设备接入情况及运行情况,测试中EasyNVS并未接入设备,但在首页的设备接入情况中,显示接入了4套设备。

84.png

然而当查找设备时,有无法查询到设备,显示的信息与实际不符:

85.png

通过接口查看是调用EasyNVS的/api/v1/stats这个接口,然后查看后端代码,所有的数据都是这个里面。

func (h *APIHandler) Stats(c *gin.Context) {
   devices := make([]*models.Device, 0)
   deviceData := make([]map[string]interface{}, 0)
   db.SQLite.Model(models.Device{}).Order("created_at desc").Find(&devices)
   deviceCount := len(devices)
   onlineDeviceCount := 0
   channelCount := 0
   enabledChannelCount := 0
   onlineChannelCount := 0
   for _, dev := range devices {
      if dev.Online {
         deviceData = append(deviceData, map[string]interface{}{
            "ID":              dev.ID,
            "Name":            dev.Name,
            "DiskTotalSize":   dev.DiskTotalSize,
            "DiskUsedSize":    dev.DiskUsedSize,
            "DiskUsedPercent": dev.DiskUsedPercent,
            "CPUUsedPercent":  dev.CpuUsedPercent,
            "MEMUsedPercent":  dev.MemUsedPercent,
         })
         onlineDeviceCount++
         onlineChannelCount += dev.OnlineChannelCount
      }
      channelCount += dev.ChannelCount
      enabledChannelCount += dev.EnabledChannelCount
   }
   totoalInBytes := server.StatsGetServer().TotalTrafficIn
   totalOutBytes := server.StatsGetServer().TotalTrafficOut
   todayInBytes := server.StatsGetServer().TodayTrafficIn
   todayOutBytes := server.StatsGetServer().TodayTrafficOut
   c.IndentedJSON(200, gin.H{
      "CPUData":             cpuData,
      "MEMData":             memData,
      "InBitrateData":       inBitrateData,
      "OutBitrateData":      outBitrateData,
      "DeviceData":          deviceData,
      "MessageData":         models.GetLatestSysMsg(10),
      "TotalInBytes":        totoalInBytes,
      "TotalOutBytes":       totalOutBytes,
      "TodayInBytes":        todayInBytes,
      "TodayOutBytes":       todayOutBytes,
      "DeviceCount":         deviceCount,
      "OnlineDeviceCount":   onlineDeviceCount,
      "ChannelCount":        channelCount,
      "EnabledChannelCount": enabledChannelCount,
      "OnlineChannelCount":  onlineChannelCount,
   })
}

可以看到代码都是没有问题的。于是查看数据库,发现device表中有很多之前连接上来,但后来下线却没有删除的数据,于是就确定了是这些数据导致的问题。

要解决该问题,我们可以找到EasyNVR下线的地方,在此处添加一个删除设备表的操作。参考代码如下:

case *server.HttpOutConf:
   log.Printf("<<<<<< EasyNVR [ID=%s, Name=%s] closed <<<<<<", conf.DeviceID, conf.DeviceName)
   models.OfflineDevice(conf.DeviceID)
   db.SQLite.Create(&models.SysMsg{
      Type:    "device",
      Level:   1,
      Content: fmt.Sprintf("设备%s下线", conf.DeviceName),
   })
   // 删除设备表
   var device models.Device
   db.SQLite.Where("id = ?", conf.DeviceID).First(&device)
   if device.ID != "" {
      db.SQLite.Delete(&device)
   }

于是EasyNVS在线,EasyNVR主动下线后数据仍存在的问题消除了。

但是还存在另一种情况,即EasyNVR已经连接到EasyNVS了,EasyNVS关掉,EasyNVR下线,此时重新启动EasyNVS,EasyNVS中仍有接入过得EasyNVR的信息。

该情况比较简单,我们只需在启动EasyNVS的时候,先将device表清空,这样就规避了这个情况了。

p.StartHTTP()
// 启动时清空已经连接上来的设备(device)
db.SQLite.Delete(&models.Device{})

EasyNVS云管理平台的web界面清晰呈现设备接入状况、运行时长、宽带使用、存储空间和流量统计等状态,运维者直观获悉平台及设备健康状态,通过管理平台远程定位故障,帮助运维人员提高网络排查效率。获得EasyNVR的永久授权即可同步使用EasyNVS管理平台,欢迎大家联系我们了解咨询。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值