del: 删除网元功能模块内性能指标控制路由函数
This commit is contained in:
@@ -1,77 +0,0 @@
|
|||||||
package controller
|
|
||||||
|
|
||||||
import (
|
|
||||||
"ems.agt/lib/core/utils/date"
|
|
||||||
"ems.agt/src/framework/i18n"
|
|
||||||
"ems.agt/src/framework/utils/ctx"
|
|
||||||
"ems.agt/src/framework/vo/result"
|
|
||||||
"ems.agt/src/modules/network_element/model"
|
|
||||||
neService "ems.agt/src/modules/network_element/service"
|
|
||||||
"github.com/gin-gonic/gin"
|
|
||||||
)
|
|
||||||
|
|
||||||
// 实例化控制层 PerfKPIController 结构体
|
|
||||||
var NewPerfKPI = &PerfKPIController{
|
|
||||||
neInfoService: neService.NewNeInfoImpl,
|
|
||||||
perfKPIService: neService.NewPerfKPIImpl,
|
|
||||||
}
|
|
||||||
|
|
||||||
// 性能统计
|
|
||||||
//
|
|
||||||
// PATH /kpi
|
|
||||||
type PerfKPIController struct {
|
|
||||||
// 网元信息服务
|
|
||||||
neInfoService neService.INeInfo
|
|
||||||
// 统计信息服务
|
|
||||||
perfKPIService neService.IPerfKPI
|
|
||||||
}
|
|
||||||
|
|
||||||
// 获取统计数据
|
|
||||||
//
|
|
||||||
// GET /data
|
|
||||||
func (s *PerfKPIController) GoldKPI(c *gin.Context) {
|
|
||||||
language := ctx.AcceptLanguage(c)
|
|
||||||
var querys model.GoldKPIQuery
|
|
||||||
if err := c.ShouldBindQuery(&querys); err != nil {
|
|
||||||
c.JSON(400, result.CodeMsg(400, i18n.TKey(language, "app.common.err400")))
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
// 时间格式校验
|
|
||||||
startTime := date.ParseStrToDate(querys.StartTime, date.YYYY_MM_DD_HH_MM_SS)
|
|
||||||
if startTime.IsZero() {
|
|
||||||
c.JSON(400, result.CodeMsg(400, i18n.TKey(language, "app.common.err400")))
|
|
||||||
}
|
|
||||||
endTime := date.ParseStrToDate(querys.EndTime, date.YYYY_MM_DD_HH_MM_SS)
|
|
||||||
if endTime.IsZero() {
|
|
||||||
c.JSON(400, result.CodeMsg(400, i18n.TKey(language, "app.common.err400")))
|
|
||||||
}
|
|
||||||
|
|
||||||
// 查询网元获取IP
|
|
||||||
neInfo := s.neInfoService.SelectNeInfoByNeTypeAndNeID(querys.NeType, querys.NeID)
|
|
||||||
if neInfo.NeId != querys.NeID || neInfo.IP == "" {
|
|
||||||
c.JSON(200, result.ErrMsg(i18n.TKey(language, "app.common.noNEInfo")))
|
|
||||||
return
|
|
||||||
}
|
|
||||||
querys.RmUID = neInfo.RmUID
|
|
||||||
|
|
||||||
// 查询数据
|
|
||||||
kpiData := s.perfKPIService.SelectGoldKPI(querys)
|
|
||||||
c.JSON(200, result.OkData(kpiData))
|
|
||||||
}
|
|
||||||
|
|
||||||
// 获取统计标题
|
|
||||||
//
|
|
||||||
// GET /title
|
|
||||||
func (s *PerfKPIController) Title(c *gin.Context) {
|
|
||||||
language := ctx.AcceptLanguage(c)
|
|
||||||
neType := c.Query("neType")
|
|
||||||
if neType == "" {
|
|
||||||
c.JSON(400, result.CodeMsg(400, i18n.TKey(language, "app.common.err400")))
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
kpiTitles := s.perfKPIService.SelectGoldKPITitle(neType)
|
|
||||||
|
|
||||||
c.JSON(200, result.OkData(kpiTitles))
|
|
||||||
}
|
|
||||||
@@ -1,23 +0,0 @@
|
|||||||
package model
|
|
||||||
|
|
||||||
// GoldKPITitle 黄金指标标题信息对象 kpi_title
|
|
||||||
type GoldKPITitle struct {
|
|
||||||
ID string `json:"id" gorm:"column:id;primaryKey;autoIncrement"`
|
|
||||||
NeType string `json:"neType" gorm:"column:ne_type"`
|
|
||||||
KPIID string `json:"kpiId" gorm:"column:kpi_id"`
|
|
||||||
TitleJson string `json:"titleJson" gorm:"column:title_json"`
|
|
||||||
CnTitle string `json:"cnTitle" gorm:"column:cn_title"`
|
|
||||||
EnTitle string `json:"enTitle" gorm:"column:en_title"`
|
|
||||||
}
|
|
||||||
|
|
||||||
// GoldKPIQuery 黄金指标查询参数结构体
|
|
||||||
type GoldKPIQuery struct {
|
|
||||||
NeType string `form:"neType" binding:"required"`
|
|
||||||
NeID string `form:"neId" binding:"required"`
|
|
||||||
StartTime string `form:"startTime" binding:"required"`
|
|
||||||
EndTime string `form:"endTime" binding:"required"`
|
|
||||||
Interval int64 `form:"interval" binding:"required"`
|
|
||||||
RmUID string `form:"rmUID"`
|
|
||||||
SortField string `form:"sortField" binding:"omitempty,oneof=timeGroup"`
|
|
||||||
SortOrder string `form:"sortOrder" binding:"omitempty,oneof=asc desc"`
|
|
||||||
}
|
|
||||||
@@ -1,12 +0,0 @@
|
|||||||
package repository
|
|
||||||
|
|
||||||
import "ems.agt/src/modules/network_element/model"
|
|
||||||
|
|
||||||
// 性能统计 数据层接口
|
|
||||||
type IPerfKPI interface {
|
|
||||||
// SelectGoldKPI 通过网元指标数据信息
|
|
||||||
SelectGoldKPI(query model.GoldKPIQuery, kpiIds []string) []map[string]any
|
|
||||||
|
|
||||||
// SelectGoldKPITitle
|
|
||||||
SelectGoldKPITitle(neType string) []model.GoldKPITitle
|
|
||||||
}
|
|
||||||
@@ -1,90 +0,0 @@
|
|||||||
package repository
|
|
||||||
|
|
||||||
import (
|
|
||||||
"fmt"
|
|
||||||
"strings"
|
|
||||||
|
|
||||||
"ems.agt/src/framework/datasource"
|
|
||||||
"ems.agt/src/framework/logger"
|
|
||||||
"ems.agt/src/modules/network_element/model"
|
|
||||||
)
|
|
||||||
|
|
||||||
// 实例化数据层 PerfKPIImpl 结构体
|
|
||||||
var NewPerfKPIImpl = &PerfKPIImpl{}
|
|
||||||
|
|
||||||
// PerfKPIImpl 性能统计 数据层处理
|
|
||||||
type PerfKPIImpl struct{}
|
|
||||||
|
|
||||||
// SelectGoldKPI 通过网元指标数据信息
|
|
||||||
func (r *PerfKPIImpl) SelectGoldKPI(query model.GoldKPIQuery, kpiIds []string) []map[string]any {
|
|
||||||
// 查询条件拼接
|
|
||||||
var conditions []string
|
|
||||||
var params []any
|
|
||||||
if query.RmUID != "" {
|
|
||||||
conditions = append(conditions, "gk.rm_uid = ?")
|
|
||||||
params = append(params, query.RmUID)
|
|
||||||
}
|
|
||||||
if query.NeType != "" {
|
|
||||||
conditions = append(conditions, "gk.ne_type = ?")
|
|
||||||
params = append(params, query.NeType)
|
|
||||||
}
|
|
||||||
if query.StartTime != "" {
|
|
||||||
conditions = append(conditions, "gk.start_time >= ?")
|
|
||||||
params = append(params, query.StartTime)
|
|
||||||
}
|
|
||||||
if query.EndTime != "" {
|
|
||||||
conditions = append(conditions, "gk.start_time <= ?")
|
|
||||||
params = append(params, query.EndTime)
|
|
||||||
}
|
|
||||||
// 构建查询条件语句
|
|
||||||
whereSql := ""
|
|
||||||
if len(conditions) > 0 {
|
|
||||||
whereSql += " where " + strings.Join(conditions, " and ")
|
|
||||||
}
|
|
||||||
|
|
||||||
// 查询字段列
|
|
||||||
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)
|
|
||||||
groupByField := fmt.Sprintf("CONCAT( %s, %s ) AS timeGroup", timeFormat, minuteGroup)
|
|
||||||
var fields = []string{
|
|
||||||
groupByField,
|
|
||||||
"min(CASE WHEN gk.index != '' THEN gk.index ELSE 0 END) AS startIndex",
|
|
||||||
"min(CASE WHEN gk.ne_name != '' THEN gk.ne_name ELSE 0 END) AS neName",
|
|
||||||
}
|
|
||||||
for _, kid := range kpiIds {
|
|
||||||
// 特殊字段,只取最后一次收到的非0值
|
|
||||||
if kid == "AMF.01" || kid == "UDM.01" || kid == "UDM.02" || kid == "UDM.03" {
|
|
||||||
str := fmt.Sprintf("IFNULL(SUBSTRING_INDEX(GROUP_CONCAT( CASE WHEN gk.kpi_id = '%s' and gk.VALUE != 0 THEN gk.VALUE END ), ',', 1), 0) AS '%s'", kid, kid)
|
|
||||||
fields = append(fields, str)
|
|
||||||
} else {
|
|
||||||
str := fmt.Sprintf("sum(CASE WHEN gk.kpi_id = '%s' THEN gk.value ELSE 0 END) AS '%s'", kid, kid)
|
|
||||||
fields = append(fields, str)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
fieldsSql := strings.Join(fields, ",")
|
|
||||||
|
|
||||||
// 查询数据
|
|
||||||
if query.SortField == "" {
|
|
||||||
query.SortField = "timeGroup"
|
|
||||||
}
|
|
||||||
if query.SortOrder == "" {
|
|
||||||
query.SortOrder = "desc"
|
|
||||||
}
|
|
||||||
orderSql := fmt.Sprintf(" order by %s %s", query.SortField, query.SortOrder)
|
|
||||||
querySql := fmt.Sprintf("SELECT %s FROM gold_kpi gk %s GROUP BY timeGroup %s", fieldsSql, whereSql, orderSql)
|
|
||||||
results, err := datasource.RawDB("", querySql, params)
|
|
||||||
if err != nil {
|
|
||||||
logger.Errorf("query err => %v", err)
|
|
||||||
}
|
|
||||||
return results
|
|
||||||
}
|
|
||||||
|
|
||||||
// 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)
|
|
||||||
}
|
|
||||||
return result
|
|
||||||
}
|
|
||||||
@@ -1,12 +0,0 @@
|
|||||||
package service
|
|
||||||
|
|
||||||
import "ems.agt/src/modules/network_element/model"
|
|
||||||
|
|
||||||
// 性能统计 数据层接口
|
|
||||||
type IPerfKPI interface {
|
|
||||||
// SelectGoldKPI 通过网元指标数据信息
|
|
||||||
SelectGoldKPI(query model.GoldKPIQuery) []map[string]any
|
|
||||||
|
|
||||||
// SelectGoldKPITitle
|
|
||||||
SelectGoldKPITitle(neType string) []model.GoldKPITitle
|
|
||||||
}
|
|
||||||
@@ -1,38 +0,0 @@
|
|||||||
package service
|
|
||||||
|
|
||||||
import (
|
|
||||||
"ems.agt/src/modules/network_element/model"
|
|
||||||
"ems.agt/src/modules/network_element/repository"
|
|
||||||
)
|
|
||||||
|
|
||||||
// 实例化数据层 PerfKPIImpl 结构体
|
|
||||||
var NewPerfKPIImpl = &PerfKPIImpl{
|
|
||||||
perfKPIRepository: repository.NewPerfKPIImpl,
|
|
||||||
}
|
|
||||||
|
|
||||||
// PerfKPIImpl 性能统计 数据层处理
|
|
||||||
type PerfKPIImpl struct {
|
|
||||||
// 性能统计数据信息
|
|
||||||
perfKPIRepository repository.IPerfKPI
|
|
||||||
}
|
|
||||||
|
|
||||||
// SelectGoldKPI 通过网元指标数据信息
|
|
||||||
func (r *PerfKPIImpl) SelectGoldKPI(query model.GoldKPIQuery) []map[string]any {
|
|
||||||
// 获取数据指标id
|
|
||||||
var kpiIds []string
|
|
||||||
kpiTitles := r.perfKPIRepository.SelectGoldKPITitle(query.NeType)
|
|
||||||
for _, kpiId := range kpiTitles {
|
|
||||||
kpiIds = append(kpiIds, kpiId.KPIID)
|
|
||||||
}
|
|
||||||
|
|
||||||
data := r.perfKPIRepository.SelectGoldKPI(query, kpiIds)
|
|
||||||
if data == nil {
|
|
||||||
return []map[string]any{}
|
|
||||||
}
|
|
||||||
return data
|
|
||||||
}
|
|
||||||
|
|
||||||
// SelectGoldKPITitle 通过网元指标数据信息
|
|
||||||
func (r *PerfKPIImpl) SelectGoldKPITitle(neType string) []model.GoldKPITitle {
|
|
||||||
return r.perfKPIRepository.SelectGoldKPITitle(neType)
|
|
||||||
}
|
|
||||||
Reference in New Issue
Block a user