fix: PCF ueinfo

This commit is contained in:
2024-07-22 11:08:41 +08:00
parent d15593bcf4
commit cea7ce2b1c
2 changed files with 104 additions and 5 deletions

View File

@@ -251,7 +251,7 @@ type UEInfoResponse struct {
} }
// Get UEInfo from NF/NFs, SMF Online users // Get UEInfo from NF/NFs, SMF Online users
func GetUEInfoFromNF(w http.ResponseWriter, r *http.Request) { func GetSMFUEInfoFromNF(w http.ResponseWriter, r *http.Request) {
log.Debug("GetUEInfoFromNF processing... ") log.Debug("GetUEInfoFromNF processing... ")
neId := ctx.GetQuery(r, "neId") neId := ctx.GetQuery(r, "neId")
@@ -477,6 +477,105 @@ func GetIMSUEInfoFromNF(w http.ResponseWriter, r *http.Request) {
services.ResponseWithJson(w, http.StatusOK, response) services.ResponseWithJson(w, http.StatusOK, response)
} }
// Get UEInfo from NF/NFs, PCF Online users
func GetPCFUEInfoFromNF(w http.ResponseWriter, r *http.Request) {
log.Debug("GetUEInfoFromNF processing... ")
neId := ctx.GetQuery(r, "neId")
neType := "pcf"
// if neType == "" || neId == "" {
// log.Error("elementTypeValue/neId is empty")
// services.ResponseNotFound404UriNotExist(w, r)
// return
// }
var tenantName string
tenantNames := services.GetParamsArrByName("tenantName", r)
if len(tenantNames) > 0 {
tenantName = tenantNames[0]
}
var neInfos []model.NeInfo
if neId != "" {
neInfo := neService.NewNeInfoImpl.SelectNeInfoByNeTypeAndNeID(neType, neId)
neInfos = append(neInfos, neInfo)
} else {
neInfos = neService.NewNeInfoImpl.SelectNeInfoByNeType(neType)
}
var response UEInfoResponse
for _, neInfo := range neInfos {
//if neInfo.NeId == neId && neInfo.NeId != "" {
requestURI2NF := fmt.Sprintf("http://%s:%v%s", neInfo.IP, neInfo.Port, r.RequestURI)
//requestURI2NF := "http://127.0.0.1:4523/m1/3157310-1528434-default/api/rest/ueManagement/v1/elementType/smf/objectType/ueInfo?apifoxApiId=128609449"
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("Failed to Get from NF:", err)
// services.ResponseInternalServerError500ProcessError(w, err)
// return
continue
}
// multi-tenancy solution
var tenantID, where string
//var cols []string
if tenantName != "" {
where = fmt.Sprintf("status='1' and tenant_name='%s'", tenantName)
tenantID, _ = dborm.XormGetSingleColStringByWhere("sys_tenant", "tenant_id", where)
} else {
userName := ctx.LoginUserToUserName(r)
where = fmt.Sprintf("status='1' and user_name='%s'", userName)
tenantID, _ = dborm.XormGetSingleColStringByWhere("sys_user", "tenant_id", where)
where = fmt.Sprintf("status='1' and tenant_id='%s'", tenantID)
tenantName, _ = dborm.XormGetSingleColStringByWhere("sys_tenant", "tenant_name", where)
}
if tenantID == "" {
var ueInfos UEInfoResponse
_ = json.Unmarshal(resp.Body(), &ueInfos)
for i := 0; i < len(ueInfos.Data); i++ {
where = fmt.Sprintf("status='1' and tenancy_type='IMSI' and '%s' like tenancy_key", ueInfos.Data[i].IMSI[5:])
tenantID, _ = dborm.XormGetSingleColStringByWhere("sys_tenant", "parent_id", where)
where = fmt.Sprintf("status='1' and tenant_id='%s'", tenantID)
tenantName, _ = dborm.XormGetSingleColStringByWhere("sys_tenant", "tenant_name", where)
log.Tracef("tenantName: %s tenantID: %s", tenantName, tenantID)
ueInfos.Data[i].NeType = strings.ToUpper(neType)
ueInfos.Data[i].NeID = neInfo.NeId
ueInfos.Data[i].TenantName = tenantName
response.Data = append(response.Data, ueInfos.Data[i])
}
// services.ResponseWithJson(w, resp.StatusCode(), &response)
// return
} else {
//var tenantUEInfos []TenantUEInfo
var ueInfos UEInfoResponse
log.Trace("body:", string(resp.Body()))
_ = json.Unmarshal(resp.Body(), &ueInfos)
log.Trace("ueInfos:", ueInfos)
for _, n := range ueInfos.Data {
log.Trace("tenantID, n.IMSI[5:]:", tenantID, n.IMSI[5:])
// "imsi": "imsi-460000100029999",
where = fmt.Sprintf("status='1' and parent_id='%s' and tenancy_type='IMSI' and '%s' like tenancy_key", tenantID, n.IMSI[5:])
has, err := dborm.XormExistTableOne("sys_tenant", where)
if err == nil && has {
n.NeType = strings.ToUpper(neType)
n.NeID = neInfo.NeId
n.TenantName = tenantName
response.Data = append(response.Data, n)
}
}
// var response UEInfoResponse
// response.Data = tenantUEInfos
// services.ResponseWithJson(w, resp.StatusCode(), &response)
// return
}
}
services.ResponseWithJson(w, http.StatusOK, response)
}
// POST PCF User Info from NF/NFs // POST PCF User Info from NF/NFs
func PostPCFUserInfo(w http.ResponseWriter, r *http.Request) { func PostPCFUserInfo(w http.ResponseWriter, r *http.Request) {
log.Info("PostPCFUserInfo processing... ") log.Info("PostPCFUserInfo processing... ")

View File

@@ -239,16 +239,16 @@ func init() {
Register("GET", aaaa.CustomUriAAAASSO, aaaa.GetSSOFromAAAA, nil) Register("GET", aaaa.CustomUriAAAASSO, aaaa.GetSSOFromAAAA, nil)
// UEInfo: SMF // UEInfo: SMF
Register("GET", ue.UriSMFUEInfo, ue.GetUEInfoFromNF, nil) Register("GET", ue.UriSMFUEInfo, ue.GetSMFUEInfoFromNF, nil)
Register("GET", ue.CustomUriSMFUEInfo, ue.GetUEInfoFromNF, nil) Register("GET", ue.CustomUriSMFUEInfo, ue.GetSMFUEInfoFromNF, nil)
// UEInfo: IMS // UEInfo: IMS
Register("GET", ue.UriIMSUEInfo, ue.GetIMSUEInfoFromNF, nil) Register("GET", ue.UriIMSUEInfo, ue.GetIMSUEInfoFromNF, nil)
Register("GET", ue.CustomUriIMSUEInfo, ue.GetIMSUEInfoFromNF, nil) Register("GET", ue.CustomUriIMSUEInfo, ue.GetIMSUEInfoFromNF, nil)
// UEInfo: PCF // UEInfo: PCF
Register("GET", ue.UriPCFUser, ue.GetUEInfoFromNF, nil) Register("GET", ue.UriPCFUser, ue.GetPCFUEInfoFromNF, nil)
Register("GET", ue.CustomUriPCFUser, ue.GetUEInfoFromNF, nil) Register("GET", ue.CustomUriPCFUser, ue.GetPCFUEInfoFromNF, nil)
Register("POST", ue.UriPCFUser, ue.PostPCFUserInfo, nil) Register("POST", ue.UriPCFUser, ue.PostPCFUserInfo, nil)
Register("POST", ue.CustomUriPCFUser, ue.PostPCFUserInfo, nil) Register("POST", ue.CustomUriPCFUser, ue.PostPCFUserInfo, nil)
Register("PUT", ue.UriPCFUser, ue.PutPCFUserInfo, nil) Register("PUT", ue.UriPCFUser, ue.PutPCFUserInfo, nil)