package cm import ( "ems.agt/lib/dborm" "ems.agt/lib/global" "ems.agt/lib/log" "ems.agt/lib/services" "ems.agt/restagent/config" "encoding/json" "fmt" "io" "net/http" "github.com/go-resty/resty/v2" "github.com/gorilla/mux" ) var ( // parameter config management ParamConfigUri = config.UriPrefix + "/systemManagement/{apiVersion}/elementType/{elementTypeValue}/objectType/config/{paraName}" ParamConfigUrl = config.UriPrefix + "/systemManagement/{apiVersion}/elementType/{elementTypeValue}/objectType/config/{paraName}" ) func GetParamConfigFromNF(w http.ResponseWriter, r *http.Request) { log.Debug("GetParamConfigFromNF processing... ") // data := make([]map[string]interface{}, 1) var response services.DataResponse vars := mux.Vars(r) neType := vars["elementTypeValue"] if neType == "" { log.Error("elementTypeValue is empty") services.ResponseNotFound404UriNotExist(w, r) return } token, err := services.CheckFrontValidRequest(w, r) if err != nil { log.Error("Request error:", err) return } restHostPort := fmt.Sprintf("http://127.0.0.1:%d", config.GetYamlConfig().Rest[0].Port) getNeInfoPattern := fmt.Sprintf(config.UriPrefix+"/databaseManagement/v1/%s/ne_info", config.GetYamlConfig().Database.Name) getNeInfoURI := restHostPort + getNeInfoPattern neId := services.GetUriParamString(r, "ne_id", ",", true, false) if neId == "" { getNeInfoURI = getNeInfoURI + fmt.Sprintf("?WHERE=status='0'+and+ne_type='%s'", neType) } else { getNeInfoURI = getNeInfoURI + fmt.Sprintf("?WHERE=status='0'+and+ne_type='%v'+and+ne_id+in+%v", neType, neId) } log.Debug("getNeInfoURI:", getNeInfoURI) client := resty.New() resp, err := client.R(). EnableTrace(). SetHeaders(map[string]string{"accessToken": token}). SetHeaders(map[string]string{"User-Agent": config.GetDefaultUserAgent()}). SetHeaders(map[string]string{"Content-Type": "application/json;charset=UTF-8"}). Get(getNeInfoURI) if err != nil { log.Error("Get from database is failure!") services.ResponseInternalServerError500NFConnectRefused(w) return } log.Debug("NE info:", string(resp.Body())) // var neList []dborm.NeInfo neList, _ := dborm.XormParseResult(resp.Body()) if len(neList) >= 1 { s := neList[0] requestURI2NF := fmt.Sprintf("http://%s:%v%s", s.Ip, s.Port, r.RequestURI) 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 from NF is failure:", err) services.ResponseInternalServerError500NFConnectRefused(w) return } else { _ = json.Unmarshal(resp.Body(), &response) } log.Debug("response:", response) } services.ResponseWithJson(w, http.StatusOK, response) } func PostParamConfigToNF(w http.ResponseWriter, r *http.Request) { log.Debug("PostParamConfigToNF processing... ") _, err := services.CheckFrontValidRequest(w, r) if err != nil { log.Error("Request error:", err) return } vars := mux.Vars(r) neType := vars["elementTypeValue"] if neType == "" { log.Error("elementTypeValue is empty") services.ResponseNotFound404UriNotExist(w, r) return } neId := services.GetUriParamString(r, "ne_id", ",", false, false) // no, _ := strconv.ParseInt(neId, 10, 64) neInfo, err := dborm.XormGetNeInfo(neType, neId) if err != nil { log.Error("dborm.XormGetNeInfo is failed:", err) services.ResponseInternalServerError500DatabaseOperationFailed(w) return } requestURI2NF := fmt.Sprintf("http://%s:%v%s", neInfo.Ip, neInfo.Port, r.RequestURI) log.Debug("requestURI2NF: POST ", requestURI2NF) body, err := io.ReadAll(io.LimitReader(r.Body, global.RequestBodyMaxLen)) //io.LimitReader限制大小 if err != nil { log.Error("io.ReadAll is failed:", err) services.ResponseNotFound404UriNotExist(w, r) return } client := resty.New() response, err := client.R(). EnableTrace(). SetHeaders(map[string]string{"User-Agent": config.GetDefaultUserAgent()}). SetHeaders(map[string]string{"Content-Type": "application/json;charset=UTF-8"}). SetBody(body). Post(requestURI2NF) if err != nil { log.Error("Failed to POST to NF:", err) services.ResponseInternalServerError500NFConnectRefused(w) return } services.ResponseWithJson(w, response.StatusCode(), response) } func PutParamConfigToNF(w http.ResponseWriter, r *http.Request) { log.Debug("PutParamConfigToNF processing... ") _, err := services.CheckFrontValidRequest(w, r) if err != nil { log.Error("Request error:", err) return } vars := mux.Vars(r) neType := vars["elementTypeValue"] if neType == "" { log.Error("elementTypeValue is empty") services.ResponseNotFound404UriNotExist(w, r) return } neId := services.GetUriParamString(r, "ne_id", ",", false, false) // no, _ := strconv.ParseInt(neId, 10, 64) neInfo, err := dborm.XormGetNeInfo(neType, neId) if err != nil { log.Error("dborm.XormGetNeInfo is failed:", err) services.ResponseInternalServerError500DatabaseOperationFailed(w) return } requestURI2NF := fmt.Sprintf("http://%s:%v%s", neInfo.Ip, neInfo.Port, r.RequestURI) log.Debug("requestURI2NF: PUT ", requestURI2NF) body, err := io.ReadAll(io.LimitReader(r.Body, global.RequestBodyMaxLen)) //io.LimitReader限制大小 if err != nil { log.Error("io.ReadAll is failed:", err) services.ResponseNotFound404UriNotExist(w, r) return } client := resty.New() response, err := client.R(). EnableTrace(). SetHeaders(map[string]string{"User-Agent": config.GetDefaultUserAgent()}). SetHeaders(map[string]string{"Content-Type": "application/json;charset=UTF-8"}). SetBody(body). Put(requestURI2NF) if err != nil { log.Error("Put to NF failed:", err) services.ResponseInternalServerError500NFConnectRefused(w) return } services.ResponseWithJson(w, response.StatusCode(), response) } func DeleteParamConfigToNF(w http.ResponseWriter, r *http.Request) { log.Debug("DeleteParamConfigToNF processing... ") _, err := services.CheckFrontValidRequest(w, r) if err != nil { log.Error("Request error:", err) return } vars := mux.Vars(r) neType := vars["elementTypeValue"] if neType == "" { log.Error("elementTypeValue is empty") services.ResponseNotFound404UriNotExist(w, r) return } neId := services.GetUriParamString(r, "ne_id", ",", false, false) // no, _ := strconv.ParseInt(neId, 10, 64) neInfo, err := dborm.XormGetNeInfo(neType, neId) if err != nil { log.Error("dborm.XormGetNeInfo is failed:", err) services.ResponseInternalServerError500DatabaseOperationFailed(w) return } requestURI2NF := fmt.Sprintf("http://%s:%v%s", neInfo.Ip, neInfo.Port, r.RequestURI) log.Debug("requestURI2NF: DELETE ", requestURI2NF) client := resty.New() response, err := client.R(). EnableTrace(). SetHeaders(map[string]string{"User-Agent": config.GetDefaultUserAgent()}). SetHeaders(map[string]string{"Content-Type": "application/json;charset=UTF-8"}). Delete(requestURI2NF) if err != nil { log.Error("Failed to delete parameter:", err) services.ResponseInternalServerError500NFConnectRefused(w) return } services.ResponseWithJson(w, response.StatusCode(), response) }