+func (r *Restful) RegisterXapp(params models.RegisterRequest) (xapp *models.Xapp, err error) {
+ return r.PrepareConfig(params, true)
+}
+
+func (r *Restful) DeregisterXapp(params models.DeregisterRequest) (xapp *models.Xapp, err error) {
+ var registeredlist models.RegisterRequest
+ registeredlist.AppName = params.AppName
+ registeredlist.AppInstanceName = params.AppInstanceName
+ if _, found := xappmap[*params.AppName]; found {
+ var x models.Xapp
+ x.Instances = append(x.Instances, xappmap[*params.AppName][*params.AppInstanceName].xappInstance)
+ registeredlist.HTTPEndpoint = &xappmap[*params.AppName][*params.AppInstanceName].httpendpoint
+ delete(xappmap[*params.AppName], *params.AppInstanceName)
+ if len(xappmap[*params.AppName]) == 0 {
+ delete(xappmap, *params.AppName)
+ }
+ r.rh.UpdateAppData(registeredlist, true)
+ return &x, nil
+ } else {
+ appmgr.Logger.Error("XApp Instance %v Not Found", *params.AppName)
+ return nil, errors.New("XApp Instance Not Found")
+ }
+}
+
+func (r *Restful) PrepareConfig(params models.RegisterRequest, updateflag bool) (xapp *models.Xapp, err error) {
+ maxRetries := 5
+ configPresent := false
+ var xappconfig *string
+ appmgr.Logger.Info("http endpoint is %s", *params.HTTPEndpoint)
+ for i := 1; i <= maxRetries; i++ {
+ 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 {
+ var xapp models.Xapp
+
+ xapp.Name = params.AppName
+ xapp.Version = params.AppVersion
+ //xapp.Status = params.Status
+
+ r.rh.UpdateAppData(params, updateflag)
+ return r.FillInstanceData(params, &xapp, *data, configPresent)
+ break
+ } else {
+ appmgr.Logger.Error("No Data from xapp")
+ }
+ if configPresent == true {
+ break
+ }
+ }
+ 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")