fix: 网元数据模块接口调整
This commit is contained in:
@@ -10,16 +10,16 @@ import (
|
|||||||
"github.com/gin-gonic/gin"
|
"github.com/gin-gonic/gin"
|
||||||
)
|
)
|
||||||
|
|
||||||
// 实例化控制层 UEEventController 结构体
|
// 实例化控制层 AMFController 结构体
|
||||||
var NewUEEventController = &UEEventController{
|
var NewAMFController = &AMFController{
|
||||||
neInfoService: neService.NewNeInfoImpl,
|
neInfoService: neService.NewNeInfoImpl,
|
||||||
ueEventService: neDataService.NewUEEventImpl,
|
ueEventService: neDataService.NewUEEventImpl,
|
||||||
}
|
}
|
||||||
|
|
||||||
// UE会话事件
|
// 网元AMF
|
||||||
//
|
//
|
||||||
// PATH /ue
|
// PATH /amf
|
||||||
type UEEventController struct {
|
type AMFController struct {
|
||||||
// 网元信息服务
|
// 网元信息服务
|
||||||
neInfoService neService.INeInfo
|
neInfoService neService.INeInfo
|
||||||
// CDR会话事件服务
|
// CDR会话事件服务
|
||||||
@@ -28,8 +28,8 @@ type UEEventController struct {
|
|||||||
|
|
||||||
// UE会话列表
|
// UE会话列表
|
||||||
//
|
//
|
||||||
// GET /list
|
// GET /ues
|
||||||
func (s *UEEventController) List(c *gin.Context) {
|
func (s *AMFController) UEs(c *gin.Context) {
|
||||||
language := ctx.AcceptLanguage(c)
|
language := ctx.AcceptLanguage(c)
|
||||||
var querys model.UEEventQuery
|
var querys model.UEEventQuery
|
||||||
if err := c.ShouldBindQuery(&querys); err != nil {
|
if err := c.ShouldBindQuery(&querys); err != nil {
|
||||||
@@ -10,16 +10,16 @@ import (
|
|||||||
"github.com/gin-gonic/gin"
|
"github.com/gin-gonic/gin"
|
||||||
)
|
)
|
||||||
|
|
||||||
// 实例化控制层 CDREventController 结构体
|
// 实例化控制层 IMSController 结构体
|
||||||
var NewCDREventController = &CDREventController{
|
var NewIMSController = &IMSController{
|
||||||
neInfoService: neService.NewNeInfoImpl,
|
neInfoService: neService.NewNeInfoImpl,
|
||||||
cdrEventService: neDataService.NewCDREventImpl,
|
cdrEventService: neDataService.NewCDREventImpl,
|
||||||
}
|
}
|
||||||
|
|
||||||
// CDR会话事件
|
// 网元IMS
|
||||||
//
|
//
|
||||||
// PATH /cdr
|
// PATH /ims
|
||||||
type CDREventController struct {
|
type IMSController struct {
|
||||||
// 网元信息服务
|
// 网元信息服务
|
||||||
neInfoService neService.INeInfo
|
neInfoService neService.INeInfo
|
||||||
// CDR会话事件服务
|
// CDR会话事件服务
|
||||||
@@ -28,8 +28,8 @@ type CDREventController struct {
|
|||||||
|
|
||||||
// CDR会话列表
|
// CDR会话列表
|
||||||
//
|
//
|
||||||
// GET /list
|
// GET /cdrs
|
||||||
func (s *CDREventController) List(c *gin.Context) {
|
func (s *IMSController) CDRs(c *gin.Context) {
|
||||||
language := ctx.AcceptLanguage(c)
|
language := ctx.AcceptLanguage(c)
|
||||||
var querys model.CDREventQuery
|
var querys model.CDREventQuery
|
||||||
if err := c.ShouldBindQuery(&querys); err != nil {
|
if err := c.ShouldBindQuery(&querys); err != nil {
|
||||||
@@ -5,8 +5,8 @@ import (
|
|||||||
"ems.agt/src/framework/i18n"
|
"ems.agt/src/framework/i18n"
|
||||||
"ems.agt/src/framework/utils/ctx"
|
"ems.agt/src/framework/utils/ctx"
|
||||||
"ems.agt/src/framework/vo/result"
|
"ems.agt/src/framework/vo/result"
|
||||||
|
"ems.agt/src/modules/network_data/model"
|
||||||
neDataService "ems.agt/src/modules/network_data/service"
|
neDataService "ems.agt/src/modules/network_data/service"
|
||||||
"ems.agt/src/modules/network_element/model"
|
|
||||||
neService "ems.agt/src/modules/network_element/service"
|
neService "ems.agt/src/modules/network_element/service"
|
||||||
"github.com/gin-gonic/gin"
|
"github.com/gin-gonic/gin"
|
||||||
)
|
)
|
||||||
|
|||||||
52
src/modules/network_data/controller/upf.go
Normal file
52
src/modules/network_data/controller/upf.go
Normal 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))
|
||||||
|
}
|
||||||
@@ -27,21 +27,31 @@ func Setup(router *gin.Engine) {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
// CDR会话事件信息
|
// 网元IMS
|
||||||
cdrGroup := neDataGroup.Group("/cdr")
|
imsGroup := neDataGroup.Group("/ims")
|
||||||
{
|
{
|
||||||
cdrGroup.GET("/list",
|
// CDR会话事件信息
|
||||||
|
imsGroup.GET("/cdrs",
|
||||||
middleware.PreAuthorize(nil),
|
middleware.PreAuthorize(nil),
|
||||||
controller.NewCDREventController.List,
|
controller.NewIMSController.CDRs,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
// UE会话事件信息
|
// 网元AMF
|
||||||
ueGroup := neDataGroup.Group("/ue")
|
amfGroup := neDataGroup.Group("/amf")
|
||||||
{
|
{
|
||||||
ueGroup.GET("/list",
|
amfGroup.GET("/ues",
|
||||||
middleware.PreAuthorize(nil),
|
middleware.PreAuthorize(nil),
|
||||||
controller.NewUEEventController.List,
|
controller.NewAMFController.UEs,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
// 网元UPF
|
||||||
|
upfGroup := neDataGroup.Group("/upf")
|
||||||
|
{
|
||||||
|
upfGroup.GET("/totalFlow",
|
||||||
|
middleware.PreAuthorize(nil),
|
||||||
|
controller.NewUPFController.TotalFlow,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,12 +1,15 @@
|
|||||||
package repository
|
package repository
|
||||||
|
|
||||||
import "ems.agt/src/modules/network_element/model"
|
import "ems.agt/src/modules/network_data/model"
|
||||||
|
|
||||||
// 性能统计 数据层接口
|
// 性能统计 数据层接口
|
||||||
type IPerfKPI interface {
|
type IPerfKPI interface {
|
||||||
// SelectGoldKPI 通过网元指标数据信息
|
// SelectGoldKPI 通过网元指标数据信息
|
||||||
SelectGoldKPI(query model.GoldKPIQuery, kpiIds []string) []map[string]any
|
SelectGoldKPI(query model.GoldKPIQuery, kpiIds []string) []map[string]any
|
||||||
|
|
||||||
// SelectGoldKPITitle
|
// SelectGoldKPITitle 网元对应的指标名称
|
||||||
SelectGoldKPITitle(neType string) []model.GoldKPITitle
|
SelectGoldKPITitle(neType string) []model.GoldKPITitle
|
||||||
|
|
||||||
|
// SelectUPFTotalFlow 查询UPF总流量 N3上行 N6下行
|
||||||
|
SelectUPFTotalFlow(neType, rmUID, startDate, endDate string) []map[string]any
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ import (
|
|||||||
|
|
||||||
"ems.agt/src/framework/datasource"
|
"ems.agt/src/framework/datasource"
|
||||||
"ems.agt/src/framework/logger"
|
"ems.agt/src/framework/logger"
|
||||||
"ems.agt/src/modules/network_element/model"
|
"ems.agt/src/modules/network_data/model"
|
||||||
)
|
)
|
||||||
|
|
||||||
// 实例化数据层 PerfKPIImpl 结构体
|
// 实例化数据层 PerfKPIImpl 结构体
|
||||||
@@ -44,7 +44,7 @@ func (r *PerfKPIImpl) SelectGoldKPI(query model.GoldKPIQuery, kpiIds []string) [
|
|||||||
|
|
||||||
// 查询字段列
|
// 查询字段列
|
||||||
timeFormat := "DATE_FORMAT(gk.start_time, '%Y-%m-%d %H:')"
|
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)
|
groupByField := fmt.Sprintf("CONCAT( %s, %s ) AS timeGroup", timeFormat, minuteGroup)
|
||||||
var fields = []string{
|
var fields = []string{
|
||||||
groupByField,
|
groupByField,
|
||||||
@@ -79,12 +79,48 @@ func (r *PerfKPIImpl) SelectGoldKPI(query model.GoldKPIQuery, kpiIds []string) [
|
|||||||
return results
|
return results
|
||||||
}
|
}
|
||||||
|
|
||||||
// SelectGoldKPITitle 通过网元指标数据信息
|
// SelectGoldKPITitle 网元对应的指标名称
|
||||||
func (r *PerfKPIImpl) SelectGoldKPITitle(neType string) []model.GoldKPITitle {
|
func (r *PerfKPIImpl) SelectGoldKPITitle(neType string) []model.GoldKPITitle {
|
||||||
result := []model.GoldKPITitle{}
|
result := []model.GoldKPITitle{}
|
||||||
tx := datasource.DefaultDB().Table("kpi_title").Where("ne_type = ?", neType).Find(&result)
|
tx := datasource.DefaultDB().Table("kpi_title").Where("ne_type = ?", neType).Find(&result)
|
||||||
if err := tx.Error; err != nil {
|
if err := tx.Error; err != nil {
|
||||||
logger.Errorf("Delete err => %v", err)
|
logger.Errorf("Find err => %v", err)
|
||||||
}
|
}
|
||||||
return result
|
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
|
||||||
|
}
|
||||||
|
|||||||
@@ -1,12 +1,15 @@
|
|||||||
package service
|
package service
|
||||||
|
|
||||||
import "ems.agt/src/modules/network_element/model"
|
import "ems.agt/src/modules/network_data/model"
|
||||||
|
|
||||||
// 性能统计 服务层接口
|
// 性能统计 服务层接口
|
||||||
type IPerfKPI interface {
|
type IPerfKPI interface {
|
||||||
// SelectGoldKPI 通过网元指标数据信息
|
// SelectGoldKPI 通过网元指标数据信息
|
||||||
SelectGoldKPI(query model.GoldKPIQuery) []map[string]any
|
SelectGoldKPI(query model.GoldKPIQuery) []map[string]any
|
||||||
|
|
||||||
// SelectGoldKPITitle
|
// SelectGoldKPITitle 网元对应的指标名称
|
||||||
SelectGoldKPITitle(neType string) []model.GoldKPITitle
|
SelectGoldKPITitle(neType string) []model.GoldKPITitle
|
||||||
|
|
||||||
|
// SelectUPFTotalFlow 查询UPF总流量 N3上行 N6下行
|
||||||
|
SelectUPFTotalFlow(neType, rmUID string, day int) []map[string]any
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,8 +1,10 @@
|
|||||||
package service
|
package service
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"ems.agt/src/modules/network_element/model"
|
"time"
|
||||||
"ems.agt/src/modules/network_element/repository"
|
|
||||||
|
"ems.agt/src/modules/network_data/model"
|
||||||
|
"ems.agt/src/modules/network_data/repository"
|
||||||
)
|
)
|
||||||
|
|
||||||
// 实例化数据层 PerfKPIImpl 结构体
|
// 实例化数据层 PerfKPIImpl 结构体
|
||||||
@@ -32,7 +34,19 @@ func (r *PerfKPIImpl) SelectGoldKPI(query model.GoldKPIQuery) []map[string]any {
|
|||||||
return data
|
return data
|
||||||
}
|
}
|
||||||
|
|
||||||
// SelectGoldKPITitle 通过网元指标数据信息
|
// SelectGoldKPITitle 网元对应的指标名称
|
||||||
func (r *PerfKPIImpl) SelectGoldKPITitle(neType string) []model.GoldKPITitle {
|
func (r *PerfKPIImpl) SelectGoldKPITitle(neType string) []model.GoldKPITitle {
|
||||||
return r.perfKPIRepository.SelectGoldKPITitle(neType)
|
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)
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user