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 {
80 db: sdl.NewSdlInstance(ns, sdl.NewDatabase()),
81 stat: Metric.RegisterCounterGroup(SDLCounterOpts, "SDL"),
86 func (s *SDLClient) TestConnection() {
87 // Test DB connection, and wait until ready!
89 if _, err := s.db.GetAll(); err == nil {
92 Logger.Warn("Database connection not ready, waiting ...")
93 time.Sleep(time.Duration(5 * time.Second))
96 Logger.Info("Connection to database established!")
99 func (s *SDLClient) IsReady() bool {
103 func (s *SDLClient) doSet(pairs ...interface{}) (err error) {
104 err = s.db.Set(pairs)
106 s.UpdateStatCounter("StoreError")
108 s.UpdateStatCounter("Stored")
113 func (s *SDLClient) Store(key string, value interface{}) (err error) {
114 return s.doSet(key, value)
117 func (s *SDLClient) MStore(pairs ...interface{}) (err error) {
118 return s.doSet(pairs)
121 func (s *SDLClient) Read(key string) (value map[string]interface{}, err error) {
122 return s.db.Get([]string{key})
125 func (s *SDLClient) MRead(key []string) (value map[string]interface{}, err error) {
129 func (s *SDLClient) ReadAllKeys(key string) (value []string, err error) {
133 func (s *SDLClient) Subscribe(cb func(string, ...string), channel string) error {
134 return s.db.SubscribeChannel(cb, channel)
137 func (s *SDLClient) MSubscribe(cb func(string, ...string), channels ...string) error {
138 return s.db.SubscribeChannel(cb, channels...)
141 func (s *SDLClient) StoreAndPublish(channel string, event string, pairs ...interface{}) error {
142 return s.db.SetAndPublish([]string{channel, event}, pairs...)
145 func (s *SDLClient) MStoreAndPublish(channelsAndEvents []string, pairs ...interface{}) error {
146 return s.db.SetAndPublish(channelsAndEvents, pairs...)
149 func (s *SDLClient) Delete(keys []string) (err error) {
150 return s.db.Remove(keys)
153 func (s *SDLClient) Clear() {
157 func (s *SDLClient) RegisterMetrics() {
158 s.stat = Metric.RegisterCounterGroup(SDLCounterOpts, "SDL")
161 func (s *SDLClient) UpdateStatCounter(name string) {
167 func (c *SDLClient) GetStat() (t SDLStatistics) {
171 func NewRNIBClient() *RNIBClient {
172 s := sdl.NewSdlInstance("e2Manager", sdl.NewDatabase())
180 func (r *RNIBClient) Subscribe(cb func(string, ...string), channel string) error {
181 return r.db.SubscribeChannel(cb, channel)
184 func (r *RNIBClient) StoreAndPublish(channel string, event string, pairs ...interface{}) error {
185 return r.db.SetAndPublish([]string{channel, event}, pairs...)
188 func (r *RNIBClient) GetNodeb(invName string) (*RNIBNodebInfo, RNIBIRNibError) {
189 return rnibreader.GetRNibReader(r.db).GetNodeb(invName)
192 func (r *RNIBClient) GetNodebByGlobalNbId(t RNIBNodeType, gid *RNIBGlobalNbId) (*RNIBNodebInfo, RNIBIRNibError) {
193 return rnibreader.GetRNibReader(r.db).GetNodebByGlobalNbId(t, gid)
196 func (r *RNIBClient) GetCellList(invName string) (*RNIBCells, RNIBIRNibError) {
197 return rnibreader.GetRNibReader(r.db).GetCellList(invName)
200 func (r *RNIBClient) GetListGnbIds() ([]*RNIBNbIdentity, RNIBIRNibError) {
201 return rnibreader.GetRNibReader(r.db).GetListGnbIds()
204 func (r *RNIBClient) GetListEnbIds() ([]*RNIBNbIdentity, RNIBIRNibError) {
205 return rnibreader.GetRNibReader(r.db).GetListEnbIds()
208 func (r *RNIBClient) GetCountGnbList() (int, RNIBIRNibError) {
209 return rnibreader.GetRNibReader(r.db).GetCountGnbList()
212 func (r *RNIBClient) GetCell(invName string, pci uint32) (*RNIBCell, RNIBIRNibError) {
213 return rnibreader.GetRNibReader(r.db).GetCell(invName, pci)
216 func (r *RNIBClient) GetCellById(cellType RNIBCellType, cellId string) (*RNIBCell, RNIBIRNibError) {
217 return rnibreader.GetRNibReader(r.db).GetCellById(cellType, cellId)
220 func (r *RNIBClient) SaveNodeb(nbIdentity *RNIBNbIdentity, entity *RNIBNodebInfo) RNIBIRNibError {
221 return rnibwriter.GetRNibWriter(r.db).SaveNodeb(nbIdentity, entity)