2 // Copyright 2019 AT&T Intellectual Property
3 // Copyright 2019 Nokia
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
9 // http://www.apache.org/licenses/LICENSE-2.0
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.
17 package httpmsghandlers
20 "gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/entities"
28 type ResourceStatusRequestHandler struct {
29 rNibDataService services.RNibDataService
31 resourceStatusService services.IResourceStatusService
34 func NewResourceStatusRequestHandler(logger *logger.Logger, rNibDataService services.RNibDataService, resourceStatusService services.IResourceStatusService) *ResourceStatusRequestHandler {
35 return &ResourceStatusRequestHandler{
36 resourceStatusService: resourceStatusService,
37 rNibDataService: rNibDataService,
42 func (h ResourceStatusRequestHandler) Handle(request models.Request) error {
44 resourceStatusRequest := request.(models.ResourceStatusRequest)
45 config, err := h.rNibDataService.GetRsmGeneralConfiguration()
47 return rsmerrors.NewRnibDbError()
50 config.EnableResourceStatus = resourceStatusRequest.EnableResourceStatus
51 err = h.rNibDataService.SaveRsmGeneralConfiguration(config)
53 return rsmerrors.NewRnibDbError()
56 nbIdentityList, err := h.rNibDataService.GetListEnbIds()
58 return rsmerrors.NewRnibDbError()
62 for _, nbIdentity := range nbIdentityList {
64 ranName := (*nbIdentity).GetInventoryName()
66 nodeb, err := h.rNibDataService.GetNodeb(ranName)
68 h.logger.Errorf("#ResourceStatusRequestHandler.Handle - Couldn't find RAN %s in RSM DB", ranName)
73 h.logger.Infof("#ResourceStatusRequestHandler.Handle - handle RAN: %s started", nodeb.RanName)
75 if nodeb.ConnectionStatus != entities.ConnectionStatus_CONNECTED {
76 h.logger.Infof("#ResourceStatusRequestHandler.Handle - RAN name: %s - connection status not CONNECTED, ignore", nodeb.RanName)
77 h.logger.Infof("#ResourceStatusRequestHandler.Handle - handle RAN: %s completed", nodeb.RanName)
81 err = h.saveAndSendRsmRanInfo(nodeb, config)
85 h.logger.Infof("#ResourceStatusRequestHandler.Handle - handle RAN: %s completed", nodeb.RanName)
88 if numberOfFails > 0 {
89 return rsmerrors.NewRsmError(numberOfFails)
94 func (h ResourceStatusRequestHandler) saveAndSendRsmRanInfo(nodebInfo *entities.NodebInfo, config *models.RsmGeneralConfiguration) error {
96 rsmRanInfo, err := h.rNibDataService.GetRsmRanInfo(nodebInfo.RanName)
101 if config.EnableResourceStatus {
102 return h.handleNotStartedRsmRanInfo(nodebInfo, rsmRanInfo, config)
105 return h.handleNotStoppedRsmRanInfo(nodebInfo, rsmRanInfo, config)
108 func (h ResourceStatusRequestHandler) handleNotStoppedRsmRanInfo(nodebInfo *entities.NodebInfo, rsmRanInfo *models.RsmRanInfo, config *models.RsmGeneralConfiguration) error {
109 if rsmRanInfo.Action == enums.Stop && rsmRanInfo.ActionStatus {
113 if rsmRanInfo.Enb2MeasurementId == 0 {
114 h.logger.Errorf("#ResourceStatusRequestHandler.handleNotStoppedRsmRanInfo - RAN: %s Enb2MeasurementId is zero", nodebInfo.RanName)
115 return rsmerrors.NewInternalError()
118 if rsmRanInfo.Action != enums.Stop {
120 err := h.saveRsmRanInfoStopFalse(rsmRanInfo)
126 return h.resourceStatusService.BuildAndSendStopRequest(nodebInfo, config, rsmRanInfo.Enb1MeasurementId, rsmRanInfo.Enb2MeasurementId)
129 func (h ResourceStatusRequestHandler) handleNotStartedRsmRanInfo(nodebInfo *entities.NodebInfo, rsmRanInfo *models.RsmRanInfo, config *models.RsmGeneralConfiguration) error {
130 if rsmRanInfo.Action == enums.Start && rsmRanInfo.ActionStatus {
134 if rsmRanInfo.Action != enums.Start {
136 err := h.saveRsmRanInfoStartFalse(rsmRanInfo)
142 return h.resourceStatusService.BuildAndSendInitiateRequest(nodebInfo, config, rsmRanInfo.Enb1MeasurementId)
145 func (h ResourceStatusRequestHandler) saveRsmRanInfoStopFalse(rsmRanInfo *models.RsmRanInfo) error {
146 rsmRanInfo.Action = enums.Stop
147 rsmRanInfo.ActionStatus = false
149 return h.rNibDataService.SaveRsmRanInfo(rsmRanInfo)
152 func (h ResourceStatusRequestHandler) saveRsmRanInfoStartFalse(rsmRanInfo *models.RsmRanInfo) error {
153 rsmRanInfo.Action = enums.Start
154 rsmRanInfo.ActionStatus = false
155 rsmRanInfo.Enb2MeasurementId = 0
156 rsmRanInfo.Enb1MeasurementId = enums.Enb1MeasurementId
158 return h.rNibDataService.SaveRsmRanInfo(rsmRanInfo)