var (
// 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
- Util *Utils
- readyCb ReadyCB
- readyCbParams interface{}
- shutdownCb ShutdownCB
- shutdownFlag int32
- shutdownCnt int32
+ Rmr *RMRClient
+ Sdl *SDLClient
+ SdlStorage *SDLStorage
+ Rnib *RNIBClient
+ Resource *Router
+ Metric *Metrics
+ Logger *Log
+ Config Configurator
+ Subscription *Subscriber
+ Alarm *AlarmClient
+ Util *Utils
+ readyCb ReadyCB
+ readyCbParams interface{}
+ shutdownCb ShutdownCB
+ shutdownFlag int32
+ shutdownCnt int32
+ disableAlarmClient bool
+ isRegistered bool
)
+var startTime time.Time
+
+func XappUpTime() time.Duration {
+ return time.Since(startTime)
+}
+
+func init() {
+ startTime = time.Now()
+}
+
func IsReady() bool {
return Rmr != nil && Rmr.IsReady() && SdlStorage != nil && SdlStorage.IsReady()
}
+func IsRegistered() bool {
+ return isRegistered
+}
+
func SetReadyCB(cb ReadyCB, params interface{}) {
readyCb = cb
readyCbParams = params
}
func XappReadyCb(params interface{}) {
- Alarm = NewAlarmClient(viper.GetString("moId"), viper.GetString("name"))
+ if disableAlarmClient == false {
+ Alarm = NewAlarmClient(viper.GetString("moId"), viper.GetString("name"))
+ }
if readyCb != nil {
readyCb(readyCbParams)
}
if shutdownCb != nil {
shutdownCb()
}
+
+ isRegistered = false
}
func registerXapp() {
Logger.Debug("Application='%s' is now up and ready, continue with registration ...", viper.GetString("name"))
if err := doRegister(); err == nil {
+ isRegistered = true
Logger.Info("Registration done, proceeding with startup ...")
break
}
func doPost(pltNs, url string, msg []byte, status int) error {
resp, err := http.Post(fmt.Sprintf(url, pltNs, pltNs), "application/json", bytes.NewBuffer(msg))
if err != nil || resp == nil || resp.StatusCode != status {
- Logger.Info("http.Post to '%s' failed with error: %v", fmt.Sprintf(url, pltNs, pltNs), err)
- return err
+ logdesc := fmt.Sprintf("http.Post to '%s' failed with", fmt.Sprintf(url, pltNs, pltNs))
+ if resp != nil {
+ logdesc += fmt.Sprintf(" status: %d != %d", resp.StatusCode, status)
+ } else {
+ logdesc += fmt.Sprintf(" resp: nil")
+ }
+ if err != nil {
+ logdesc += fmt.Sprintf(" err: %s", err.Error())
+ } else {
+ logdesc += fmt.Sprintf(" err: nil")
+ }
+ Logger.Info(logdesc)
+ return fmt.Errorf(logdesc)
}
+
Logger.Info("Post to '%s' done, status:%v", fmt.Sprintf(url, pltNs, pltNs), resp.Status)
return err
xappversion := viper.GetString("version")
pltNs := getPltNamespace("PLT_NAMESPACE", DEFAULT_PLT_NS)
+ //httpEp, rmrEp := getService(xappname, SERVICE_HTTP), getService(xappname, SERVICE_RMR)
httpEp, rmrEp := getService(host, SERVICE_HTTP), getService(host, SERVICE_RMR)
if httpEp == "" || rmrEp == "" {
Logger.Warn("Couldn't resolve service endpoints: httpEp=%s rmrEp=%s", httpEp, rmrEp)
InstallSignalHandler()
}
-func getIpAdress() string {
- var ip net.IP
- itf, err := net.InterfaceByName(os.Getenv("INTERFACE_NAME"))
+func GetIpAddress() (string, error) {
+ ifname := os.Getenv("INTERFACE_NAME")
+ itf, err := net.InterfaceByName(ifname)
if err != nil {
- Logger.Info("Interface name is not able to resolve " + err.Error())
- return ip.String()
+ return "<nil>", fmt.Errorf("Interface (%s) %w", ifname, err)
}
item, err := itf.Addrs()
if err != nil {
- Logger.Info("IP address is not able to resolve " + err.Error())
- return ip.String()
+ return "<nil>", fmt.Errorf("Interface (%s) %w", ifname, err)
}
for _, addr := range item {
switch v := addr.(type) {
case *net.IPNet:
if !v.IP.IsLinkLocalUnicast() {
- ip = v.IP
+ return v.IP.String(), nil
}
}
}
- return ip.String()
+ return "<nil>", fmt.Errorf("Interface (%s) couldn't find ip", ifname)
}
-func RunWithParams(c MessageConsumer, sdlcheck bool) {
+type RunParams struct {
+ SdlCheck bool
+ DisableAlarmClient bool
+}
+
+func RunWithRunParams(c MessageConsumer, params RunParams) {
+
+ if params.DisableAlarmClient {
+ disableAlarmClient = true
+ } else {
+ disableAlarmClient = false
+ }
+
Rmr = NewRMRClient()
Rmr.SetReadyCB(XappReadyCb, nil)
- ipString := getIpAdress()
+ ipString, err := GetIpAddress()
+ if err != nil {
+ Logger.Info("IP address is not able to resolve " + err.Error())
+ }
var host string
if ipString == "<nil>" {
host = fmt.Sprintf(":%d", GetPortData("http").Port)
go http.ListenAndServe(host, Resource.router)
Logger.Info(fmt.Sprintf("Xapp started, listening on: %s", host))
- if sdlcheck {
+ if params.SdlCheck {
SdlStorage.TestConnection(viper.GetString("controls.db.namespace"))
}
go registerXapp()
Rmr.Start(c)
}
+func RunWithParams(c MessageConsumer, sdlcheck bool) {
+ RunWithRunParams(c, RunParams{SdlCheck: sdlcheck, DisableAlarmClient: false})
+}
+
func Run(c MessageConsumer) {
RunWithParams(c, true)
}