X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;f=pkg%2Frestful%2Frestful.go;h=e6bebb788bb9e9a289bfb8b270e2952235297ded;hb=refs%2Fchanges%2F51%2F12851%2F1;hp=077eea0e1af782f213019a964f84e0f5cb18fdd9;hpb=78c892e865c7ba0c90ec344ffb10db4ebc461ca9;p=ric-plt%2Fappmgr.git diff --git a/pkg/restful/restful.go b/pkg/restful/restful.go index 077eea0..e6bebb7 100755 --- a/pkg/restful/restful.go +++ b/pkg/restful/restful.go @@ -23,7 +23,6 @@ import ( "encoding/json" "errors" "fmt" - //"io/ioutil" "log" "net/http" "os" @@ -45,15 +44,16 @@ import ( ) type XappData struct { - httpendpoint string - rmrendpoint string - rmrserviceep string - status string - xappname string - xappinstname string - xappversion string - xappconfigpath string - xappInstance *models.XappInstance + httpendpoint string + rmrendpoint string + rmrserviceep string + status string + xappname string + xappinstname string + xappversion string + xappconfigpath string + xappdynamiconfig bool + xappInstance *models.XappInstance } var xappmap = map[string]map[string]*XappData{} @@ -75,6 +75,7 @@ func (r *Restful) Run() { appmgr.Logger.Info("Xapp manager started ... serving on %s:%d\n", server.Host, server.Port) + go r.symptomdataServer() go r.RetrieveApps() if err := server.Serve(); err != nil { log.Fatal(err.Error()) @@ -209,6 +210,7 @@ func httpGetXAppsconfig(url string) *string { appmgr.Logger.Info("Invoked httprestful.httpGetXApps: " + url) resp, err := http.Get(url) if err != nil { + appmgr.Logger.Error("Error while querying config to Xapp: ", err.Error()) return nil } defer resp.Body.Close() @@ -303,15 +305,22 @@ func (r *Restful) DeregisterXapp(params models.DeregisterRequest) (xapp *models. func (r *Restful) PrepareConfig(params models.RegisterRequest, updateflag bool) (xapp *models.Xapp, err error) { maxRetries := 5 - //tmpString := strings.Split(*params.HTTPEndpoint, "//") + configPresent := false + var xappconfig *string appmgr.Logger.Info("http endpoint is %s", *params.HTTPEndpoint) for i := 1; i <= maxRetries; i++ { - xappconfig := httpGetXAppsconfig(fmt.Sprintf("http://%s%s", *params.HTTPEndpoint, params.ConfigPath)) + if params.Config != "" { + appmgr.Logger.Info("Getting config during xapp register: %v", params.Config) + xappconfig = ¶ms.Config + configPresent = true + } else { + appmgr.Logger.Info("Getting config from xapp:") + xappconfig = httpGetXAppsconfig(fmt.Sprintf("http://%s%s", *params.HTTPEndpoint, params.ConfigPath)) + } if xappconfig != nil { data := parseConfig(xappconfig) if data != nil { - appmgr.Logger.Info("iRetry Count = %v", i) var xapp models.Xapp xapp.Name = params.AppName @@ -319,20 +328,23 @@ func (r *Restful) PrepareConfig(params models.RegisterRequest, updateflag bool) //xapp.Status = params.Status r.rh.UpdateAppData(params, updateflag) - return r.FillInstanceData(params, &xapp, *data) + return r.FillInstanceData(params, &xapp, *data, configPresent) break } else { - appmgr.Logger.Error("Couldn't get data due to" + err.Error()) + appmgr.Logger.Error("No Data from xapp") + } + if configPresent == true { + break } - time.Sleep(2 * time.Second) } + appmgr.Logger.Info("Retrying query configuration from xapp, try no : %d", i) + time.Sleep(4 * time.Second) } return nil, errors.New("Unable to get configmap after 5 retries") } -func (r *Restful) FillInstanceData(params models.RegisterRequest, xapp *models.Xapp, rtData appmgr.RtmData) (xapps *models.Xapp, err error) { +func (r *Restful) FillInstanceData(params models.RegisterRequest, xapp *models.Xapp, rtData appmgr.RtmData, configFlag bool) (xapps *models.Xapp, err error) { - //tmpString := strings.Split(*params.RmrEndpoint, "//") endPointStr := strings.Split(*params.RmrEndpoint, ":") var x models.XappInstance x.Name = params.AppInstanceName @@ -348,14 +360,15 @@ func (r *Restful) FillInstanceData(params models.RegisterRequest, xapp *models.X rmrsrvname := fmt.Sprintf("service-ricxapp-%s-rmr.ricxapp:%s", *params.AppInstanceName, x.Port) a := &XappData{httpendpoint: *params.HTTPEndpoint, - rmrendpoint: *params.RmrEndpoint, - rmrserviceep: rmrsrvname, - status: "deployed", - xappname: *params.AppName, - xappversion: params.AppVersion, - xappinstname: *params.AppInstanceName, - xappconfigpath: params.ConfigPath, - xappInstance: &x} + rmrendpoint: *params.RmrEndpoint, + rmrserviceep: rmrsrvname, + status: "deployed", + xappname: *params.AppName, + xappversion: params.AppVersion, + xappinstname: *params.AppInstanceName, + xappconfigpath: params.ConfigPath, + xappdynamiconfig: configFlag, + xappInstance: &x} if _, ok := xappmap[*params.AppName]; ok { xappmap[*params.AppName][*params.AppInstanceName] = a @@ -390,9 +403,12 @@ func (r *Restful) GetApps() (xapps models.AllDeployedXapps, err error) { func (r *Restful) getAppConfig() (configList models.AllXappConfig) { for _, v := range xappmap { - namespace := "ricxapp" //Namespace hardcode, to be removed later + namespace := "ricxapp" //Namespace hardcoded, to be removed later for _, j := range v { var activeConfig interface{} + if j.xappdynamiconfig { + continue + } xappconfig := httpGetXAppsconfig(fmt.Sprintf("http://%s%s", j.httpendpoint, j.xappconfigpath)) if xappconfig == nil { @@ -412,3 +428,26 @@ func (r *Restful) getAppConfig() (configList models.AllXappConfig) { } return } + +func (r *Restful) symptomdataServer() { + http.HandleFunc("/ric/v1/symptomdata", func(w http.ResponseWriter, req *http.Request) { + d, _ := r.GetApps() + xappData := struct { + XappList models.AllDeployedXapps `json:"xappList"` + ConfigList models.AllXappConfig `json:"configList"` + SubscriptionList models.AllSubscriptions `json:"subscriptionList"` + }{ + d, + r.getAppConfig(), + r.rh.GetAllSubscriptions(), + } + + w.Header().Set("Content-Type", "application/json") + w.Header().Set("Content-Disposition", "attachment; filename=platform/apps_info.json") + w.WriteHeader(http.StatusOK) + resp, _ := json.MarshalIndent(xappData, "", " ") + w.Write(resp) + }) + + http.ListenAndServe(":8081", nil) +}