fix: 网元数据模块接口调整

This commit is contained in:
TsMask
2024-01-27 18:00:45 +08:00
parent 8ab5d1a2b7
commit 3a5c3edc70
9 changed files with 152 additions and 34 deletions

View File

@@ -10,16 +10,16 @@ import (
"github.com/gin-gonic/gin"
)
// 实例化控制层 UEEventController 结构体
var NewUEEventController = &UEEventController{
// 实例化控制层 AMFController 结构体
var NewAMFController = &AMFController{
neInfoService: neService.NewNeInfoImpl,
ueEventService: neDataService.NewUEEventImpl,
}
// UE会话事件
// 网元AMF
//
// PATH /ue
type UEEventController struct {
// PATH /amf
type AMFController struct {
// 网元信息服务
neInfoService neService.INeInfo
// CDR会话事件服务
@@ -28,8 +28,8 @@ type UEEventController struct {
// UE会话列表
//
// GET /list
func (s *UEEventController) List(c *gin.Context) {
// GET /ues
func (s *AMFController) UEs(c *gin.Context) {
language := ctx.AcceptLanguage(c)
var querys model.UEEventQuery
if err := c.ShouldBindQuery(&querys); err != nil {

View File

@@ -10,16 +10,16 @@ import (
"github.com/gin-gonic/gin"
)
// 实例化控制层 CDREventController 结构体
var NewCDREventController = &CDREventController{
// 实例化控制层 IMSController 结构体
var NewIMSController = &IMSController{
neInfoService: neService.NewNeInfoImpl,
cdrEventService: neDataService.NewCDREventImpl,
}
// CDR会话事件
// 网元IMS
//
// PATH /cdr
type CDREventController struct {
// PATH /ims
type IMSController struct {
// 网元信息服务
neInfoService neService.INeInfo
// CDR会话事件服务
@@ -28,8 +28,8 @@ type CDREventController struct {
// CDR会话列表
//
// GET /list
func (s *CDREventController) List(c *gin.Context) {
// GET /cdrs
func (s *IMSController) CDRs(c *gin.Context) {
language := ctx.AcceptLanguage(c)
var querys model.CDREventQuery
if err := c.ShouldBindQuery(&querys); err != nil {

View File

@@ -5,8 +5,8 @@ import (
"ems.agt/src/framework/i18n"
"ems.agt/src/framework/utils/ctx"
"ems.agt/src/framework/vo/result"
"ems.agt/src/modules/network_data/model"
neDataService "ems.agt/src/modules/network_data/service"
"ems.agt/src/modules/network_element/model"
neService "ems.agt/src/modules/network_element/service"
"github.com/gin-gonic/gin"
)

View File

@@ -0,0 +1,52 @@
package controller
import (
"ems.agt/src/framework/i18n"
"ems.agt/src/framework/utils/ctx"
"ems.agt/src/framework/vo/result"
neDataService "ems.agt/src/modules/network_data/service"
neService "ems.agt/src/modules/network_element/service"
"github.com/gin-gonic/gin"
)
// 实例化控制层 UPFController 结构体
var NewUPFController = &UPFController{
neInfoService: neService.NewNeInfoImpl,
perfKPIService: neDataService.NewPerfKPIImpl,
}
// 网元UPF
//
// PATH /upf
type UPFController struct {
// 网元信息服务
neInfoService neService.INeInfo
// 统计信息服务
perfKPIService neDataService.IPerfKPI
}
// 总流量数 N3上行 N6下行
//
// GET /totalFlow
func (s *UPFController) TotalFlow(c *gin.Context) {
language := ctx.AcceptLanguage(c)
var querys struct {
NeID string `form:"neId" binding:"required"`
Day int `form:"day" binding:"required"`
}
if err := c.ShouldBindQuery(&querys); querys.Day <= 0 || err != nil {
c.JSON(400, result.CodeMsg(400, i18n.TKey(language, "app.common.err400")))
return
}
// 查询网元获取IP
neInfo := s.neInfoService.SelectNeInfoByNeTypeAndNeID("UPF", querys.NeID)
if neInfo.NeId != querys.NeID || neInfo.IP == "" {
c.JSON(200, result.ErrMsg(i18n.TKey(language, "app.common.noNEInfo")))
return
}
data := s.perfKPIService.SelectUPFTotalFlow(neInfo.NeType, neInfo.RmUID, querys.Day)
c.JSON(200, result.OkData(data))
}

View File

@@ -27,21 +27,31 @@ func Setup(router *gin.Engine) {
)
}
// 网元IMS
imsGroup := neDataGroup.Group("/ims")
{
// CDR会话事件信息
cdrGroup := neDataGroup.Group("/cdr")
{
cdrGroup.GET("/list",
imsGroup.GET("/cdrs",
middleware.PreAuthorize(nil),
controller.NewCDREventController.List,
controller.NewIMSController.CDRs,
)
}
// UE会话事件信息
ueGroup := neDataGroup.Group("/ue")
// 网元AMF
amfGroup := neDataGroup.Group("/amf")
{
ueGroup.GET("/list",
amfGroup.GET("/ues",
middleware.PreAuthorize(nil),
controller.NewUEEventController.List,
controller.NewAMFController.UEs,
)
}
// 网元UPF
upfGroup := neDataGroup.Group("/upf")
{
upfGroup.GET("/totalFlow",
middleware.PreAuthorize(nil),
controller.NewUPFController.TotalFlow,
)
}

View File

@@ -1,12 +1,15 @@
package repository
import "ems.agt/src/modules/network_element/model"
import "ems.agt/src/modules/network_data/model"
// 性能统计 数据层接口
type IPerfKPI interface {
// SelectGoldKPI 通过网元指标数据信息
SelectGoldKPI(query model.GoldKPIQuery, kpiIds []string) []map[string]any
// SelectGoldKPITitle
// SelectGoldKPITitle 网元对应的指标名称
SelectGoldKPITitle(neType string) []model.GoldKPITitle
// SelectUPFTotalFlow 查询UPF总流量 N3上行 N6下行
SelectUPFTotalFlow(neType, rmUID, startDate, endDate string) []map[string]any
}

View File

@@ -6,7 +6,7 @@ import (
"ems.agt/src/framework/datasource"
"ems.agt/src/framework/logger"
"ems.agt/src/modules/network_element/model"
"ems.agt/src/modules/network_data/model"
)
// 实例化数据层 PerfKPIImpl 结构体
@@ -44,7 +44,7 @@ func (r *PerfKPIImpl) SelectGoldKPI(query model.GoldKPIQuery, kpiIds []string) [
// 查询字段列
timeFormat := "DATE_FORMAT(gk.start_time, '%Y-%m-%d %H:')"
minuteGroup := fmt.Sprintf("LPAD(FLOOR(MINUTE(gk.start_time) / %d) * %d, 2, '0')", query.Interval, query.Interval)
minuteGroup := fmt.Sprintf("LPAD(FLOOR(SECOND(gk.start_time) / %d) * %d, 2, '0')", query.Interval, query.Interval)
groupByField := fmt.Sprintf("CONCAT( %s, %s ) AS timeGroup", timeFormat, minuteGroup)
var fields = []string{
groupByField,
@@ -79,12 +79,48 @@ func (r *PerfKPIImpl) SelectGoldKPI(query model.GoldKPIQuery, kpiIds []string) [
return results
}
// SelectGoldKPITitle 通过网元指标数据信息
// SelectGoldKPITitle 网元对应的指标名称
func (r *PerfKPIImpl) SelectGoldKPITitle(neType string) []model.GoldKPITitle {
result := []model.GoldKPITitle{}
tx := datasource.DefaultDB().Table("kpi_title").Where("ne_type = ?", neType).Find(&result)
if err := tx.Error; err != nil {
logger.Errorf("Delete err => %v", err)
logger.Errorf("Find err => %v", err)
}
return result
}
// SelectUPFTotalFlow 查询UPF总流量 N3上行 N6下行
func (r *PerfKPIImpl) SelectUPFTotalFlow(neType, rmUID, startDate, endDate string) []map[string]any {
// 查询条件拼接
var conditions []string
var params []any
if neType != "" {
conditions = append(conditions, "gk.ne_type = ?")
params = append(params, neType)
}
if rmUID != "" {
conditions = append(conditions, "gk.rm_uid = ?")
params = append(params, rmUID)
}
if startDate != "" {
conditions = append(conditions, "gk.date >= ?")
params = append(params, startDate)
}
if endDate != "" {
conditions = append(conditions, "gk.date <= ?")
params = append(params, endDate)
}
// 构建查询条件语句
whereSql := ""
if len(conditions) > 0 {
whereSql += " where " + strings.Join(conditions, " and ")
}
// 查询数据
querySql := fmt.Sprintf("SELECT sum( CASE WHEN gk.kpi_id = 'UPF.03' THEN gk.VALUE ELSE 0 END ) AS 'up', sum( CASE WHEN gk.kpi_id = 'UPF.06' THEN gk.VALUE ELSE 0 END ) AS 'down' FROM gold_kpi gk %s", whereSql)
results, err := datasource.RawDB("", querySql, params)
if err != nil {
logger.Errorf("query err => %v", err)
}
return results
}

View File

@@ -1,12 +1,15 @@
package service
import "ems.agt/src/modules/network_element/model"
import "ems.agt/src/modules/network_data/model"
// 性能统计 服务层接口
type IPerfKPI interface {
// SelectGoldKPI 通过网元指标数据信息
SelectGoldKPI(query model.GoldKPIQuery) []map[string]any
// SelectGoldKPITitle
// SelectGoldKPITitle 网元对应的指标名称
SelectGoldKPITitle(neType string) []model.GoldKPITitle
// SelectUPFTotalFlow 查询UPF总流量 N3上行 N6下行
SelectUPFTotalFlow(neType, rmUID string, day int) []map[string]any
}

View File

@@ -1,8 +1,10 @@
package service
import (
"ems.agt/src/modules/network_element/model"
"ems.agt/src/modules/network_element/repository"
"time"
"ems.agt/src/modules/network_data/model"
"ems.agt/src/modules/network_data/repository"
)
// 实例化数据层 PerfKPIImpl 结构体
@@ -32,7 +34,19 @@ func (r *PerfKPIImpl) SelectGoldKPI(query model.GoldKPIQuery) []map[string]any {
return data
}
// SelectGoldKPITitle 通过网元指标数据信息
// SelectGoldKPITitle 网元对应的指标名称
func (r *PerfKPIImpl) SelectGoldKPITitle(neType string) []model.GoldKPITitle {
return r.perfKPIRepository.SelectGoldKPITitle(neType)
}
// SelectUPFTotalFlow 查询UPF总流量 N3上行 N6下行
func (r *PerfKPIImpl) SelectUPFTotalFlow(neType, rmUID string, day int) []map[string]any {
// 获取当前日期
now := time.Now()
endDate := now.Format("2006-01-02")
// 将当前日期加天数
afterDays := now.AddDate(0, 0, -day)
startDate := afterDays.Format("2006-01-02")
return r.perfKPIRepository.SelectUPFTotalFlow(neType, rmUID, startDate, endDate)
}