code violation - cannot initialize 1 variables with 2 values
[ric-plt/rtmgr.git] / pkg / nbi / nbi.go
index 84282bd..ddbf347 100644 (file)
    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.
    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).
+
 ==================================================================================
 */
 /*
 ==================================================================================
 */
 /*
@@ -26,56 +31,89 @@ package nbi
 
 import (
        "errors"
 
 import (
        "errors"
-       "fmt"
-       "rtmgr"
+       "net/url"
+       apiclient "routing-manager/pkg/appmgr_client"
+       "routing-manager/pkg/appmgr_client/operations"
+       "routing-manager/pkg/appmgr_model"
+       "time"
+
+       "gerrit.o-ran-sc.org/r/ric-plt/xapp-frame/pkg/xapp"
+       httptransport "github.com/go-openapi/runtime/client"
+       "github.com/go-openapi/strfmt"
+       "github.com/go-openapi/swag"
 )
 
 var (
 )
 
 var (
-       SupportedNbis = []*NbiEngineConfig{
-               &NbiEngineConfig{
-                       NbiEngine{
-                               Name:     "httpGetter",
-                               Version:  "v1",
-                               Protocol: "http",
-                       },
-                       batchFetch(fetchXappList),
-                       true,
-               },
-               &NbiEngineConfig{
-                       NbiEngine{
-                               Name:     "httpRESTful",
-                               Version:  "v1",
-                               Protocol: "http",
-                       },
-                       batchFetch(nil),
-                       false,
+       SupportedNbis = []*EngineConfig{
+               {
+                       Name:        "httpGetter",
+                       Version:     "v1",
+                       Protocol:    "http",
+                       Instance:    NewHttpGetter(),
+                       IsAvailable: true,
                },
                },
-               &NbiEngineConfig{
-                       NbiEngine{
-                               Name:     "gRPC",
-                               Version:  "v1",
-                               Protocol: "http2",
-                       },
-                       batchFetch(nil),
-                       false,
+               {
+                       Name:        "httpRESTful",
+                       Version:     "v1",
+                       Protocol:    "http",
+                       Instance:    NewHttpRestful(),
+                       IsAvailable: true,
                },
        }
 )
 
                },
        }
 )
 
-func ListNbis() {
-       fmt.Printf("NBI:\n")
-       for _, nbi := range SupportedNbis {
-               if nbi.IsAvailable {
-                       rtmgr.Logger.Info(nbi.Engine.Name + "/" + nbi.Engine.Version)
-               }
-       }
+type Nbi struct {
 }
 
 }
 
-func GetNbi(nbiName string) (*NbiEngineConfig, error) {
+func GetNbi(nbiName string) (Engine, error) {
        for _, nbi := range SupportedNbis {
        for _, nbi := range SupportedNbis {
-               if nbi.Engine.Name == nbiName && nbi.IsAvailable {
-                       return nbi, nil
+               if nbi.Name == nbiName && nbi.IsAvailable {
+                       return nbi.Instance, nil
                }
        }
        return nil, errors.New("NBI:" + nbiName + " is not supported or still not a available")
 }
                }
        }
        return nil, errors.New("NBI:" + nbiName + " is not supported or still not a available")
 }
+
+func CreateSubReq(restUrl string, restPort string) *appmgr_model.SubscriptionRequest {
+       // TODO: parameterize function
+       subData := appmgr_model.SubscriptionData{
+               TargetURL:  swag.String(restUrl + ":" + restPort + "/ric/v1/handles/xapp-handle/"),
+               EventType:  appmgr_model.EventTypeAll,
+               MaxRetries: swag.Int64(5),
+               RetryTimer: swag.Int64(10),
+       }
+
+       subReq := appmgr_model.SubscriptionRequest{
+               Data: &subData,
+       }
+
+       return &subReq
+}
+
+func PostSubReq(xmUrl string, nbiif string) error {
+       // setting up POST request to Xapp Manager
+       appmgrUrl, err := url.Parse(xmUrl)
+       if err != nil {
+               xapp.Logger.Error("Invalid XApp manager url/hostname: " + err.Error())
+               return err
+       }
+       nbiifUrl, err := url.Parse(nbiif)
+       if err != nil {
+               xapp.Logger.Error("Invalid NBI address/port: " + err.Error())
+               return err
+       }
+       transport := httptransport.New(appmgrUrl.Hostname()+":"+appmgrUrl.Port(), "/ric/v1", []string{"http"})
+       client := apiclient.New(transport, strfmt.Default)
+       addSubParams := operations.NewAddSubscriptionParamsWithTimeout(10 * time.Second)
+       // create sub req with rest url and port
+       subReq := CreateSubReq(nbiifUrl.Scheme+"://"+nbiifUrl.Hostname(), nbiifUrl.Port())
+       resp, postErr := client.Operations.AddSubscription(addSubParams.WithSubscriptionRequest(subReq))
+       if postErr != nil {
+               xapp.Logger.Error("POST unsuccessful:" + postErr.Error())
+               return postErr
+       } else {
+               // TODO: use the received ID
+               xapp.Logger.Info("POST received: " + string(resp.Payload.ID))
+               return nil
+       }
+}