Documentation update
[ric-plt/vespamgr.git] / cmd / vesmgr / vesmgr.go
index aeebb15..5086098 100755 (executable)
  *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  *  See the License for the specific language governing permissions and
  *  limitations under the License.
+ *
+ *  This source code is part of the near-RT RIC (RAN Intelligent Controller)
+ *  platform project (RICP).
+ *
  */
 
 package main
 
 import (
        "errors"
+       "fmt"
        "io/ioutil"
        "net"
        "net/http"
@@ -52,6 +57,13 @@ type subscriptionNotification struct {
 
 var logger *mdcloggo.MdcLogger
 
+// Version information, which is filled during compilation
+// Version tag of vesmgr container
+var Version string
+
+// Hash of the git commit used in building
+var Hash string
+
 const vesmgrXappNotifPort = "8080"
 const vesmgrXappNotifPath = "/vesmgr_xappnotif/"
 const timeoutPostXAppSubscriptions = 5
@@ -101,9 +113,11 @@ func (vesmgr *VesMgr) subscribeXAppNotifications() {
 // Init initializes the vesmgr
 func (vesmgr *VesMgr) Init(listenPort string) *VesMgr {
        logger.Info("vesmgrInit")
+       logger.Info("version: %s (%s)", Version, Hash)
+
        var err error
        if vesmgr.myIPAddress, err = getMyIP(); err != nil || vesmgr.myIPAddress == "" {
-               logger.Error("Cannot get myIPAddress: IP %s, err %s", vesmgr.myIPAddress, err.Error())
+               logger.Error("Cannot get myIPAddress: IP %s", vesmgr.myIPAddress)
                panic("Cannot get my IP address")
        }
 
@@ -112,7 +126,11 @@ func (vesmgr *VesMgr) Init(listenPort string) *VesMgr {
        if ok {
                logger.Info("Using appmgrdomain %s", appmgrDomain)
        } else {
-               appmgrDomain = "service-ricplt-appmgr-http.ricplt.svc.cluster.local"
+               pltnamespace := os.Getenv("PLT_NAMESPACE")
+               if pltnamespace == "" {
+                       pltnamespace = "ricplt"
+               }
+               appmgrDomain = fmt.Sprintf("service-%s-appmgr-http.%s.svc.cluster.local", pltnamespace, pltnamespace)
                logger.Info("Using default appmgrdomain %s", appmgrDomain)
        }
        vesmgr.chXAppSubscriptions = make(chan subscriptionNotification)
@@ -125,7 +143,8 @@ func (vesmgr *VesMgr) Init(listenPort string) *VesMgr {
        vesmgr.httpServer.init(vesmgr.myIPAddress + ":" + listenPort)
        vesmgr.vesagent = makeRunner("ves-agent", "-i", os.Getenv("VESMGR_HB_INTERVAL"),
                "-m", os.Getenv("VESMGR_MEAS_INTERVAL"), "--Measurement.Prometheus.Address",
-               os.Getenv("VESMGR_PROMETHEUS_ADDR"))
+               os.Getenv("VESMGR_PROMETHEUS_ADDR"), "--AlertManager.Bind", os.Getenv("VESMGR_ALERTMANAGER_BIND_ADDR"),
+               "--Debug")
        return vesmgr
 }
 
@@ -173,9 +192,15 @@ func queryXAppsConfig(appmgrURL string, timeout time.Duration) ([]byte, error) {
        return emptyConfig, errors.New(resp.Status)
 }
 
-func queryConf() ([]byte, error) {
-       return queryXAppsConfig("http://"+appmgrDomain+":"+appmgrPort+appmgrXAppConfigPath,
-               10*time.Second)
+func queryConf() (appConfig []byte, err error) {
+       for i := 0; i < 10; i++ {
+               appConfig, err = queryXAppsConfig("http://"+appmgrDomain+":"+appmgrPort+appmgrXAppConfigPath, 10*time.Second)
+               if len(appConfig) > 0 {
+                       break
+               }
+               time.Sleep(5 * time.Second)
+       }
+       return appConfig, err
 }
 
 func (vesmgr *VesMgr) emptyNotificationsChannel() {
@@ -236,11 +261,17 @@ func (vesmgr *VesMgr) waitSubscriptionLoop() {
 // Run the vesmgr process main loop
 func (vesmgr *VesMgr) Run() {
        logger.Info("vesmgr main loop ready")
+
        vesmgr.httpServer.start(vesmgrXappNotifPath, vesmgr.chXAppNotifications, vesmgr.chSupervision)
+
        vesmgr.subscribeXAppNotifications()
+
        vesmgr.waitSubscriptionLoop()
+
        xappConfig, _ := queryConf()
+
        createConf(vespaConfigFile, xappConfig)
+
        vesmgr.startVesagent()
        for {
                vesmgr.servRequest()