From b1b66195c1a44fae42094c3c08fd0a6febaf7490 Mon Sep 17 00:00:00 2001 From: simonzhangsz Date: Thu, 28 Nov 2024 19:52:27 +0800 Subject: [PATCH] fix: custom indicator and get state issue merge from main line --- features/pm/kpi_c_title/controller.go | 21 +++++- features/state/getstate.go | 95 +++++++++++++++------------ 2 files changed, 72 insertions(+), 44 deletions(-) diff --git a/features/pm/kpi_c_title/controller.go b/features/pm/kpi_c_title/controller.go index 380d4665..1aadbcd7 100644 --- a/features/pm/kpi_c_title/controller.go +++ b/features/pm/kpi_c_title/controller.go @@ -14,6 +14,7 @@ import ( "github.com/gin-gonic/gin" ) +// get customize kpi total and list func (k *KpiCTitle) GetToalList(c *gin.Context) { var titles []KpiCTitle var conditions []string @@ -35,7 +36,10 @@ func (k *KpiCTitle) GetToalList(c *gin.Context) { if status := querys.Status; status != "" { conditions = append(conditions, "status = ?") params = append(params, status) + } else { + conditions = append(conditions, "status != 'Deleted'") } + whereSql := "" if len(conditions) > 0 { whereSql += strings.Join(conditions, " and ") @@ -87,7 +91,10 @@ func (k *KpiCTitle) Get(c *gin.Context) { if status := c.Query("status"); status != "" { conditions = append(conditions, "status = ?") params = append(params, status) + } else { + conditions = append(conditions, "status != 'Deleted'") } + whereSql := "" if len(conditions) > 0 { whereSql += strings.Join(conditions, " and ") @@ -103,6 +110,7 @@ func (k *KpiCTitle) Get(c *gin.Context) { //c.JSON(http.StatusOK, titles) } +// alias customized kpi expression with cn/en title func (k *KpiCTitle) expressionAlias(titles []KpiCTitle, i18n string) { var title *KpiCTitle for i := 0; i < len(titles); i++ { @@ -140,7 +148,10 @@ func (k *KpiCTitle) Total(c *gin.Context) { if status := c.Query("status"); status != "" { conditions = append(conditions, "status = ?") params = append(params, status) + } else { + conditions = append(conditions, "status != 'Deleted'") } + whereSql := "" if len(conditions) > 0 { whereSql += strings.Join(conditions, " and ") @@ -168,7 +179,11 @@ func (k *KpiCTitle) Post(c *gin.Context) { c.JSON(http.StatusOK, services.ErrResp("custom indicator already exist")) return } - ret := dborm.DefaultDB().Table("kpi_c_title").Where("ne_type=? ORDER BY kpi_id DESC LIMIT 1", title.NeType).Scan(&res) + + // Regexp match like AMF.C.01 + kpiIDRegexp := "^" + *title.NeType + "\\.C\\.[0-9]{2}$" + ret := dborm.DefaultDB().Table("kpi_c_title"). + Where("ne_type=? and kpi_id REGEXP ? ORDER BY kpi_id DESC LIMIT 1", title.NeType, kpiIDRegexp).Scan(&res) if err := ret.Error; err != nil { c.JSON(http.StatusOK, services.ErrResp(err.Error())) return @@ -241,8 +256,8 @@ func (k *KpiCTitle) Put(c *gin.Context) { func (k *KpiCTitle) Delete(c *gin.Context) { id := c.Param("id") - if err := dborm.DefaultDB().Delete(&KpiCTitle{}, id).Error; err != nil { - c.JSON(http.StatusOK, services.ErrResp("custom indicator not found")) + if err := dborm.DefaultDB().Table(k.TableName()).Where("id=?", id).Update("status", "Deleted").Error; err != nil { + c.JSON(http.StatusOK, services.ErrResp(err.Error())) return } diff --git a/features/state/getstate.go b/features/state/getstate.go index 9a79e508..61cb7811 100644 --- a/features/state/getstate.go +++ b/features/state/getstate.go @@ -762,14 +762,14 @@ func GetStateFromNF(w http.ResponseWriter, r *http.Request) { SetHeaders(map[string]string{"Content-Type": "application/json;charset=UTF-8"}). Get(requestURI2NF) if err != nil { - log.Error("Get system state from NF is failed:", err) + log.Error("Fail to get state:", err) + errorMessage := services.ErrorMessage{ ErrorCode: "1", ErrorInfo: "Internal server error, NF connnect refused", } - result["error"] = errorMessage - SN, Version, _ := dborm.XormGetNEStateInfo(ne.NeType, ne.NeId) - result["serialNum"] = SN - result["version"] = Version + systemState := make(map[string]interface{}) + systemState["error"] = errorMessage + result["systemState"] = systemState } else { systemState := make(map[string]interface{}) _ = json.Unmarshal(resp.Body(), &systemState) @@ -786,49 +786,62 @@ func GetStateFromNF(w http.ResponseWriter, r *http.Request) { response.Data = data services.ResponseWithJson(w, http.StatusOK, response) return - } - - if neType == "omc" { + } else if neType == "omc" { emsState := GetEMSState("127.0.0.1") services.ResponseWithJson(w, http.StatusOK, emsState) return } - var neList []dborm.NeInfo - err := dborm.XormGetNeInfoByNeType(neType, &neList) - if err != nil { - log.Error("Failed to dborm.XormGetNeInfoByNeType:", err) - services.ResponseInternalServerError500ProcessError(w, err) - return - } - data := make([]map[string]interface{}, 0) - for _, ne := range neList { - hostUri := fmt.Sprintf("http://%s:%v", ne.Ip, ne.Port) - requestURI2NF := fmt.Sprintf("%s/api/rest/systemManagement/v1/elementType/%s/objectType/systemState", - hostUri, strings.ToLower(ne.NeType)) - log.Debug("requestURI2NF:", requestURI2NF) + // only support omc and all elementType + err := fmt.Errorf("only support omc or all elementTypeValue") + log.Error("Fail to get state:", err) + services.ResponseInternalServerError500ProcessError(w, err) - resp, err := client.R(). - EnableTrace(). - SetHeaders(map[string]string{"User-Agent": config.GetDefaultUserAgent()}). - SetHeaders(map[string]string{"Content-Type": "application/json;charset=UTF-8"}). - Get(requestURI2NF) - if err != nil { - log.Error("Get system state from NF is failed:", err) - } else { - systemState := make(map[string]interface{}) - _ = json.Unmarshal(resp.Body(), &systemState) - data = append(data, systemState) - } - } + // var neList []dborm.NeInfo + // err := dborm.XormGetNeInfoByNeType(neType, &neList) + // if err != nil { + // log.Error("Failed to dborm.XormGetNeInfoByNeType:", err) + // services.ResponseInternalServerError500ProcessError(w, err) + // return + // } + // var omcList []dborm.NeInfo + // err = dborm.XormGetNeInfoByNeType("omc", &omcList) + // if err != nil { + // log.Error("Failed to omc ne list:", err) + // services.ResponseInternalServerError500ProcessError(w, err) + // return + // } + // for i, ne := range neList { - if len(data) == 1 { - services.ResponseWithJson(w, http.StatusOK, data[0]) - return - } - var response Response - response.Data = data - services.ResponseWithJson(w, http.StatusOK, response) + // } + // data := make([]map[string]interface{}, 0) + // for _, ne := range neList { + // hostUri := fmt.Sprintf("http://%s:%v", ne.Ip, ne.Port) + // requestURI2NF := fmt.Sprintf("%s/api/rest/systemManagement/v1/elementType/%s/objectType/systemState", + // hostUri, strings.ToLower(ne.NeType)) + // log.Debug("requestURI2NF:", requestURI2NF) + + // resp, err := client.R(). + // EnableTrace(). + // SetHeaders(map[string]string{"User-Agent": config.GetDefaultUserAgent()}). + // SetHeaders(map[string]string{"Content-Type": "application/json;charset=UTF-8"}). + // Get(requestURI2NF) + // if err != nil { + // log.Error("Get system state from NF is failed:", err) + // } else { + // systemState := make(map[string]interface{}) + // _ = json.Unmarshal(resp.Body(), &systemState) + // data = append(data, systemState) + // } + // } + + // if len(data) == 1 { + // services.ResponseWithJson(w, http.StatusOK, data[0]) + // return + // } + // var response Response + // response.Data = data + // services.ResponseWithJson(w, http.StatusOK, response) } // GetStateFromNF 旧函数