X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;f=hwApp.go;h=14dd4f6ead133f3c55342e8ee04f040841aa81f8;hb=refs%2Fchanges%2F58%2F7558%2F1;hp=52342b07ce4cdbc9d8bbd8448984d517a2fd5bd5;hpb=3c8e1c5e95e8bed8d0b4ae2c1ff47833a5eaf738;p=ric-app%2Fhw-go.git diff --git a/hwApp.go b/hwApp.go index 52342b0..14dd4f6 100755 --- a/hwApp.go +++ b/hwApp.go @@ -14,22 +14,39 @@ See the License for the specific language governing permissions and limitations under the License. - This source code is part of the near-RT RIC (RAN Intelligent Controller) - platform project (RICP). ================================================================================== */ package main import ( + "encoding/json" + + "gerrit.o-ran-sc.org/r/ric-plt/alarm-go.git/alarm" + "gerrit.o-ran-sc.org/r/ric-plt/xapp-frame/pkg/clientmodel" "gerrit.o-ran-sc.org/r/ric-plt/xapp-frame/pkg/xapp" ) type HWApp struct { + stats map[string]xapp.Counter } var ( A1_POLICY_QUERY = 20013 POLICY_QUERY_PAYLOAD = "{\"policy_type_id\":20000}" + reqId = int64(1) + seqId = int64(1) + funId = int64(1) + actionId = int64(1) + actionType = "report" + subsequestActioType = "continue" + timeToWait = "w10ms" + direction = int64(0) + procedureCode = int64(27) + typeOfMessage = int64(1) + subscriptionId = "" + hPort = int64(8080) + rPort = int64(4560) + clientEndpoint = clientmodel.SubscriptionParamsClientEndpoint{Host: "service-ricxapp-hw-go-http.ricxapp", HTTPPort: &hPort, RMRPort: &rPort} ) func (e *HWApp) sendPolicyQuery() { @@ -54,54 +71,121 @@ func (e *HWApp) ConfigChangeHandler(f string) { xapp.Logger.Info("Config file changed") } -func (e *HWApp) getEnbList() ([]*xapp.RNIBNbIdentity, error){ - enbs, err := xapp.Rnib.GetListEnbIds() +func (e *HWApp) getEnbList() ([]*xapp.RNIBNbIdentity, error) { + enbs, err := xapp.Rnib.GetListEnbIds() - if err != nil { - xapp.Logger.Error("err: %s", err) - return nil, err - } + if err != nil { + xapp.Logger.Error("err: %s", err) + return nil, err + } - xapp.Logger.Info("List for connected eNBs :") - for index, enb := range enbs { - xapp.Logger.Info("%d. enbid: %s", index+1, enb.InventoryName) - } - return enbs, nil + xapp.Logger.Info("List for connected eNBs :") + for index, enb := range enbs { + xapp.Logger.Info("%d. enbid: %s", index+1, enb.InventoryName) + } + return enbs, nil } func (e *HWApp) getGnbList() ([]*xapp.RNIBNbIdentity, error) { - gnbs, err := xapp.Rnib.GetListGnbIds() - - if err != nil { - xapp.Logger.Error("err: %s", err) - return nil, err - } - - xapp.Logger.Info("List of connected gNBs :") - for index, gnb := range gnbs { - xapp.Logger.Info("%d. gnbid : %s", index+1, gnb.InventoryName) - } - return gnbs, nil + gnbs, err := xapp.Rnib.GetListGnbIds() + + if err != nil { + xapp.Logger.Error("err: %s", err) + return nil, err + } + + xapp.Logger.Info("List of connected gNBs :") + for index, gnb := range gnbs { + xapp.Logger.Info("%d. gnbid : %s", index+1, gnb.InventoryName) + } + return gnbs, nil } -func (e *HWApp) getnbList() ([]*xapp.RNIBNbIdentity) { - nbs := []*xapp.RNIBNbIdentity{} +func (e *HWApp) getnbList() []*xapp.RNIBNbIdentity { + nbs := []*xapp.RNIBNbIdentity{} - if enbs , err := e.getEnbList(); err == nil { - nbs = append(nbs, enbs...) - } + if enbs, err := e.getEnbList(); err == nil { + nbs = append(nbs, enbs...) + } - if gnbs, err := e.getGnbList(); err == nil { - nbs = append(nbs, gnbs...) - } - return nbs + if gnbs, err := e.getGnbList(); err == nil { + nbs = append(nbs, gnbs...) + } + return nbs +} + +func (e *HWApp) sendSubscription(meid string) { + + xapp.Logger.Info("sending subscription request for meid : %s", meid) + + subscriptionParams := clientmodel.SubscriptionParams{ + ClientEndpoint: &clientEndpoint, + Meid: &meid, + RANFunctionID: &funId, + SubscriptionDetails: clientmodel.SubscriptionDetailsList{ + &clientmodel.SubscriptionDetail{ + RequestorID: &reqId, + InstanceID: &seqId, + EventTriggers: &clientmodel.EventTriggerDefinition{ + OctetString: "1234", + }, + ActionToBeSetupList: clientmodel.ActionsToBeSetup{ + &clientmodel.ActionToBeSetup{ + ActionDefinition: &clientmodel.ActionDefinition{ + OctetString: "5678", + }, + ActionID: &actionId, + ActionType: &actionType, + SubsequentAction: &clientmodel.SubsequentAction{ + SubsequentActionType: &subsequestActioType, + TimeToWait: &timeToWait, + }, + }, + }, + }, + }, + } + + b, err := json.MarshalIndent(subscriptionParams, "", " ") + + if err != nil { + xapp.Logger.Error("Json marshaling failed : %s", err) + return + } + + xapp.Logger.Info("*****body: %s ", string(b)) + + resp, err := xapp.Subscription.Subscribe(&subscriptionParams) + + if err != nil { + xapp.Logger.Error("subscription failed (%s) with error: %s", meid, err) + + // subscription failed, raise alarm + err := xapp.Alarm.Raise(8086, alarm.SeverityCritical, meid, "subscriptionFailed") + if err != nil { + xapp.Logger.Error("Raising alarm failed with error %v", err) + } + + return + } + xapp.Logger.Info("Successfully subcription done (%s), subscription id : %s", meid, *resp.SubscriptionID) } func (e *HWApp) xAppStartCB(d interface{}) { xapp.Logger.Info("xApp ready call back received") - // get the list of all NBs - e.getnbList() + // get the list of all NBs + nbList := e.getnbList() + + // send subscription request to each of the NBs + for _, nb := range nbList { + e.sendSubscription(nb.InventoryName) + } +} + +func (e *HWApp) handleRICIndication(ranName string, r *xapp.RMRParams) { + // update metrics for indication message + e.stats["RICIndicationRx"].Inc() } func (e *HWApp) Consume(msg *xapp.RMRParams) (err error) { @@ -118,6 +202,11 @@ func (e *HWApp) Consume(msg *xapp.RMRParams) (err error) { case "RIC_HEALTH_CHECK_REQ": xapp.Logger.Info("Received health check request") + // RIC INDICATION message + case "RIC_INDICATION": + xapp.Logger.Info("Received RIC Indication message") + e.handleRICIndication(msg.Meid.RanName, msg) + default: xapp.Logger.Info("Unknown message type '%d', discarding", msg.Mtype) } @@ -149,6 +238,16 @@ func (e *HWApp) Run() { } func main() { - hw := HWApp{} + // Defind metrics counter that the xapp provides + metrics := []xapp.CounterOpts{ + { + Name: "RICIndicationRx", + Help: "Total number of RIC Indication message received", + }, + } + + hw := HWApp{ + stats: xapp.Metric.RegisterCounterGroup(metrics, "hw_go"), // register counter + } hw.Run() }