[RICPLT-2585] Init fixes | Init UTs..........
[ric-plt/e2mgr.git] / E2Manager / managers / e2t_instances_manager.go
1 package managers
2
3 import (
4         "e2mgr/logger"
5         "e2mgr/services"
6         "fmt"
7         "gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/common"
8         "gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/entities"
9         "sync"
10 )
11
12 type E2TInstancesManager struct {
13         rnibDataService services.RNibDataService
14         logger          *logger.Logger
15         mux             sync.Mutex
16 }
17
18 type IE2TInstancesManager interface {
19         GetE2TInstance(e2tAddress string) (*entities.E2TInstance, error)
20         AddE2TInstance(e2tAddress string) error
21         RemoveE2TInstance(e2tInstance *entities.E2TInstance) error
22         SelectE2TInstance(e2tInstance *entities.E2TInstance) (string, error)
23         AssociateRan(ranName string, e2tAddress string) error
24         DeassociateRan(ranName string, e2tAddress string) error
25 }
26
27 func NewE2TInstancesManager(rnibDataService services.RNibDataService, logger *logger.Logger) *E2TInstancesManager {
28         return &E2TInstancesManager{
29                 rnibDataService: rnibDataService,
30                 logger:          logger,
31         }
32 }
33
34 func (m *E2TInstancesManager) GetE2TInstance(e2tAddress string) (*entities.E2TInstance, error) {
35         e2tInstance, err := m.rnibDataService.GetE2TInstance(e2tAddress)
36
37         if err != nil {
38                 m.logger.Errorf("#GetE2TInstance - E2T Instance address: %s - Failed retrieving E2TInstance. error: %s", e2tAddress, err)
39         }
40
41         return e2tInstance, err
42 }
43
44 func (m *E2TInstancesManager) AddE2TInstance(e2tAddress string) error {
45
46         if len(e2tAddress) == 0 {
47                 m.logger.Errorf("#AddE2TInstance - Empty E2T address received")
48                 return fmt.Errorf("empty E2T address")
49         }
50
51         e2tInstance := entities.NewE2TInstance(e2tAddress)
52         err := m.rnibDataService.SaveE2TInstance(e2tInstance)
53
54         if err != nil {
55                 m.logger.Errorf("#AddE2TInstance - E2T Instance address: %s - Failed saving E2T instance. error: %s", e2tInstance.Address, err)
56                 return err
57         }
58
59         m.mux.Lock()
60         defer m.mux.Unlock()
61
62         e2tInfoList, err := m.rnibDataService.GetE2TInfoList()
63
64         if err != nil {
65
66                 _, ok := err.(*common.ResourceNotFoundError)
67
68                 if !ok {
69                         m.logger.Errorf("#AddE2TInstance - E2T Instance address: %s - Failed retrieving E2TInfoList. error: %s", e2tInstance.Address, err)
70                         return err
71                 }
72         }
73
74         e2tInstanceInfo := entities.NewE2TInstanceInfo(e2tInstance.Address)
75         e2tInfoList = append(e2tInfoList, e2tInstanceInfo)
76
77         err = m.rnibDataService.SaveE2TInfoList(e2tInfoList)
78
79         if err != nil {
80                 m.logger.Errorf("#AddE2TInstance - E2T Instance address: %s - Failed saving E2TInfoList. error: %s", e2tInstance.Address, err)
81                 return err
82         }
83
84         m.logger.Infof("#AddE2TInstance - E2T Instance address: %s - successfully completed", e2tInstance.Address)
85         return nil
86 }
87
88 func (m *E2TInstancesManager) DeassociateRan(ranName string, e2tAddress string) error {
89
90         m.mux.Lock()
91         defer m.mux.Unlock()
92
93         e2tInfoList, err := m.rnibDataService.GetE2TInfoList()
94
95         if err != nil {
96                 m.logger.Errorf("#DeassociateRan - E2T Instance address: %s - Failed retrieving E2TInfoList. error: %s", e2tAddress, err)
97                 return err
98         }
99
100         isE2TInstanceFound := false
101
102         for _, e2tInfoInstance := range e2tInfoList {
103                 if e2tInfoInstance.Address == e2tAddress {
104                         e2tInfoInstance.AssociatedRanCount--
105                         isE2TInstanceFound = true
106                         break
107                 }
108         }
109
110         if !isE2TInstanceFound {
111                 m.logger.Warnf("#DeassociateRan - E2T Instance address: %s - E2TInstance not found in E2TInfoList.", e2tAddress)
112                 return nil
113         }
114
115         err = m.rnibDataService.SaveE2TInfoList(e2tInfoList)
116
117         if err != nil {
118                 m.logger.Errorf("#DeassociateRan - E2T Instance address: %s - Failed saving E2TInfoList. error: %s", e2tAddress, err)
119                 return err
120         }
121
122         e2tInstance, err := m.rnibDataService.GetE2TInstance(e2tAddress)
123
124         if err != nil {
125                 m.logger.Errorf("#DeassociateRan - E2T Instance address: %s - Failed retrieving E2TInstance. error: %s", e2tAddress, err)
126                 return err
127         }
128
129         i := 0 // output index
130         for _, v := range e2tInstance.AssociatedRanList {
131                 if v != ranName {
132                         // copy and increment index
133                         e2tInstance.AssociatedRanList[i] = v
134                         i++
135                 }
136         }
137
138         e2tInstance.AssociatedRanList = e2tInstance.AssociatedRanList[:i]
139
140         err = m.rnibDataService.SaveE2TInstance(e2tInstance)
141
142         if err != nil {
143                 m.logger.Errorf("#DeassociateRan - E2T Instance address: %s - Failed saving E2TInstance. error: %s", e2tAddress, err)
144                 return err
145         }
146
147         return nil
148 }
149
150 func (m *E2TInstancesManager) RemoveE2TInstance(e2tInstance *entities.E2TInstance) error {
151         return nil
152 }
153 func (m *E2TInstancesManager) SelectE2TInstance(e2tInstance *entities.E2TInstance) (string, error) {
154         return "", nil
155 }
156
157 func (m *E2TInstancesManager) AssociateRan(ranName string, e2tAddress string) error {
158
159         e2tInfoList, err := m.rnibDataService.GetE2TInfoList()
160
161         if err != nil {
162                 m.logger.Errorf("#AssociateRan - E2T Instance address: %s - Failed retrieving E2TInfoList. error: %s", e2tAddress, err)
163                 return err
164         }
165
166         for _, e2tInfoInstance := range e2tInfoList {
167                 if e2tInfoInstance.Address == e2tAddress {
168                         e2tInfoInstance.AssociatedRanCount++
169                         break;
170                 }
171         }
172
173         err = m.rnibDataService.SaveE2TInfoList(e2tInfoList)
174
175         if err != nil {
176                 m.logger.Errorf("#AssociateRan - E2T Instance address: %s - Failed saving E2TInfoList. error: %s", e2tAddress, err)
177                 return err
178         }
179
180         e2tInstance, err := m.rnibDataService.GetE2TInstance(e2tAddress)
181
182         if err != nil {
183                 m.logger.Errorf("#AssociateRan - E2T Instance address: %s - Failed retrieving E2TInstance. error: %s", e2tAddress, err)
184                 return err
185         }
186
187         e2tInstance.AssociatedRanList = append(e2tInstance.AssociatedRanList, ranName)
188
189         err = m.rnibDataService.SaveE2TInstance(e2tInstance)
190
191         if err != nil {
192                 m.logger.Errorf("#AssociateRan - E2T Instance address: %s - Failed saving E2TInstance. error: %s", e2tAddress, err)
193                 return err
194         }
195
196         return nil
197 }