+package restful
+
+import (
+ "gerrit.o-ran-sc.org/r/ric-plt/xapp-frame/pkg/xapp"
+ "github.com/go-openapi/loads"
+ "github.com/go-openapi/runtime/middleware"
+ "net/url"
+ "os"
+ "routing-manager/pkg/nbi"
+ "routing-manager/pkg/restapi"
+ "routing-manager/pkg/restapi/operations"
+ "routing-manager/pkg/restapi/operations/debug"
+ "routing-manager/pkg/restapi/operations/handle"
+ "strconv"
+)
+
+func LaunchRest(nbiif string) {
+ swaggerSpec, err := loads.Embedded(restapi.SwaggerJSON, restapi.FlatSwaggerJSON)
+ if err != nil {
+ //log.Fatalln(err)
+ xapp.Logger.Error(err.Error())
+ os.Exit(1)
+ }
+ nbiUrl, err := url.Parse(nbiif)
+ if err != nil {
+ xapp.Logger.Error(err.Error())
+ os.Exit(1)
+ }
+ api := operations.NewRoutingManagerAPI(swaggerSpec)
+ server := restapi.NewServer(api)
+ defer server.Shutdown()
+
+ server.Port, err = strconv.Atoi(nbiUrl.Port())
+ if err != nil {
+ xapp.Logger.Error("Invalid NBI RestAPI port")
+ os.Exit(1)
+ }
+ server.Host = "0.0.0.0"
+ // set handlers
+ api.HandleProvideXappHandleHandler = handle.ProvideXappHandleHandlerFunc(
+ func(params handle.ProvideXappHandleParams) middleware.Responder {
+ xapp.Logger.Info("Data received on Http interface")
+ err := nbi.ProvideXappHandleHandlerImpl(params.XappCallbackData)
+ if err != nil {
+ xapp.Logger.Error("RoutingManager->AppManager request Failed: " + err.Error())
+ return handle.NewProvideXappHandleBadRequest()
+ } else {
+ xapp.Logger.Info("RoutingManager->AppManager request Success")
+ return handle.NewGetHandlesOK()
+ }
+ })
+ api.HandleProvideXappSubscriptionHandleHandler = handle.ProvideXappSubscriptionHandleHandlerFunc(
+ func(params handle.ProvideXappSubscriptionHandleParams) middleware.Responder {
+ err := nbi.ProvideXappSubscriptionHandleImpl(params.XappSubscriptionData)
+ if err != nil {
+ xapp.Logger.Error("RoutingManager->SubManager Add Request Failed: " + err.Error())
+ return handle.NewProvideXappSubscriptionHandleBadRequest()
+ } else {
+ xapp.Logger.Info("RoutingManager->SubManager Add Request Success, subid = %v, requestor = %v", *params. XappSubscriptionData.SubscriptionID, *params.XappSubscriptionData.Address)
+ return handle.NewGetHandlesOK()
+ }
+ })
+ api.HandleDeleteXappSubscriptionHandleHandler = handle.DeleteXappSubscriptionHandleHandlerFunc(
+ func(params handle.DeleteXappSubscriptionHandleParams) middleware.Responder {
+ err := nbi.DeleteXappSubscriptionHandleImpl(params.XappSubscriptionData)
+ if err != nil {
+ xapp.Logger.Error("RoutingManager->SubManager Delete Request Failed: " + err.Error())
+ return handle.NewDeleteXappSubscriptionHandleNoContent()
+ } else {
+ xapp.Logger.Info("RoutingManager->SubManager Delete Request Success, subid = %v, requestor = %v", *params. XappSubscriptionData.SubscriptionID, *params.XappSubscriptionData.Address)
+ return handle.NewGetHandlesOK()
+ }
+ })
+ api.HandleUpdateXappSubscriptionHandleHandler = handle.UpdateXappSubscriptionHandleHandlerFunc(
+ func(params handle.UpdateXappSubscriptionHandleParams) middleware.Responder {
+ err := nbi.UpdateXappSubscriptionHandleImpl(¶ms.XappList, params.SubscriptionID)
+ if err != nil {
+ return handle.NewUpdateXappSubscriptionHandleBadRequest()
+ } else {
+ return handle.NewUpdateXappSubscriptionHandleCreated()
+ }
+ })
+ api.HandleCreateNewE2tHandleHandler = handle.CreateNewE2tHandleHandlerFunc(
+ func(params handle.CreateNewE2tHandleParams) middleware.Responder {
+ err := nbi.CreateNewE2tHandleHandlerImpl(params.E2tData)
+ if err != nil {
+ xapp.Logger.Error("RoutingManager->E2Manager AddE2T Request Failed: " + err.Error())
+ return handle.NewCreateNewE2tHandleBadRequest()
+ } else {
+ xapp.Logger.Info("RoutingManager->E2Manager AddE2T Request Success, E2T = %v", *params.E2tData.E2TAddress)
+ return handle.NewCreateNewE2tHandleCreated()
+ }
+ })
+
+ api.HandleAssociateRanToE2tHandleHandler = handle.AssociateRanToE2tHandleHandlerFunc(
+ func(params handle.AssociateRanToE2tHandleParams) middleware.Responder {
+ err := nbi.AssociateRanToE2THandlerImpl(params.RanE2tList)
+ if err != nil {
+ xapp.Logger.Error("RoutingManager->E2Manager associateRanToE2T Request Failed: " + err.Error())
+ return handle.NewAssociateRanToE2tHandleBadRequest()
+ } else {
+ xapp.Logger.Info("RoutingManager->E2Manager associateRanToE2T Request Success, E2T = %v", params.RanE2tList)
+ return handle.NewAssociateRanToE2tHandleCreated()
+ }
+ })
+
+ api.HandleDissociateRanHandler = handle.DissociateRanHandlerFunc(
+ func(params handle.DissociateRanParams) middleware.Responder {
+ err := nbi.DisassociateRanToE2THandlerImpl(params.DissociateList)
+ if err != nil {
+ xapp.Logger.Error("RoutingManager->E2Manager DisassociateRanToE2T Request Failed: " + err.Error())
+ return handle.NewDissociateRanBadRequest()
+ } else {
+ xapp.Logger.Info("RoutingManager->E2Manager DisassociateRanToE2T Request Success, E2T = %v", params.DissociateList)
+ return handle.NewDissociateRanCreated()
+ }
+ })
+ api.HandleDeleteE2tHandleHandler = handle.DeleteE2tHandleHandlerFunc(
+ func(params handle.DeleteE2tHandleParams) middleware.Responder {
+ err := nbi.DeleteE2tHandleHandlerImpl(params.E2tData)
+ if err != nil {
+ xapp.Logger.Error("RoutingManager->E2Manager DeleteE2T Request Failed: " + err.Error())
+ return handle.NewDeleteE2tHandleBadRequest()
+ } else {
+ xapp.Logger.Info("RoutingManager->E2Manager DeleteE2T Request Success, E2T = %v", *params.E2tData.E2TAddress)
+ return handle.NewDeleteE2tHandleCreated()
+ }
+ })
+ api.DebugGetDebuginfoHandler = debug.GetDebuginfoHandlerFunc(
+ func(params debug.GetDebuginfoParams) middleware.Responder {
+ response, err := nbi.DumpDebugData()
+ if err != nil {
+ return debug.NewGetDebuginfoCreated()
+ } else {
+ return debug.NewGetDebuginfoOK().WithPayload(&response)
+ }
+ })
+ api.HandleAddRmrRouteHandler = handle.AddRmrRouteHandlerFunc(
+ func(params handle.AddRmrRouteParams) middleware.Responder {
+ err := nbi.Adddelrmrroute(params.RoutesList, true)
+ if err != nil {
+ return handle.NewAddRmrRouteBadRequest()
+ } else {
+ return handle.NewAddRmrRouteCreated()
+ }
+
+ })
+ api.HandleDelRmrRouteHandler = handle.DelRmrRouteHandlerFunc(
+ func(params handle.DelRmrRouteParams) middleware.Responder {
+ err := nbi.Adddelrmrroute(params.RoutesList, false)
+ if err != nil {
+ return handle.NewDelRmrRouteBadRequest()
+ } else {
+ return handle.NewDelRmrRouteCreated()
+ }
+ })
+
+ // start to serve API
+ xapp.Logger.Info("Starting the HTTP Rest service")
+ if err := server.Serve(); err != nil {
+ xapp.Logger.Error(err.Error())
+ }
+}
+