X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;f=pkg%2Fcontrol%2Fsdl_restSubsDb.go;fp=pkg%2Fcontrol%2Fsdl_restSubsDb.go;h=782108f880d51682db3691a1b51507e710813637;hb=268d715e3bceab8f7955d89945141efdb2c3b368;hp=0000000000000000000000000000000000000000;hpb=f0835e8ca1ca3e526132d317a9ae849103a0d6db;p=ric-plt%2Fsubmgr.git diff --git a/pkg/control/sdl_restSubsDb.go b/pkg/control/sdl_restSubsDb.go new file mode 100644 index 0000000..782108f --- /dev/null +++ b/pkg/control/sdl_restSubsDb.go @@ -0,0 +1,174 @@ +/* + ================================================================================== + Copyright (c) 2019 AT&T Intellectual Property. + Copyright (c) 2019 Nokia + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + 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. + ================================================================================== +*/ + +package control + +import ( + "encoding/json" + "fmt" + + sdl "gerrit.o-ran-sc.org/r/ric-plt/sdlgo" + "gerrit.o-ran-sc.org/r/ric-plt/xapp-frame/pkg/xapp" +) + +type RESTSubscriptionInfo struct { + xAppRmrEndPoint string + Meid string + InstanceIds []uint32 + xAppIdToE2Id map[int64]int64 + SubReqOngoing bool + SubDelReqOngoing bool + Md5sum string +} + +func CreateRESTSdl() Sdlnterface { + return sdl.NewSdlInstance("submgr_restSubsDb", sdl.NewDatabase()) +} + +func (c *Control) WriteRESTSubscriptionToSdl(restSubId string, restSubs *RESTSubscription) error { + + var restSubscriptionInfo RESTSubscriptionInfo + restSubscriptionInfo.xAppRmrEndPoint = restSubs.xAppRmrEndPoint + restSubscriptionInfo.Meid = restSubs.Meid + restSubscriptionInfo.InstanceIds = restSubs.InstanceIds + restSubscriptionInfo.xAppIdToE2Id = restSubs.xAppIdToE2Id + restSubscriptionInfo.SubReqOngoing = restSubs.SubReqOngoing + restSubscriptionInfo.SubDelReqOngoing = restSubs.SubDelReqOngoing + restSubscriptionInfo.Md5sum = restSubs.Md5sum + + jsonData, err := json.Marshal(restSubscriptionInfo) + if err != nil { + return fmt.Errorf("SDL: WriteSubscriptionToSdl() json.Marshal error: %s", err.Error()) + } + + if err = c.restSubsDb.Set(restSubId, jsonData); err != nil { + c.UpdateCounter(cSDLWriteFailure) + return fmt.Errorf("SDL: WriteSubscriptionToSdl(): %s", err.Error()) + } else { + xapp.Logger.Debug("SDL: Subscription written in restSubsDb. restSubId = %v", restSubId) + } + return nil +} + +func (c *Control) ReadRESTSubscriptionFromSdl(restSubId string) (*RESTSubscription, error) { + + // This function is now just for testing purpose + key := restSubId + retMap, err := c.restSubsDb.Get([]string{key}) + if err != nil { + c.UpdateCounter(cSDLReadFailure) + return nil, fmt.Errorf("SDL: ReadSubscriptionFromSdl(): %s", err.Error()) + } else { + xapp.Logger.Debug("SDL: Subscription read from restSubsDb. restSubId = %v", restSubId) + } + + restSubs := &RESTSubscription{} + for _, iRESTSubscriptionInfo := range retMap { + + if iRESTSubscriptionInfo == nil { + return nil, fmt.Errorf("SDL: ReadSubscriptionFromSdl() REST subscription not found. restSubId = %v\n", restSubId) + } + + restSubscriptionInfo := &RESTSubscriptionInfo{} + jsonSubscriptionInfo := iRESTSubscriptionInfo.(string) + + if err := json.Unmarshal([]byte(jsonSubscriptionInfo), restSubscriptionInfo); err != nil { + return nil, fmt.Errorf("SDL: ReadSubscriptionFromSdl() json.unmarshal error: %s\n", err.Error()) + } + + restSubs = c.CreateRESTSubscription(restSubscriptionInfo, &jsonSubscriptionInfo) + } + return restSubs, nil +} + +func (c *Control) CreateRESTSubscription(restSubscriptionInfo *RESTSubscriptionInfo, jsonSubscriptionInfo *string) *RESTSubscription { + + restSubs := &RESTSubscription{} + restSubs.xAppRmrEndPoint = restSubscriptionInfo.xAppRmrEndPoint + restSubs.Meid = restSubscriptionInfo.Meid + restSubs.InstanceIds = restSubscriptionInfo.InstanceIds + restSubs.xAppIdToE2Id = restSubscriptionInfo.xAppIdToE2Id + restSubs.SubReqOngoing = restSubscriptionInfo.SubReqOngoing + restSubs.SubDelReqOngoing = restSubscriptionInfo.SubDelReqOngoing + restSubs.Md5sum = restSubscriptionInfo.Md5sum + + return restSubs +} + +func (c *Control) RemoveRESTSubscriptionFromSdl(restSubId string) error { + + key := restSubId + if err := c.restSubsDb.Remove([]string{key}); err != nil { + return fmt.Errorf("SDL: RemoveSubscriptionfromSdl(): %s\n", err.Error()) + } else { + xapp.Logger.Debug("SDL: Subscription removed from restSubsDb. restSubId = %v", restSubId) + } + return nil +} + +func (c *Control) ReadAllRESTSubscriptionsFromSdl() (map[string]*RESTSubscription, error) { + + retMap := make(map[string]*RESTSubscription) + // Get all keys + keys, err := c.restSubsDb.GetAll() + if err != nil { + c.UpdateCounter(cSDLReadFailure) + return nil, fmt.Errorf("SDL: ReadAllSubscriptionsFromSdl(), GetAll(). Error while reading REST subscriptions keys from DBAAS %s\n", err.Error()) + } + + if len(keys) == 0 { + return retMap, nil + } + + // Get all subscriptionInfos + iRESTSubscriptionMap, err := c.restSubsDb.Get(keys) + if err != nil { + c.UpdateCounter(cSDLReadFailure) + return nil, fmt.Errorf("SDL: ReadAllSubscriptionsFromSdl(), Get(): Error while reading REST subscriptions from DBAAS %s\n", err.Error()) + } + + for iRESTSubId, iRESTSubscriptionInfo := range iRESTSubscriptionMap { + + if iRESTSubscriptionInfo == nil { + return nil, fmt.Errorf("SDL: ReadAllSubscriptionsFromSdl() iRESTSubscriptionInfo = nil\n") + } + + restSubscriptionInfo := &RESTSubscriptionInfo{} + jsonSubscriptionInfo := iRESTSubscriptionInfo.(string) + + if err := json.Unmarshal([]byte(jsonSubscriptionInfo), restSubscriptionInfo); err != nil { + return nil, fmt.Errorf("SDL: ReadAllSubscriptionsFromSdl() json.unmarshal error: %s\n", err.Error()) + } + + restSubs := c.CreateRESTSubscription(restSubscriptionInfo, &jsonSubscriptionInfo) + retMap[iRESTSubId] = restSubs + } + return retMap, nil +} + +func (c *Control) RemoveAllRESTSubscriptionsFromSdl() error { + + if err := c.restSubsDb.RemoveAll(); err != nil { + c.UpdateCounter(cSDLRemoveFailure) + return fmt.Errorf("SDL: RemoveAllSubscriptionsFromSdl(): %s\n", err.Error()) + } else { + xapp.Logger.Debug("SDL: All subscriptions removed from e2SubsDb") + } + return nil +}