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


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

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

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

    通过接口查看是调用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管理平台,欢迎大家联系我们了解咨询。

  • 相关阅读:
    搭建armlinuxgcc交叉编译工具链环境(Android原生(JNI)开发环境搭建)
    linux vi命令详解
    Android手机在开发调试时logcat不显示输出信息的解决办法
    2012的总结和13的展望
    Gvim编码学习笔记
    vue自定义过滤器格式化时间为年、月、日、小时、分钟、刚刚 J
    学校网站群建设理念
    何为真正网站群?
    手机网站——移动互联网新趋势
    建站是浮云,We7很给力
  • 原文地址:https://www.cnblogs.com/EasyNVR/p/13924441.html
Copyright © 2020-2023  润新知