52342b07ce4cdbc9d8bbd8448984d517a2fd5bd5
[ric-app/hw-go.git] / hwApp.go
1 /*
2 ==================================================================================
3   Copyright (c) 2020 Samsung
4
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
8
9        http://www.apache.org/licenses/LICENSE-2.0
10
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.
16
17    This source code is part of the near-RT RIC (RAN Intelligent Controller)
18    platform project (RICP).
19 ==================================================================================
20 */
21 package main
22
23 import (
24         "gerrit.o-ran-sc.org/r/ric-plt/xapp-frame/pkg/xapp"
25 )
26
27 type HWApp struct {
28 }
29
30 var (
31         A1_POLICY_QUERY      = 20013
32         POLICY_QUERY_PAYLOAD = "{\"policy_type_id\":20000}"
33 )
34
35 func (e *HWApp) sendPolicyQuery() {
36         xapp.Logger.Info("Invoked method to send  policy query message")
37
38         // prepare and send policy query message over RMR
39         rmrParams := new(xapp.RMRParams)
40         rmrParams.Mtype = A1_POLICY_QUERY // A1_POLICY_QUERY
41         rmrParams.Payload = []byte(POLICY_QUERY_PAYLOAD)
42
43         // send rmr message
44         flg := xapp.Rmr.SendMsg(rmrParams)
45
46         if flg {
47                 xapp.Logger.Info("Successfully sent policy query message over RMR")
48         } else {
49                 xapp.Logger.Info("Failed to send policy query message over RMR")
50         }
51 }
52
53 func (e *HWApp) ConfigChangeHandler(f string) {
54         xapp.Logger.Info("Config file changed")
55 }
56
57 func (e *HWApp) getEnbList() ([]*xapp.RNIBNbIdentity, error){
58        enbs, err := xapp.Rnib.GetListEnbIds()
59
60        if err != nil {
61                xapp.Logger.Error("err: %s", err)
62                return nil, err
63        }
64
65        xapp.Logger.Info("List for connected eNBs :")
66        for index, enb := range enbs {
67                xapp.Logger.Info("%d. enbid: %s", index+1, enb.InventoryName)
68        }
69        return enbs, nil
70 }
71
72 func (e *HWApp) getGnbList() ([]*xapp.RNIBNbIdentity, error) {
73        gnbs, err := xapp.Rnib.GetListGnbIds()
74
75        if err != nil {
76                xapp.Logger.Error("err: %s", err)
77                return nil, err
78        }
79
80        xapp.Logger.Info("List of connected gNBs :")
81        for index, gnb := range gnbs {
82                xapp.Logger.Info("%d. gnbid : %s", index+1, gnb.InventoryName)
83        }
84        return gnbs, nil
85 }
86
87 func (e *HWApp) getnbList() ([]*xapp.RNIBNbIdentity) {
88        nbs := []*xapp.RNIBNbIdentity{}
89
90        if enbs , err := e.getEnbList(); err == nil {
91               nbs = append(nbs, enbs...)
92        }
93
94        if gnbs, err := e.getGnbList(); err == nil {
95               nbs = append(nbs, gnbs...)
96        }
97        return nbs
98 }
99
100 func (e *HWApp) xAppStartCB(d interface{}) {
101         xapp.Logger.Info("xApp ready call back received")
102
103        // get the list of all NBs
104        e.getnbList()
105 }
106
107 func (e *HWApp) Consume(msg *xapp.RMRParams) (err error) {
108         id := xapp.Rmr.GetRicMessageName(msg.Mtype)
109
110         xapp.Logger.Info("Message received: name=%s meid=%s subId=%d txid=%s len=%d", id, msg.Meid.RanName, msg.SubId, msg.Xid, msg.PayloadLen)
111
112         switch id {
113         // policy request handler
114         case "A1_POLICY_REQUEST":
115                 xapp.Logger.Info("Recived policy instance list")
116
117         // health check request
118         case "RIC_HEALTH_CHECK_REQ":
119                 xapp.Logger.Info("Received health check request")
120
121         default:
122                 xapp.Logger.Info("Unknown message type '%d', discarding", msg.Mtype)
123         }
124
125         defer func() {
126                 xapp.Rmr.Free(msg.Mbuf)
127                 msg.Mbuf = nil
128         }()
129         return
130 }
131
132 func (e *HWApp) Run() {
133
134         // set MDC
135         xapp.Logger.SetMdc("HWApp", "0.0.1")
136
137         // set config change listener
138         xapp.AddConfigChangeListener(e.ConfigChangeHandler)
139
140         // register callback after xapp ready
141         xapp.SetReadyCB(e.xAppStartCB, true)
142
143         // reading configuration from config file
144         waitForSdl := xapp.Config.GetBool("db.waitForSdl")
145
146         // start xapp
147         xapp.RunWithParams(e, waitForSdl)
148
149 }
150
151 func main() {
152         hw := HWApp{}
153         hw.Run()
154 }