Change log level
[ric-plt/xapp-frame.git] / pkg / xapp / xapp.go
index 1f02285..583d288 100755 (executable)
@@ -23,16 +23,26 @@ import (
        "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()
 
@@ -40,6 +50,7 @@ var (
        // XApp is an application instance
        Rmr           *RMRClient
        Sdl           *SDLClient
+       SdlStorage    *SDLStorage
        Rnib          *RNIBClient
        Resource      *Router
        Metric        *Metrics
@@ -47,6 +58,7 @@ var (
        Config        Configurator
        Subscription  *Subscriber
        Alarm         *AlarmClient
+       Util          *Utils
        readyCb       ReadyCB
        readyCbParams interface{}
        shutdownCb    ShutdownCB
@@ -55,7 +67,7 @@ var (
 )
 
 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{}) {
@@ -90,13 +102,13 @@ func registerXapp() {
        for {
                time.Sleep(5 * time.Second)
                if !IsHealthProbeReady() {
-                       Logger.Info("xApp is not ready yet, waiting ...")
+                       Logger.Debug("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
                }
        }
@@ -110,6 +122,8 @@ func getService(host, service string) string {
 
        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]
        }
@@ -242,29 +256,62 @@ func init() {
        } 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()