diff --git a/features/trace/trace.go b/features/trace/trace.go deleted file mode 100644 index 78ff36cf..00000000 --- a/features/trace/trace.go +++ /dev/null @@ -1,383 +0,0 @@ -package trace - -import ( - "encoding/json" - "fmt" - "io" - "net/http" - "strings" - - "github.com/go-resty/resty/v2" - - "be.ems/lib/config" - "be.ems/lib/dborm" - "be.ems/lib/global" - "be.ems/lib/log" - "be.ems/lib/services" -) - -var ( - UriTraceTaskV1 = config.DefaultUriPrefix + "/traceManagement/v1/subscriptions" - UriTraceTask = config.DefaultUriPrefix + "/traceManagement/{apiVersion}/subscriptions" - - CustomUriTraceTaskV1 = config.UriPrefix + "/traceManagement/v1/subscriptions" - CustomUriTraceTask = config.UriPrefix + "/traceManagement/{apiVersion}/subscriptions" -) - -type TraceTask struct { - Id int `json:"id" xorm:"pk 'id' autoincr"` - TraceType string `json:"traceType"` - StartTime string `json:"startTime"` - EndTime string `json:"endTime"` - Imsi string `json:"imsi"` - Msisdn string `json:"msisdn"` - SrcIp string `json:"srcIp"` - DstIp string `json:"dstIp"` - SignalPort int16 `json:"signalPort"` - NeType string `json:"neType"` - NeId string `json:"neId"` - UeIp string `json:"ueIp"` - Interfaces []string `json:"interfaces"` - NotifyUrl string `json:"notifyUrl" xorm:"-"` - Status string `json:"-" xorm:"status"` - SuccNEs []string `json:"-" xorm:"succ_nes"` - FailNEs []string `json:"-" xorm:"fail_nes"` - AccountID string `json:"accountId" xorm:"account_id"` - Comment string `json:"comment" xorm:"comment"` - UpdateTime string `json:"-" xorm:"-"` -} - -var client = resty.New() - -/* -func init() { - client.SetTimeout(3 * time.Second) -} -*/ - -// Post trace task to NF/NFs -func PostTraceTaskToNF(w http.ResponseWriter, r *http.Request) { - log.Debug("PostTraceTaskToNF processing... ") - - //vars := mux.Vars(r) - - // token, err := services.CheckFrontValidRequest(w, r) - // if err != nil { - // log.Error("Request error:", err) - // return - // } - // log.Debug("AccessToken:", token) - - body, err := io.ReadAll(io.LimitReader(r.Body, int64(config.GetYamlConfig().Params.UriMaxLen))) - if err != nil { - log.Error("io.ReadAll is failed:", err) - services.ResponseNotFound404UriNotExist(w, r) - return - } - log.Trace("body:", string(body)) - - traceTask := new(TraceTask) - _ = json.Unmarshal(body, traceTask) - log.Debug("traceTask:", traceTask) - - var neTypes []string - // do not set device - if traceTask.NeType == "" { - // query neType by interface - if len(traceTask.Interfaces) > 0 { - err := dborm.XormGetSingleColStringArrayByIn("trace_info", "ne_type", "interface", traceTask.Interfaces, &neTypes) - if err != nil { - log.Error("Failed to dborm.XormGetSingleCol:", err) - services.ResponseInternalServerError500ProcessError(w, err) - return - } - } else { - neTypes = []string{"AMF", "SMF", "UDM", "AUSF", "UPF"} - } - } else { - neTypes = append(neTypes, traceTask.NeType) - } - log.Debug("neTypes:", neTypes) - - traceTask.Status = "Inactive" - _, err = dborm.XormInsertTableOne("trace_task", traceTask) - if err != nil { - log.Error("Failed to dborm.XormInsertTableOne:", err) - services.ResponseInternalServerError500ProcessError(w, err) - return - } - - traceTask.NotifyUrl = config.GetYamlConfig().OMC.GtpUri - log.Trace("traceTask:", traceTask) - - for _, neType := range neTypes { - var neInfos []dborm.NeInfo - if traceTask.NeId == "" { - err := dborm.XormGetNeInfoByNeType(neType, &neInfos) - if err != nil { - log.Error("Failed to dborm.XormGetNeInfoByNeType:", err) - services.ResponseInternalServerError500ProcessError(w, err) - return - } - } else { - neInfo, err := dborm.XormGetNeInfo(neType, traceTask.NeId) - if err != nil { - log.Error("Failed to dborm.XormGetNeInfoByNeType:", err) - services.ResponseInternalServerError500ProcessError(w, err) - return - } - neInfos = append(neInfos, *neInfo) - } - for _, neInfo := range neInfos { - hostUri := fmt.Sprintf("http://%s:%v", neInfo.Ip, neInfo.Port) - requestURI2NF := fmt.Sprintf("%s%s", hostUri, UriTraceTaskV1) - log.Debug("requestURI2NF:", requestURI2NF) - - body, _ := json.Marshal(traceTask) - log.Debug("body:", string(body)) - resp, 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:", err) - failNE := fmt.Sprintf("%s.%s", neInfo.NeType, neInfo.NeId) - traceTask.FailNEs = append(traceTask.FailNEs, failNE) - } else { - switch resp.StatusCode() { - case http.StatusOK, http.StatusCreated, http.StatusNoContent, http.StatusAccepted: - succNE := fmt.Sprintf("%s.%s", neInfo.NeType, neInfo.NeId) - traceTask.SuccNEs = append(traceTask.SuccNEs, succNE) - default: - log.Warnf("Post return code:%d, message:%s", resp.StatusCode(), string(resp.Body())) - failNE := fmt.Sprintf("%s.%s", neInfo.NeType, neInfo.NeId) - traceTask.FailNEs = append(traceTask.FailNEs, failNE) - } - } - } - } - - if len(traceTask.SuccNEs) > 0 { - traceTask.Status = "Active" - _, err = dborm.XormUpdateTableById(traceTask.Id, "trace_task", traceTask) - if err != nil { - log.Error("Failed to dborm.XormUpdateTableById:", err) - services.ResponseInternalServerError500ProcessError(w, err) - return - } - services.ResponseStatusOK204NoContent(w) - } else { - traceTask.Status = "Failed" - _, err = dborm.XormUpdateTableById(traceTask.Id, "trace_task", traceTask) - if err != nil { - log.Error("Failed to dborm.XormUpdateTableById:", err) - services.ResponseInternalServerError500ProcessError(w, err) - return - } - err = global.ErrTraceFailedDistributeToNEs - log.Error(err) - services.ResponseInternalServerError500ProcessError(w, err) - return - } -} - -func PutTraceTaskToNF(w http.ResponseWriter, r *http.Request) { - log.Debug("PutTraceTaskToNF processing... ") - - //vars := mux.Vars(r) - - // token, err := services.CheckFrontValidRequest(w, r) - // if err != nil { - // log.Error("Request error:", err) - // return - // } - // log.Debug("AccessToken:", token) - - body, err := io.ReadAll(io.LimitReader(r.Body, int64(config.GetYamlConfig().Params.UriMaxLen))) - if err != nil { - log.Error("io.ReadAll is failed:", err) - services.ResponseNotFound404UriNotExist(w, r) - return - } - - traceTask := new(TraceTask) - _ = json.Unmarshal(body, traceTask) - - traceTask.NotifyUrl = config.GetYamlConfig().OMC.GtpUri - log.Debug("traceTask:", traceTask) - - var neTypes []string - // do not set device - if traceTask.NeType == "" { - // query neType by interface - if len(traceTask.Interfaces) > 0 { - err := dborm.XormGetSingleColStringArrayByIn("trace_info", "ne_type", "interface", traceTask.Interfaces, &neTypes) - if err != nil { - log.Error("Failed to dborm.XormGetSingleColStringArrayByIn:", err) - services.ResponseInternalServerError500ProcessError(w, err) - return - } - } else { - neTypes = []string{"AMF", "SMF", "UDM", "AUSF", "UPF"} - } - - } else { - neTypes = append(neTypes, traceTask.NeType) - } - log.Debug("neTypes:", neTypes) - - for _, neType := range neTypes { - var neInfos []dborm.NeInfo - if traceTask.NeId == "" { - err := dborm.XormGetNeInfoByNeType(neType, &neInfos) - if err != nil { - log.Error("Failed to dborm.XormGetNeInfoByNeType:", err) - services.ResponseInternalServerError500ProcessError(w, err) - return - } - } else { - neInfo, err := dborm.XormGetNeInfo(neType, traceTask.NeId) - if err != nil { - log.Error("Failed to dborm.XormGetNeInfoByNeType:", err) - services.ResponseInternalServerError500ProcessError(w, err) - return - } - neInfos = append(neInfos, *neInfo) - } - for _, neInfo := range neInfos { - hostUri := fmt.Sprintf("http://%s:%v", neInfo.Ip, neInfo.Port) - requestURI2NF := fmt.Sprintf("%s%s", hostUri, UriTraceTaskV1) - log.Debug("requestURI2NF:", requestURI2NF) - - body, _ := json.Marshal(traceTask) - log.Debug("body:", string(body)) - resp, 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("Failed to Put:", err) - failNE := fmt.Sprintf("%s.%s", neInfo.NeType, neInfo.NeId) - traceTask.FailNEs = append(traceTask.FailNEs, failNE) - } else { - switch resp.StatusCode() { - case http.StatusOK, http.StatusCreated, http.StatusNoContent, http.StatusAccepted: - succNE := fmt.Sprintf("%s.%s", neInfo.NeType, neInfo.NeId) - traceTask.SuccNEs = append(traceTask.SuccNEs, succNE) - default: - log.Warn("Post return code:%d, message:%s", resp.StatusCode(), string(resp.Body())) - failNE := fmt.Sprintf("%s.%s", neInfo.NeType, neInfo.NeId) - traceTask.FailNEs = append(traceTask.FailNEs, failNE) - } - } - - } - } - - if len(traceTask.SuccNEs) > 0 { - traceTask.Status = "Active" - _, err = dborm.XormUpdateTableById(traceTask.Id, "trace_task", traceTask) - if err != nil { - log.Error("Failed to dborm.XormUpdateTableById:", err) - services.ResponseInternalServerError500ProcessError(w, err) - return - } - services.ResponseStatusOK204NoContent(w) - } else { - traceTask.Status = "Failed" - _, err = dborm.XormUpdateTableById(traceTask.Id, "trace_task", traceTask) - if err != nil { - log.Error("Failed to dborm.XormUpdateTableById:", err) - services.ResponseInternalServerError500ProcessError(w, err) - return - } - err = global.ErrTraceFailedDistributeToNEs - log.Error(err) - services.ResponseInternalServerError500ProcessError(w, err) - return - } -} - -func DeleteTraceTaskToNF(w http.ResponseWriter, r *http.Request) { - log.Debug("DeleteTraceTaskToNF processing... ") - - // token, err := services.CheckFrontValidRequest(w, r) - // if err != nil { - // log.Error("Request error:", err) - // return - // } - // log.Debug("AccessToken:", token) - - vars := r.URL.Query() - ids, ok := vars["id"] - if !ok || len(ids) == 0 { - err := global.ErrTraceNotCarriedTaskID - log.Error(err) - services.ResponseInternalServerError500ProcessError(w, err) - return - } - log.Debug("ids:", ids) - - for _, id := range ids { - log.Debug("id:", id) - - var succNes []string - err := dborm.XormGetColStringArrayByWhere("trace_task", "succ_nes", fmt.Sprintf("id=%s", id), &succNes) - if err != nil { - log.Error("Failed to dborm.XormGetSingleColStringArrayByWhere:", err) - services.ResponseInternalServerError500ProcessError(w, err) - return - } - log.Debug("succNes:", succNes) - nes := new([]string) - if len(succNes) > 0 { - _ = json.Unmarshal([]byte(succNes[0]), nes) - } - log.Debug("nes:", nes) - - for _, ne := range *nes { - i := strings.Index(ne, ".") - neType := ne[0:i] - neId := ne[i+1:] - log.Debugf("ne:%s neType:%s neId:%s", ne, neType, neId) - neInfo, err := dborm.XormGetNeInfo(neType, neId) - if err != nil { - log.Error("Failed to dborm.XormGetNeInfo:", err) - services.ResponseInternalServerError500ProcessError(w, err) - return - } - - hostUri := fmt.Sprintf("http://%s:%v", neInfo.Ip, neInfo.Port) - requestURI2NF := fmt.Sprintf("%s%s?id=%s", hostUri, UriTraceTaskV1, id) - log.Debug("requestURI2NF:", requestURI2NF) - - _, 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:", err) - services.ResponseInternalServerError500ProcessError(w, err) - return - } - } - - _, err = dborm.XormDeleteDataByWhere(fmt.Sprintf("id=%s", id), "trace_task") - if err != nil { - log.Error("Failed to dborm.XormDeleteDataByWhere:", err) - services.ResponseInternalServerError500ProcessError(w, err) - return - } - } - services.ResponseStatusOK204NoContent(w) -} - -func GetRawMessage(w http.ResponseWriter, r *http.Request) { - log.Debug("GetRawMessage processing... ") - -} diff --git a/lib/routes/routes.go b/lib/routes/routes.go index 1b91d233..e276ef18 100644 --- a/lib/routes/routes.go +++ b/lib/routes/routes.go @@ -18,7 +18,6 @@ import ( "be.ems/features/security" "be.ems/features/sm" "be.ems/features/state" - "be.ems/features/trace" "be.ems/features/ue" "be.ems/lib/midware" "be.ems/lib/services" @@ -207,15 +206,6 @@ func init() { Register("PUT", cm.CustomUriSoftwareNE, cm.ActiveSoftwareToNF, nil) Register("PATCH", cm.CustomUriSoftwareNE, cm.RollBackSoftwareToNF, nil) - // Trace management 跟踪任务 - Register("POST", trace.UriTraceTask, trace.PostTraceTaskToNF, midware.LogOperate(collectlogs.OptionNew("Trace Task", collectlogs.BUSINESS_TYPE_INSERT))) - Register("PUT", trace.UriTraceTask, trace.PutTraceTaskToNF, midware.LogOperate(collectlogs.OptionNew("Trace Task", collectlogs.BUSINESS_TYPE_UPDATE))) - Register("DELETE", trace.UriTraceTask, trace.DeleteTraceTaskToNF, midware.LogOperate(collectlogs.OptionNew("Trace Task", collectlogs.BUSINESS_TYPE_DELETE))) - - Register("POST", trace.CustomUriTraceTask, trace.PostTraceTaskToNF, nil) - Register("PUT", trace.CustomUriTraceTask, trace.PutTraceTaskToNF, nil) - Register("DELETE", trace.CustomUriTraceTask, trace.DeleteTraceTaskToNF, nil) - // file management Register("POST", file.UriFile, file.UploadFile, midware.LogOperate(collectlogs.OptionNew("File", collectlogs.BUSINESS_TYPE_INSERT))) Register("GET", file.UriFile, file.DownloadFile, midware.LogOperate(collectlogs.OptionNew("File", collectlogs.BUSINESS_TYPE_OTHER)))