2 ==================================================================================
3 Copyright (c) 2019 AT&T Intellectual Property.
4 Copyright (c) 2019 Nokia
6 Licensed under the Apache License, Version 2.0 (the "License");
7 you may not use this file except in compliance with the License.
8 You may obtain a copy of the License at
10 http://www.apache.org/licenses/LICENSE-2.0
12 Unless required by applicable law or agreed to in writing, software
13 distributed under the License is distributed on an "AS IS" BASIS,
14 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 See the License for the specific language governing permissions and
16 limitations under the License.
17 ==================================================================================
23 rnibentities "gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/entities"
24 rnibreader "gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/reader"
25 sdl "gerrit.o-ran-sc.org/r/ric-plt/sdlgo"
26 rnibwriter "gerrit.o-ran-sc.org/r/ric-plt/xapp-frame/pkg/rnib"
31 // To be removed later
32 type SDLStatistics struct{}
34 var SDLCounterOpts = []CounterOpts{
35 {Name: "Stored", Help: "The total number of stored SDL transactions"},
36 {Name: "StoreError", Help: "The total number of SDL store errors"},
39 type SDLClient struct {
41 stat map[string]Counter
47 type RNIBNodeType = rnibentities.Node_Type
48 type RNIBGlobalNbId = rnibentities.GlobalNbId
49 type RNIBNodebInfo = rnibentities.NodebInfo
50 type RNIBIRNibError = error
51 type RNIBCells = rnibentities.Cells
52 type RNIBNbIdentity = rnibentities.NbIdentity
53 type RNIBCellType = rnibentities.Cell_Type
54 type RNIBCell = rnibentities.Cell
55 type RNIBEnb = rnibentities.Enb
56 type RNIBGnb = rnibentities.Gnb
58 const RNIBNodeENB = rnibentities.Node_ENB
59 const RNIBNodeGNB = rnibentities.Node_GNB
61 type RNIBServedCellInfo = rnibentities.ServedCellInfo
62 type RNIBNodebInfoEnb = rnibentities.NodebInfo_Enb
63 type RNIBNodebInfoGnb = rnibentities.NodebInfo_Gnb
64 type RNIBServedNRCell = rnibentities.ServedNRCell
65 type RNIBServedNRCellInformation = rnibentities.ServedNRCellInformation
66 type RNIBNrNeighbourInformation = rnibentities.NrNeighbourInformation
68 type RNIBClient struct {
70 reader rnibreader.RNibReader
71 writer rnibwriter.RNibWriter
74 // NewSDLClient returns a new SDLClient.
75 func NewSDLClient(ns string) *SDLClient {
77 db: sdl.NewSdlInstance(ns, sdl.NewDatabase()),
78 stat: Metric.RegisterCounterGroup(SDLCounterOpts, "SDL"),
83 func (s *SDLClient) TestConnection() {
84 // Test DB connection, and wait until ready!
86 if _, err := s.db.GetAll(); err == nil {
89 Logger.Warn("Database connection not ready, waiting ...")
90 time.Sleep(time.Duration(5 * time.Second))
93 Logger.Info("Connection to database established!")
96 func (s *SDLClient) IsReady() bool {
100 func (s *SDLClient) doSet(pairs ...interface{}) (err error) {
101 err = s.db.Set(pairs)
103 s.UpdateStatCounter("StoreError")
105 s.UpdateStatCounter("Stored")
110 func (s *SDLClient) Store(key string, value interface{}) (err error) {
111 return s.doSet(key, value)
114 func (s *SDLClient) MStore(pairs ...interface{}) (err error) {
115 return s.doSet(pairs)
118 func (s *SDLClient) Read(key string) (value map[string]interface{}, err error) {
119 return s.db.Get([]string{key})
122 func (s *SDLClient) MRead(key []string) (value map[string]interface{}, err error) {
126 func (s *SDLClient) ReadAllKeys(key string) (value []string, err error) {
130 func (s *SDLClient) Subscribe(cb func(string, ...string), channel string) error {
131 return s.db.SubscribeChannel(cb, channel)
134 func (s *SDLClient) MSubscribe(cb func(string, ...string), channels ...string) error {
135 return s.db.SubscribeChannel(cb, channels...)
138 func (s *SDLClient) StoreAndPublish(channel string, event string, pairs ...interface{}) error {
139 return s.db.SetAndPublish([]string{channel, event}, pairs...)
142 func (s *SDLClient) MStoreAndPublish(channelsAndEvents []string, pairs ...interface{}) error {
143 return s.db.SetAndPublish(channelsAndEvents, pairs...)
146 func (s *SDLClient) Delete(keys []string) (err error) {
147 return s.db.Remove(keys)
150 func (s *SDLClient) Clear() {
154 func (s *SDLClient) RegisterMetrics() {
155 s.stat = Metric.RegisterCounterGroup(SDLCounterOpts, "SDL")
158 func (s *SDLClient) UpdateStatCounter(name string) {
164 func (c *SDLClient) GetStat() (t SDLStatistics) {
168 func NewRNIBClient(ns string) *RNIBClient {
169 s := sdl.NewSdlInstance("e2Manager", sdl.NewDatabase())
177 func (r *RNIBClient) GetNodeb(invName string) (*RNIBNodebInfo, RNIBIRNibError) {
178 return rnibreader.GetRNibReader(r.db).GetNodeb(invName)
181 func (r *RNIBClient) GetNodebByGlobalNbId(t RNIBNodeType, gid *RNIBGlobalNbId) (*RNIBNodebInfo, RNIBIRNibError) {
182 return rnibreader.GetRNibReader(r.db).GetNodebByGlobalNbId(t, gid)
185 func (r *RNIBClient) GetCellList(invName string) (*RNIBCells, RNIBIRNibError) {
186 return rnibreader.GetRNibReader(r.db).GetCellList(invName)
189 func (r *RNIBClient) GetListGnbIds() ([]*RNIBNbIdentity, RNIBIRNibError) {
190 return rnibreader.GetRNibReader(r.db).GetListGnbIds()
193 func (r *RNIBClient) GetListEnbIds() ([]*RNIBNbIdentity, RNIBIRNibError) {
194 return rnibreader.GetRNibReader(r.db).GetListEnbIds()
197 func (r *RNIBClient) GetCountGnbList() (int, RNIBIRNibError) {
198 return rnibreader.GetRNibReader(r.db).GetCountGnbList()
201 func (r *RNIBClient) GetCell(invName string, pci uint32) (*RNIBCell, RNIBIRNibError) {
202 return rnibreader.GetRNibReader(r.db).GetCell(invName, pci)
205 func (r *RNIBClient) GetCellById(cellType RNIBCellType, cellId string) (*RNIBCell, RNIBIRNibError) {
206 return rnibreader.GetRNibReader(r.db).GetCellById(cellType, cellId)
209 func (r *RNIBClient) SaveNodeb(nbIdentity *RNIBNbIdentity, entity *RNIBNodebInfo) RNIBIRNibError {
210 return rnibwriter.GetRNibWriter(r.db).SaveNodeb(nbIdentity, entity)