From 8920faf1e02fb00778c896544c389873a3a3f1ca Mon Sep 17 00:00:00 2001 From: simonzhangsz Date: Thu, 22 Aug 2024 09:36:37 +0800 Subject: [PATCH] add: kpiC report 2 FE --- features/pm/kpi_c_report/controller.go | 95 ++++++++++++++++++++++++++ features/pm/kpi_c_report/model.go | 12 ++++ features/pm/kpi_c_report/route.go | 4 ++ features/pm/performance.go | 22 +++++- 4 files changed, 130 insertions(+), 3 deletions(-) diff --git a/features/pm/kpi_c_report/controller.go b/features/pm/kpi_c_report/controller.go index 9b9079c9..6d91b63b 100644 --- a/features/pm/kpi_c_report/controller.go +++ b/features/pm/kpi_c_report/controller.go @@ -32,6 +32,13 @@ func (k *KpiCReport) Get(c *gin.Context) { tableName := TableName() + "_" + strings.ToLower(querys.NeType) dborm := datasource.DefaultDB().Table(tableName) + if querys.NeID != "" { + conditions = append(conditions, "rm_uid = (select n.rm_uid from ne_info n where n.ne_type=? and n.ne_id=? and n.status=1)") + params = append(params, querys.NeType, querys.NeID) + } else { + c.JSON(http.StatusBadRequest, services.ErrResp("Not found required parameter NE ID")) + return + } if querys.StartTime != "" { conditions = append(conditions, "created_at >= ?") params = append(params, querys.StartTime) @@ -70,6 +77,94 @@ func (k *KpiCReport) Get(c *gin.Context) { //c.JSON(http.StatusOK, reports) } +func (k *KpiCReport) GetReport2FE(c *gin.Context) { + var results []KpiCReport + + var conditions []string + var params []any + + var querys KpiCReportQuery + if err := c.ShouldBindQuery(&querys); err != nil { + c.JSON(http.StatusBadRequest, services.ErrResp(err.Error())) + return + } + + // construct condition to get + if querys.NeType != "" { + conditions = append(conditions, "ne_type = ?") + params = append(params, strings.ToUpper(querys.NeType)) + } else { + c.JSON(http.StatusBadRequest, services.ErrResp("Not found required parameter NE type")) + return + } + tableName := TableName() + "_" + strings.ToLower(querys.NeType) + dborm := datasource.DefaultDB().Table(tableName) + + if querys.NeID != "" { + conditions = append(conditions, "rm_uid = (select n.rm_uid from ne_info n where n.ne_type=? and n.ne_id=? and n.status=1)") + params = append(params, querys.NeType, querys.NeID) + } else { + c.JSON(http.StatusBadRequest, services.ErrResp("Not found required parameter NE ID")) + return + } + if querys.StartTime != "" { + conditions = append(conditions, "created_at >= ?") + params = append(params, querys.StartTime) + } + if querys.EndTime != "" { + conditions = append(conditions, "created_at <= ?") + params = append(params, querys.EndTime) + } + + whereSql := "" + if len(conditions) > 0 { + whereSql += strings.Join(conditions, " and ") + dborm = dborm.Where(whereSql, params...) + } + // page number and size + if pageSize := querys.PageSize; pageSize > 0 { + dborm = dborm.Limit(pageSize) + if pageNum := querys.PageNum; pageNum > 0 { + dborm = dborm.Offset((pageNum - 1) * pageSize) + } + } + + // order by + if sortField, sortOrder := querys.SortField, querys.SortOrder; sortField != "" && sortOrder != "" { + orderBy := fmt.Sprintf("%s %s", sortField, sortOrder) + dborm = dborm.Order(orderBy) + } + + //err := datasource.DefaultDB().Table(tableName).Where(whereSql, params...).Find(&reports).Error + err := dborm.Find(&results).Error + if err != nil { + c.JSON(http.StatusInternalServerError, services.ErrResp(err.Error())) + return + } + + var reports []map[string]any + for _, r := range results { + report := map[string]any{ + // kip_id ... + "neType": *r.NeType, + "neId": querys.NeID, + "neName": *r.NeName, + "rmUID": *r.RmUID, + "startIndex": r.Index, + "timeGroup": r.Date[:10] + " " + *r.StartTime, + "createdAt": r.CreatedAt, + "granularity": r.Granularity, + "tenantID": r.TenantID, + } + + for _, k := range r.KpiValues { + report[k.KPIID] = k.Value + } + reports = append(reports, report) + } + c.JSON(http.StatusOK, services.DataResp(reports)) +} + func (k *KpiCReport) GetTotalList(c *gin.Context) { var reports []KpiCReport var conditions []string diff --git a/features/pm/kpi_c_report/model.go b/features/pm/kpi_c_report/model.go index 1023ab49..512fb342 100644 --- a/features/pm/kpi_c_report/model.go +++ b/features/pm/kpi_c_report/model.go @@ -32,6 +32,7 @@ type KpiCReport struct { type KpiCReportQuery struct { NeType string `json:"neType" form:"neType" binding:"required"` + NeID string `json:"neId" form:"neId" binding:"required"` RmUID string `json:"rmUID" form:"rmUID"` StartTime string `json:"startTime" form:"startTime"` EndTime string `json:"endTime" form:"endTime"` @@ -43,6 +44,17 @@ type KpiCReportQuery struct { PageSize int `json:"pageSize" form:"pageSize"` } +type KpiCReport2FE struct { + NeType string `json:"neType" gorm:"column:ne_type"` + NeId string `json:"neId"` + NeName string `json:"neName" gorm:"column:ne_name"` + RmUID string `json:"rmUid" gorm:"column:rm_uid"` + TimeGroup string `json:"timeGroup"` + StartIndex int16 `json:"startIndex" gorm:"column:index"` + Granularity int8 `json:"granularity" gorm:"column:granularity"` + TenantID string `json:"tenantID" gorm:"column:tenant_id"` +} + func TableName() string { return "kpi_c_report" } diff --git a/features/pm/kpi_c_report/route.go b/features/pm/kpi_c_report/route.go index 25dec9ff..7e64f95b 100644 --- a/features/pm/kpi_c_report/route.go +++ b/features/pm/kpi_c_report/route.go @@ -12,6 +12,10 @@ func Register(r *gin.RouterGroup) { { var k *KpiCReport pmKPIC.GET("/report", + middleware.PreAuthorize(nil), + k.GetReport2FE, + ) + pmKPIC.GET("/report/list", middleware.PreAuthorize(nil), k.Get, ) diff --git a/features/pm/performance.go b/features/pm/performance.go index ac0c3fd1..258c19d7 100644 --- a/features/pm/performance.go +++ b/features/pm/performance.go @@ -292,6 +292,21 @@ func PostKPIReportFromNF(w http.ResponseWriter, r *http.Request) { TenantID: &kpiData.TenantID, } + // 发送到匹配的网元 + neInfo := neService.NewNeInfoImpl.SelectNeInfoByRmuid(kpiData.RmUid) + // custom kpi report to FE + kpiCEvent := map[string]any{ + // kip_id ... + "neType": kpiData.NEType, + "neId": neInfo.NeId, + "neName": kpiData.NEName, + "rmUID": kpiData.RmUid, + "startIndex": kpiData.Index, + "timeGroup": kpiData.Date[:10] + " " + kpiData.StartTime, + "createdAt": kpiData.CreatedAt, + "granularity": kpiData.Granularity, + "tenantID": kpiData.TenantID, + } kpiCList := kpi_c_title.GetActiveKPICList(kpiData.NEType) for _, k := range kpiCList { result, err := evaluate.CalcExpr(*k.Expression, kpiValMap) @@ -305,18 +320,19 @@ func PostKPIReportFromNF(w http.ResponseWriter, r *http.Request) { } report.KpiValues = append(report.KpiValues, *kpiCVal) + + // set KPIC event kpiid and value + kpiCEvent[kpiCVal.KPIID] = kpiCVal.Value } // KPI自定义指标入库 kpi_c_report.InsertKpiCReport(kpiData.NEType, report) - // 发送到匹配的网元 - neInfo := neService.NewNeInfoImpl.SelectNeInfoByRmuid(kpiData.RmUid) if neInfo.RmUID == kpiData.RmUid { // 推送到ws订阅组 wsService.NewWSSendImpl.ByGroupID(fmt.Sprintf("%s%s_%s", wsService.GROUP_KPI, neInfo.NeType, neInfo.NeId), kpiEvent) // 推送自定义KPI到ws订阅组 - wsService.NewWSSendImpl.ByGroupID(fmt.Sprintf("%s%s_%s", wsService.GROUP_KPI_C, neInfo.NeType, neInfo.NeId), report) + wsService.NewWSSendImpl.ByGroupID(fmt.Sprintf("%s%s_%s", wsService.GROUP_KPI_C, neInfo.NeType, neInfo.NeId), kpiCEvent) if neInfo.NeType == "UPF" { // 推送标识为:12_RMUID, exp: 12_4400HXUPF001 wsService.NewWSSendImpl.ByGroupID(wsService.GROUP_KPI_UPF+kpiReport.Task.NE.RmUID, kpiEvent)