[RICPLT-2727] Add RoutingManagerClient and more......
[ric-plt/e2mgr.git] / E2Manager / clients / routing_manager_client.go
1 //
2 // Copyright 2019 AT&T Intellectual Property
3 // Copyright 2019 Nokia
4 //
5 // Licensed under the Apache License, Version 2.0 (the "License");
6 // you may not use this file except in compliance with the License.
7 // You may obtain a copy of the License at
8 //
9 //      http://www.apache.org/licenses/LICENSE-2.0
10 //
11 // Unless required by applicable law or agreed to in writing, software
12 // distributed under the License is distributed on an "AS IS" BASIS,
13 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 // See the License for the specific language governing permissions and
15 // limitations under the License.
16
17 //  This source code is part of the near-RT RIC (RAN Intelligent Controller)
18 //  platform project (RICP).
19
20
21 package clients
22
23 import (
24         "bytes"
25         "e2mgr/configuration"
26         "e2mgr/e2managererrors"
27         "e2mgr/logger"
28         "e2mgr/models"
29         "encoding/json"
30         "fmt"
31         "io/ioutil"
32         "net/http"
33 )
34
35 const (
36         AddE2TInstanceApiSuffix = "e2t"
37 )
38
39 type RoutingManagerClient struct {
40         logger     *logger.Logger
41         config     *configuration.Configuration
42         httpClient HttpClient
43 }
44
45 type IRoutingManagerClient interface {
46         AddE2TInstance(e2tAddress string) error
47 }
48
49 func NewRoutingManagerClient(logger *logger.Logger, config *configuration.Configuration, httpClient HttpClient) *RoutingManagerClient {
50         return &RoutingManagerClient{
51                 logger:     logger,
52                 config:     config,
53                 httpClient: httpClient,
54         }
55 }
56
57 func (c *RoutingManagerClient) AddE2TInstance(e2tAddress string) error {
58         data := models.NewRoutingManagerE2TData(e2tAddress)
59
60         marshaled, err := json.Marshal(data)
61
62         if err != nil {
63                 return e2managererrors.NewRoutingManagerError(err)
64         }
65
66         body := bytes.NewBuffer(marshaled)
67         c.logger.Infof("[E2M -> Routing Manager] #RoutingManagerClient.AddE2TInstance - request body: %+v", body)
68
69         url := c.config.RoutingManagerBaseUrl + AddE2TInstanceApiSuffix
70         resp, err := c.httpClient.Post(url, "application/json", body)
71
72         if err != nil {
73                 return e2managererrors.NewRoutingManagerError(err)
74         }
75
76         defer resp.Body.Close()
77
78         respBody, err := ioutil.ReadAll(resp.Body)
79
80         if err != nil {
81                 return e2managererrors.NewRoutingManagerError(err)
82         }
83
84         if resp.StatusCode != http.StatusOK { // TODO: shall we check for != 201?
85                 c.logger.Errorf("[Routing Manager -> E2M] #RoutingManagerClient.AddE2TInstance - failure. http status code: %d, response body: %s", resp.StatusCode, string(respBody))
86                 return e2managererrors.NewRoutingManagerError(fmt.Errorf("Invalid data")) // TODO: which error shall we return?
87         }
88
89         c.logger.Infof("[Routing Manager -> E2M] #RoutingManagerClient.AddE2TInstance - success. http status code: %d, response body: %s", resp.StatusCode, string(respBody))
90         return nil
91 }