[RIC-247] RAN Health Check Request API - Validation
[ric-plt/e2mgr.git] / E2Manager / handlers / httpmsghandlers / health_check_handler.go
1 //
2 // Copyright (c) 2020 Samsung Electronics Co., Ltd. All Rights Reserved.
3 //
4 // Licensed under the Apache License, Version 2.0 (the "License");
5 // you may not use this file except in compliance with the License.
6 // You may obtain a copy of the License at
7 //
8 //      http://www.apache.org/licenses/LICENSE-2.0
9 //
10 // Unless required by applicable law or agreed to in writing, software
11 // distributed under the License is distributed on an "AS IS" BASIS,
12 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 // See the License for the specific language governing permissions and
14 // limitations under the License.
15
16 //  This source code is part of the near-RT RIC (RAN Intelligent Controller)
17 //  platform project (RICP).
18
19 package httpmsghandlers
20
21 import (
22         "e2mgr/e2managererrors"
23         "e2mgr/logger"
24         "e2mgr/managers"
25         "e2mgr/models"
26         "e2mgr/services"
27         "e2mgr/services/rmrsender"
28         "gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/common"
29         "gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/entities"
30         //        "github.com/pkg/errors"
31 )
32
33 type HealthCheckRequestHandler struct {
34         logger          *logger.Logger
35         rNibDataService services.RNibDataService
36         ranListManager  managers.RanListManager
37         rmrsender       *rmrsender.RmrSender
38 }
39
40 func NewHealthCheckRequestHandler(logger *logger.Logger, rNibDataService services.RNibDataService, ranListManager managers.RanListManager, rmrsender *rmrsender.RmrSender) *HealthCheckRequestHandler {
41         return &HealthCheckRequestHandler{
42                 logger:          logger,
43                 rNibDataService: rNibDataService,
44                 ranListManager:  ranListManager,
45                 rmrsender:       rmrsender,
46         }
47 }
48
49 func (h *HealthCheckRequestHandler) Handle(request models.Request) (models.IResponse, error) {
50         ranNameList := h.getRanNameList(request)
51         isAtleastOneRanConnected := false
52
53         for _, ranName := range ranNameList {
54                 nodebInfo, err := h.rNibDataService.GetNodeb(ranName) //This method is needed for getting RAN functions with later commits
55                 if err != nil {
56                         _, ok := err.(*common.ResourceNotFoundError)
57                         if !ok {
58                                 h.logger.Errorf("#HealthCheckRequest.Handle - failed to get nodeBInfo entity for ran name: %v from RNIB. Error: %s", ranName, err)
59                                 return nil, e2managererrors.NewRnibDbError()
60                         }
61                         continue
62                 }
63                 if nodebInfo.ConnectionStatus == entities.ConnectionStatus_CONNECTED {
64                         isAtleastOneRanConnected = true
65
66                 }
67         }
68         if isAtleastOneRanConnected == false {
69                 return nil, e2managererrors.NewNoConnectedRanError()
70         }
71
72         return nil, nil
73 }
74
75 func (h *HealthCheckRequestHandler) getRanNameList(request models.Request) []string {
76         healthCheckRequest := request.(models.HealthCheckRequest)
77         if request != nil && len(healthCheckRequest.RanList) != 0 {
78                 return healthCheckRequest.RanList
79         }
80         nodeIds := h.ranListManager.GetNbIdentityList()
81
82         var ranNameList []string
83         for _, nbIdentity := range nodeIds {
84                 if nbIdentity.ConnectionStatus == entities.ConnectionStatus_CONNECTED {
85                         ranNameList = append(ranNameList, nbIdentity.InventoryName)
86                 }
87         }
88         return ranNameList
89 }