// This source code is part of the near-RT RIC (RAN Intelligent Controller)
// platform project (RICP).
-
package clients
import (
"e2mgr/logger"
"e2mgr/models"
"encoding/json"
- "fmt"
- "io/ioutil"
"net/http"
)
const (
- AddE2TInstanceApiSuffix = "e2t"
+ AddE2TInstanceApiSuffix = "e2t"
+ AssociateRanToE2TInstanceApiSuffix = "associate-ran-to-e2t"
+ DissociateRanE2TInstanceApiSuffix = "dissociate-ran"
)
type RoutingManagerClient struct {
type IRoutingManagerClient interface {
AddE2TInstance(e2tAddress string) error
+ AssociateRanToE2TInstance(e2tAddress string, ranName string) error
+ DissociateRanE2TInstance(e2tAddress string, ranName string) error
}
func NewRoutingManagerClient(logger *logger.Logger, config *configuration.Configuration, httpClient HttpClient) *RoutingManagerClient {
}
func (c *RoutingManagerClient) AddE2TInstance(e2tAddress string) error {
+
data := models.NewRoutingManagerE2TData(e2tAddress)
+ url := c.config.RoutingManager.BaseUrl + AddE2TInstanceApiSuffix
+
+ return c.PostMessage(data, url)
+}
+
+func (c *RoutingManagerClient) AssociateRanToE2TInstance(e2tAddress string, ranName string) error {
+
+ data := models.NewRoutingManagerE2TData(e2tAddress, ranName)
+ url := c.config.RoutingManager.BaseUrl + AssociateRanToE2TInstanceApiSuffix
+
+ return c.PostMessage(data, url)
+}
+
+func (c *RoutingManagerClient) DissociateRanE2TInstance(e2tAddress string, ranName string) error {
+ data := models.NewRoutingManagerE2TData(e2tAddress, ranName)
+ url := c.config.RoutingManager.BaseUrl + DissociateRanE2TInstanceApiSuffix
+
+ return c.PostMessage(data, url)
+}
+
+func (c *RoutingManagerClient) PostMessage(data *models.RoutingManagerE2TData, url string) error {
marshaled, err := json.Marshal(data)
if err != nil {
- return e2managererrors.NewRoutingManagerError(err)
+ return e2managererrors.NewRoutingManagerError()
}
body := bytes.NewBuffer(marshaled)
- c.logger.Infof("[E2M -> Routing Manager] #RoutingManagerClient.AddE2TInstance - request body: %+v", body)
+ c.logger.Infof("[E2M -> Routing Manager] #RoutingManagerClient.PostMessage - url: %s, request body: %+v", url, body)
- url := c.config.RoutingManagerBaseUrl + AddE2TInstanceApiSuffix
resp, err := c.httpClient.Post(url, "application/json", body)
if err != nil {
- return e2managererrors.NewRoutingManagerError(err)
+ c.logger.Errorf("#RoutingManagerClient.PostMessage - failed sending request. error: %s", err)
+ return e2managererrors.NewRoutingManagerError()
}
defer resp.Body.Close()
- respBody, err := ioutil.ReadAll(resp.Body)
-
- if err != nil {
- return e2managererrors.NewRoutingManagerError(err)
- }
-
- if resp.StatusCode != http.StatusOK { // TODO: shall we check for != 201?
- c.logger.Errorf("[Routing Manager -> E2M] #RoutingManagerClient.AddE2TInstance - failure. http status code: %d, response body: %s", resp.StatusCode, string(respBody))
- return e2managererrors.NewRoutingManagerError(fmt.Errorf("Invalid data")) // TODO: which error shall we return?
+ if resp.StatusCode >= http.StatusOK && resp.StatusCode < http.StatusMultipleChoices {
+ c.logger.Infof("[Routing Manager -> E2M] #RoutingManagerClient.PostMessage - success. http status code: %d", resp.StatusCode)
+ return nil
}
- c.logger.Infof("[Routing Manager -> E2M] #RoutingManagerClient.AddE2TInstance - success. http status code: %d, response body: %s", resp.StatusCode, string(respBody))
- return nil
-}
+ c.logger.Errorf("[Routing Manager -> E2M] #RoutingManagerClient.PostMessage - failure. http status code: %d", resp.StatusCode)
+ return e2managererrors.NewRoutingManagerError()
+}
\ No newline at end of file