"bytes"
"encoding/json"
"fmt"
- "github.com/spf13/viper"
+ "net"
"net/http"
"os"
"os/signal"
"strings"
"sync/atomic"
"syscall"
+ "testing"
"time"
+
+ "github.com/spf13/viper"
)
+// For testing purpose go version 1.13 ->
+
+var _ = func() bool {
+ testing.Init()
+ return true
+}()
+
type ReadyCB func(interface{})
type ShutdownCB func()
// XApp is an application instance
Rmr *RMRClient
Sdl *SDLClient
+ SdlStorage *SDLStorage
Rnib *RNIBClient
Resource *Router
Metric *Metrics
Logger *Log
Config Configurator
Subscription *Subscriber
- Alarm *AlarmClient
+ //Alarm *AlarmClient
Util *Utils
readyCb ReadyCB
readyCbParams interface{}
)
func IsReady() bool {
- return Rmr != nil && Rmr.IsReady() && Sdl != nil && Sdl.IsReady()
+ return Rmr != nil && Rmr.IsReady() && SdlStorage != nil && SdlStorage.IsReady()
}
func SetReadyCB(cb ReadyCB, params interface{}) {
}
func XappReadyCb(params interface{}) {
- Alarm = NewAlarmClient(viper.GetString("moId"), viper.GetString("name"))
+ //Alarm = NewAlarmClient(viper.GetString("moId"), viper.GetString("name"))
if readyCb != nil {
readyCb(readyCbParams)
}
for {
time.Sleep(5 * time.Second)
if !IsHealthProbeReady() {
- Logger.Info("xApp is not ready yet, waiting ...")
+ Logger.Info("Application='%s' is not ready yet, waiting ...", viper.GetString("name"))
continue
}
- Logger.Info("xApp is now up and ready, continue with registration ...")
+ Logger.Debug("Application='%s' is now up and ready, continue with registration ...", viper.GetString("name"))
if err := doRegister(); err == nil {
- Logger.Info("xApp registration done, proceeding with startup ...")
+ Logger.Info("Registration done, proceeding with startup ...")
break
}
}
svc := fmt.Sprintf(service, strings.ToUpper(appnamespace), strings.ToUpper(host))
url := strings.Split(os.Getenv(strings.Replace(svc, "-", "_", -1)), "//")
+
+ Logger.Info("getService: %+v %+v", svc, url)
if len(url) > 1 {
return url[1]
}
} else {
Logger.SetLevel(viper.GetInt("logger.level"))
}
- Logger.SetFormat(0)
+
+ if !viper.IsSet("controls.logger.noFormat") || !viper.GetBool("controls.logger.noFormat") {
+ Logger.SetFormat(0)
+ }
Resource = NewRouter()
Config = Configurator{}
Metric = NewMetrics(viper.GetString("metrics.url"), viper.GetString("metrics.namespace"), Resource.router)
- Subscription = NewSubscriber(viper.GetString("subscription.host"), viper.GetInt("subscription.timeout"))
+ Subscription = NewSubscriber(viper.GetString("controls.subscription.host"), viper.GetInt("controls.subscription.timeout"))
+ SdlStorage = NewSdlStorage()
Sdl = NewSDLClient(viper.GetString("controls.db.namespace"))
- Rnib = NewRNIBClient()
+ Rnib = GetNewRnibClient(SdlStorage.db)
Util = NewUtils()
InstallSignalHandler()
}
+func getIpAdress() string {
+ var ip net.IP
+ itf, err := net.InterfaceByName(os.Getenv("INTERFACE_NAME"))
+ if err != nil {
+ Logger.Info("Interface name is not able to resolve " + err.Error())
+ return ip.String()
+ }
+ item, err := itf.Addrs()
+ if err != nil {
+ Logger.Info("IP address is not able to resolve " + err.Error())
+ return ip.String()
+ }
+ for _, addr := range item {
+ switch v := addr.(type) {
+ case *net.IPNet:
+ if !v.IP.IsLinkLocalUnicast() {
+ ip = v.IP
+ }
+ }
+ }
+ return ip.String()
+}
+
func RunWithParams(c MessageConsumer, sdlcheck bool) {
Rmr = NewRMRClient()
Rmr.SetReadyCB(XappReadyCb, nil)
-
- host := fmt.Sprintf(":%d", GetPortData("http").Port)
+ ipString := getIpAdress()
+ var host string
+ if ipString == "<nil>" {
+ host = fmt.Sprintf(":%d", GetPortData("http").Port)
+ } else {
+ host = fmt.Sprintf("%s:%d", ipString, GetPortData("http").Port)
+ }
go http.ListenAndServe(host, Resource.router)
Logger.Info(fmt.Sprintf("Xapp started, listening on: %s", host))
if sdlcheck {
- Sdl.TestConnection()
+ SdlStorage.TestConnection(viper.GetString("controls.db.namespace"))
}
go registerXapp()