feat: 网元状态记录信息接口
This commit is contained in:
@@ -4,25 +4,23 @@ SET FOREIGN_KEY_CHECKS = 0;
|
|||||||
--
|
--
|
||||||
-- Table structure for table `ne_state`
|
-- Table structure for table `ne_state`
|
||||||
--
|
--
|
||||||
|
|
||||||
|
|
||||||
DROP TABLE IF EXISTS `ne_state`;
|
DROP TABLE IF EXISTS `ne_state`;
|
||||||
|
CREATE TABLE `ne_state` (
|
||||||
CREATE TABLE `ne_state` (
|
|
||||||
`id` int NOT NULL AUTO_INCREMENT,
|
`id` int NOT NULL AUTO_INCREMENT,
|
||||||
`ne_type` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
|
`ne_type` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '',
|
||||||
`ne_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
|
`ne_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '',
|
||||||
`version` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
|
`version` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '版本',
|
||||||
`capability` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
|
`capability` bigint DEFAULT '0' COMMENT '用户容量',
|
||||||
`serial_num` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
|
`serial_num` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '序列号',
|
||||||
`expiry_date` varchar(11) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '-',
|
`expiry_date` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '许可证到期日期',
|
||||||
`cpu_usage` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL,
|
`sys_cpu_usage` float DEFAULT '0' COMMENT 'cpu使用率-sys',
|
||||||
`mem_usage` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL,
|
`sys_mem_usage` float DEFAULT '0' COMMENT '内存使用率-sys',
|
||||||
`disk_space` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL,
|
`sys_disk_usage` float DEFAULT '0' COMMENT '磁盘使用率-sys',
|
||||||
`timestamp` datetime NULL DEFAULT CURRENT_TIMESTAMP,
|
`nf_cpu_usage` float DEFAULT '0' COMMENT 'cpu使用率-nf',
|
||||||
|
`nf_mem_used` bigint DEFAULT '0' COMMENT '内存使用KB-nf',
|
||||||
|
`create_time` bigint DEFAULT '0' COMMENT '创建时间',
|
||||||
PRIMARY KEY (`id`) USING BTREE,
|
PRIMARY KEY (`id`) USING BTREE,
|
||||||
INDEX `idx_ne_type_id`(`ne_type` ASC, `ne_id` ASC) USING BTREE,
|
KEY `idx_type_id_time` (`ne_type`,`ne_id`,`create_time`) USING BTREE COMMENT 'idx_state_ne_type_id_at'
|
||||||
INDEX `idx_timestamp`(`timestamp` ASC) USING BTREE
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='网元_状态记录内存/CPU/磁盘';
|
||||||
) ENGINE = InnoDB AUTO_INCREMENT = 8551941 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = DYNAMIC;
|
|
||||||
|
|
||||||
SET FOREIGN_KEY_CHECKS=1;
|
SET FOREIGN_KEY_CHECKS=1;
|
||||||
|
|||||||
@@ -1,21 +1,26 @@
|
|||||||
--
|
SET NAMES utf8mb4;
|
||||||
-- Table structure for table `nb_state`
|
SET FOREIGN_KEY_CHECKS = 0;
|
||||||
--
|
|
||||||
|
|
||||||
CREATE TABLE IF NOT EXISTS `nb_state` (
|
--
|
||||||
|
-- Table structure for table `ne_state`
|
||||||
|
--
|
||||||
|
DROP TABLE IF EXISTS `ne_state`;
|
||||||
|
CREATE TABLE `ne_state` (
|
||||||
`id` int NOT NULL AUTO_INCREMENT,
|
`id` int NOT NULL AUTO_INCREMENT,
|
||||||
`ne_type` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '网元类型 AMF MME',
|
`ne_type` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '',
|
||||||
`ne_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '网元ID',
|
`ne_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '',
|
||||||
`rm_uid` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '-' COMMENT '资源唯一标识',
|
`version` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '版本',
|
||||||
|
`capability` bigint DEFAULT '0' COMMENT '用户容量',
|
||||||
|
`serial_num` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '序列号',
|
||||||
|
`expiry_date` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '许可证到期日期',
|
||||||
|
`sys_cpu_usage` float DEFAULT '0' COMMENT 'cpu使用率-sys',
|
||||||
|
`sys_mem_usage` float DEFAULT '0' COMMENT '内存使用率-sys',
|
||||||
|
`sys_disk_usage` float DEFAULT '0' COMMENT '磁盘使用率-sys',
|
||||||
|
`nf_cpu_usage` float DEFAULT '0' COMMENT 'cpu使用率-nf',
|
||||||
|
`nf_mem_used` bigint DEFAULT '0' COMMENT '内存使用KB-nf',
|
||||||
`create_time` bigint DEFAULT '0' COMMENT '创建时间',
|
`create_time` bigint DEFAULT '0' COMMENT '创建时间',
|
||||||
`address` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '基站IP地址',
|
|
||||||
`name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '基站名称',
|
|
||||||
`position` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '基站位置',
|
|
||||||
`nb_name` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '-' COMMENT '基站设备名称',
|
|
||||||
`state` varchar(12) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT 'OFF' COMMENT '基站状态 OFF ON',
|
|
||||||
`time` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '-' COMMENT '状态时间',
|
|
||||||
PRIMARY KEY (`id`) USING BTREE,
|
PRIMARY KEY (`id`) USING BTREE,
|
||||||
UNIQUE KEY `uk_type_id_uid_cat` (`ne_type`,`ne_id`,`rm_uid`,`create_time`) USING BTREE COMMENT '唯一网元类型和ID'
|
KEY `idx_type_id_time` (`ne_type`,`ne_id`,`create_time`) USING BTREE COMMENT 'idx_state_ne_type_id_at'
|
||||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT='基站状态记录表';
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='网元_状态记录内存/CPU/磁盘';
|
||||||
|
|
||||||
-- Dump completed on 2025-02-08 12:50:13
|
SET FOREIGN_KEY_CHECKS=1;
|
||||||
|
|||||||
59
src/modules/network_data/controller/all_ne_state.go
Normal file
59
src/modules/network_data/controller/all_ne_state.go
Normal file
@@ -0,0 +1,59 @@
|
|||||||
|
package controller
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
|
||||||
|
"github.com/gin-gonic/gin"
|
||||||
|
|
||||||
|
"be.ems/src/framework/resp"
|
||||||
|
"be.ems/src/modules/network_data/model"
|
||||||
|
neDataService "be.ems/src/modules/network_data/service"
|
||||||
|
neService "be.ems/src/modules/network_element/service"
|
||||||
|
)
|
||||||
|
|
||||||
|
// 实例化控制层 NEStateController 结构体
|
||||||
|
var NewNEState = &NEStateController{
|
||||||
|
neInfoService: neService.NewNeInfo,
|
||||||
|
neStateService: neDataService.NewNEState,
|
||||||
|
}
|
||||||
|
|
||||||
|
// 网元状态记录
|
||||||
|
//
|
||||||
|
// PATH /ne-state
|
||||||
|
type NEStateController struct {
|
||||||
|
neInfoService *neService.NeInfo // 网元信息服务
|
||||||
|
neStateService *neDataService.NEState // 网元状态服务
|
||||||
|
}
|
||||||
|
|
||||||
|
// 网元状态记录-内存/CPU/磁盘列表
|
||||||
|
//
|
||||||
|
// GET /list
|
||||||
|
//
|
||||||
|
// @Tags network_data
|
||||||
|
// @Accept json
|
||||||
|
// @Produce json
|
||||||
|
// @Param neType query string true "NE Type" Enums(IMS,AMF,AUSF,UDM,SMF,PCF,NSSF,NRF,UPF,MME,CBC,OMC,SGWC,SMSC) default(AMF)
|
||||||
|
// @Param neId query string true "NE ID" default(001)
|
||||||
|
// @Param pageNum query number true "pageNum" default(1)
|
||||||
|
// @Param pageSize query number true "pageSize" default(10)
|
||||||
|
// @Param startTime query number false "Start time (timestamped milliseconds)" default(1729162507596)
|
||||||
|
// @Param endTime query number false "End time (timestamped milliseconds)" default(1729164187611)
|
||||||
|
// @Param sortField query string false "Sort fields, fill in result fields" Enums(id,create_time) default(id)
|
||||||
|
// @Param sortOrder query string false "Sort by ascending or descending order" Enums(asc,desc) default(asc)
|
||||||
|
// @Success 200 {object} object "Response Results"
|
||||||
|
// @Security TokenAuth
|
||||||
|
// @Summary NE Status Record - Memory/CPU/Disk List
|
||||||
|
// @Description NE Status Record - Memory/CPU/Disk List
|
||||||
|
// @Router /ne-state/list [get]
|
||||||
|
func (s NEStateController) List(c *gin.Context) {
|
||||||
|
var query model.NEStateQuery
|
||||||
|
if err := c.ShouldBindQuery(&query); err != nil {
|
||||||
|
errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err))
|
||||||
|
c.JSON(422, resp.CodeMsg(422001, errMsgs))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// 查询数据
|
||||||
|
rows, total := s.neStateService.FindByPage(query)
|
||||||
|
c.JSON(200, resp.OkData(map[string]any{"rows": rows, "total": total}))
|
||||||
|
}
|
||||||
35
src/modules/network_data/model/ne_state.go
Normal file
35
src/modules/network_data/model/ne_state.go
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
package model
|
||||||
|
|
||||||
|
// NEState 网元状态记录表 ne_state
|
||||||
|
type NEState struct {
|
||||||
|
ID int64 `json:"id" gorm:"column:id;primaryKey;autoIncrement"`
|
||||||
|
NeType string `json:"neType" gorm:"column:ne_type"`
|
||||||
|
NeId string `json:"neId" gorm:"column:ne_id"`
|
||||||
|
Version string `json:"version" gorm:"column:version"` // 版本
|
||||||
|
Capability int64 `json:"capability" gorm:"column:capability"` // 用户容量
|
||||||
|
SerialNum string `json:"serialNum" gorm:"column:serial_num"` // 序列号
|
||||||
|
ExpiryDate string `json:"expiryDate" gorm:"column:expiry_date"` // 许可证到期日期
|
||||||
|
SysCpuUsage float64 `json:"sysCpuUsage" gorm:"column:sys_cpu_usage"` // cpu使用率-sys
|
||||||
|
SysMemUsage float64 `json:"sysMemUsage" gorm:"column:sys_mem_usage"` // 内存使用率-sys
|
||||||
|
SysDiskUsage float64 `json:"sysDiskUsage" gorm:"column:sys_disk_usage"` // 磁盘使用率-sys
|
||||||
|
NfCpuUsage float64 `json:"nfCpuUsage" gorm:"column:nf_cpu_usage"` // cpu使用率-nf
|
||||||
|
NfMemUsed int64 `json:"nfMemUsed" gorm:"column:nf_mem_used"` // 内存使用KB-nf
|
||||||
|
CreateTime int64 `json:"createTime" gorm:"column:create_time"` // 创建时间
|
||||||
|
}
|
||||||
|
|
||||||
|
// TableName 表名称
|
||||||
|
func (*NEState) TableName() string {
|
||||||
|
return "ne_state"
|
||||||
|
}
|
||||||
|
|
||||||
|
// NEStateQuery 查询参数结构体
|
||||||
|
type NEStateQuery struct {
|
||||||
|
NeType string `json:"neType" form:"neType" binding:"required"`
|
||||||
|
NeID string `json:"neId" form:"neId" binding:"required"`
|
||||||
|
PageNum int64 `json:"pageNum" form:"pageNum" binding:"required"`
|
||||||
|
PageSize int64 `json:"pageSize" form:"pageSize" binding:"required"`
|
||||||
|
BeginTime string `json:"beginTime" form:"beginTime"`
|
||||||
|
EndTime string `json:"endTime" form:"endTime"`
|
||||||
|
SortField string `json:"sortField" form:"sortField" binding:"omitempty,oneof=id create_time"` // 排序字段,填写结果字段
|
||||||
|
SortOrder string `json:"sortOrder" form:"sortOrder" binding:"omitempty,oneof=asc desc"` // 排序升降序,asc desc
|
||||||
|
}
|
||||||
@@ -46,6 +46,15 @@ func Setup(router *gin.Engine) {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 网元状态记录信息
|
||||||
|
neStateGroup := neDataGroup.Group("/ne-state")
|
||||||
|
{
|
||||||
|
neStateGroup.GET("/list",
|
||||||
|
middleware.PreAuthorize(nil),
|
||||||
|
controller.NewNEState.List,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
// 基站状态历史记录信息 含AMF/MME
|
// 基站状态历史记录信息 含AMF/MME
|
||||||
nbStateGroup := neDataGroup.Group("/nb-state")
|
nbStateGroup := neDataGroup.Group("/nb-state")
|
||||||
{
|
{
|
||||||
@@ -222,6 +231,23 @@ func Setup(router *gin.Engine) {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 备份数据
|
||||||
|
backupGroup := neDataGroup.Group("/backup")
|
||||||
|
{
|
||||||
|
backupGroup.GET("/ftp",
|
||||||
|
middleware.PreAuthorize(nil),
|
||||||
|
controller.NewBackup.FTPInfo,
|
||||||
|
)
|
||||||
|
backupGroup.PUT("/ftp",
|
||||||
|
middleware.PreAuthorize(nil),
|
||||||
|
controller.NewBackup.FTPUpdate,
|
||||||
|
)
|
||||||
|
backupGroup.POST("/ftp",
|
||||||
|
middleware.PreAuthorize(nil),
|
||||||
|
controller.NewBackup.FTPPush,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
// 网元UDM 签约用户信息
|
// 网元UDM 签约用户信息
|
||||||
udmSubGroup := neDataGroup.Group("/udm/sub")
|
udmSubGroup := neDataGroup.Group("/udm/sub")
|
||||||
{
|
{
|
||||||
|
|||||||
110
src/modules/network_data/repository/ne_state.go
Normal file
110
src/modules/network_data/repository/ne_state.go
Normal file
@@ -0,0 +1,110 @@
|
|||||||
|
package repository
|
||||||
|
|
||||||
|
import (
|
||||||
|
"time"
|
||||||
|
|
||||||
|
"be.ems/src/framework/database/db"
|
||||||
|
"be.ems/src/framework/logger"
|
||||||
|
"be.ems/src/modules/network_data/model"
|
||||||
|
)
|
||||||
|
|
||||||
|
// 实例化数据层 NEState 结构体
|
||||||
|
var NewNEState = &NEState{}
|
||||||
|
|
||||||
|
// NEState 网元状态记录表 数据层处理
|
||||||
|
type NEState struct{}
|
||||||
|
|
||||||
|
// SelectByPage 分页查询集合
|
||||||
|
func (r NEState) SelectByPage(query model.NEStateQuery) ([]model.NEState, int64) {
|
||||||
|
tx := db.DB("").Model(&model.NEState{})
|
||||||
|
// 查询条件拼接
|
||||||
|
if query.NeType != "" {
|
||||||
|
tx = tx.Where("ne_type = ?", query.NeType)
|
||||||
|
}
|
||||||
|
if query.NeID != "" {
|
||||||
|
tx = tx.Where("ne_id = ?", query.NeID)
|
||||||
|
}
|
||||||
|
if query.BeginTime != "" {
|
||||||
|
startTime := query.BeginTime
|
||||||
|
if len(startTime) == 10 {
|
||||||
|
startTime = startTime + "000"
|
||||||
|
}
|
||||||
|
tx = tx.Where("create_time >= ?", startTime)
|
||||||
|
}
|
||||||
|
if query.EndTime != "" {
|
||||||
|
endTime := query.EndTime
|
||||||
|
if len(endTime) == 10 {
|
||||||
|
endTime = endTime + "999"
|
||||||
|
}
|
||||||
|
tx = tx.Where("create_time <= ?", endTime)
|
||||||
|
}
|
||||||
|
|
||||||
|
// 查询结果
|
||||||
|
var total int64 = 0
|
||||||
|
rows := []model.NEState{}
|
||||||
|
|
||||||
|
// 查询数量为0直接返回
|
||||||
|
if err := tx.Count(&total).Error; err != nil || total <= 0 {
|
||||||
|
return rows, total
|
||||||
|
}
|
||||||
|
|
||||||
|
// 排序
|
||||||
|
if query.SortField != "" {
|
||||||
|
sortField := query.SortField
|
||||||
|
if query.SortOrder == "desc" {
|
||||||
|
sortField = sortField + " desc"
|
||||||
|
}
|
||||||
|
tx = tx.Order(sortField)
|
||||||
|
}
|
||||||
|
|
||||||
|
// 查询数据分页
|
||||||
|
pageNum, pageSize := db.PageNumSize(query.PageNum, query.PageSize)
|
||||||
|
tx = tx.Limit(pageSize).Offset(pageSize * pageNum)
|
||||||
|
err := tx.Find(&rows).Error
|
||||||
|
if err != nil {
|
||||||
|
logger.Errorf("query find err => %v", err.Error())
|
||||||
|
return rows, total
|
||||||
|
}
|
||||||
|
return rows, total
|
||||||
|
}
|
||||||
|
|
||||||
|
// SelectByIds 通过ID查询
|
||||||
|
func (r NEState) SelectByIds(ids []string) []model.NEState {
|
||||||
|
rows := []model.NEState{}
|
||||||
|
if len(ids) <= 0 {
|
||||||
|
return rows
|
||||||
|
}
|
||||||
|
tx := db.DB("").Model(&model.NEState{})
|
||||||
|
// 构建查询条件
|
||||||
|
tx = tx.Where("id in ?", ids)
|
||||||
|
// 查询数据
|
||||||
|
if err := tx.Find(&rows).Error; err != nil {
|
||||||
|
logger.Errorf("query find err => %v", err.Error())
|
||||||
|
return rows
|
||||||
|
}
|
||||||
|
return rows
|
||||||
|
}
|
||||||
|
|
||||||
|
// DeleteByTime 删除信息
|
||||||
|
func (r NEState) DeleteByTime(ltTime int64) int64 {
|
||||||
|
if ltTime <= 0 {
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
tx := db.DB("").Where("create_time < ?", ltTime)
|
||||||
|
if err := tx.Delete(&model.NEState{}).Error; err != nil {
|
||||||
|
logger.Errorf("delete err => %v", err.Error())
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
return tx.RowsAffected
|
||||||
|
}
|
||||||
|
|
||||||
|
// Insert 新增信息
|
||||||
|
func (r NEState) Insert(param model.NEState) int64 {
|
||||||
|
param.CreateTime = time.Now().UnixMilli()
|
||||||
|
// 执行插入
|
||||||
|
if err := db.DB("").Create(¶m).Error; err != nil {
|
||||||
|
logger.Errorf("insert err => %v", err.Error())
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
return param.ID
|
||||||
|
}
|
||||||
31
src/modules/network_data/service/ne_state.go
Normal file
31
src/modules/network_data/service/ne_state.go
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
package service
|
||||||
|
|
||||||
|
import (
|
||||||
|
"be.ems/src/modules/network_data/model"
|
||||||
|
"be.ems/src/modules/network_data/repository"
|
||||||
|
)
|
||||||
|
|
||||||
|
// 实例化数据层 NEState 结构体
|
||||||
|
var NewNEState = &NEState{
|
||||||
|
neStateRepository: repository.NewNEState,
|
||||||
|
}
|
||||||
|
|
||||||
|
// NEState 网元状态记录表 服务层处理
|
||||||
|
type NEState struct {
|
||||||
|
neStateRepository *repository.NEState // 网元状态记录信息
|
||||||
|
}
|
||||||
|
|
||||||
|
// FindByPage 根据条件分页查询
|
||||||
|
func (r NEState) FindByPage(query model.NEStateQuery) ([]model.NEState, int64) {
|
||||||
|
return r.neStateRepository.SelectByPage(query)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Insert 插入数据
|
||||||
|
func (r NEState) Insert(item model.NEState) int64 {
|
||||||
|
return r.neStateRepository.Insert(item)
|
||||||
|
}
|
||||||
|
|
||||||
|
// DeleteByTime 删除数据
|
||||||
|
func (r NEState) DeleteByTime(ltTime int64) int64 {
|
||||||
|
return r.neStateRepository.DeleteByTime(ltTime)
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user