"encoding/json"
"errors"
"fmt"
- //"io/ioutil"
"log"
"net/http"
"os"
)
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{}
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())
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()
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
//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
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
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 {
}
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)
+}