RICAPP-227:- dynamically adding fields to influxdb and changed the UE KPI 41/12141/1 i-release
authorsandeepindia <kumar.sandeep3@hcl.com>
Wed, 29 Nov 2023 19:50:35 +0000 (19:50 +0000)
committersandeepindia <kumar.sandeep3@hcl.com>
Wed, 29 Nov 2023 19:50:35 +0000 (19:50 +0000)
     parse logic as per indications coming from VIAVI RIC-Test

Change-Id: Ib81c423d88527d6a5b99a3d0dd74d503b358e703
Signed-off-by: sandeepindia <kumar.sandeep3@hcl.com>
control/control.go
e2sm/wrapper.c
f1ap.tar.gz
f1apHelper/f1apServer.go

index 7b8fc61..555bce2 100644 (file)
@@ -313,9 +313,9 @@ func encode_actionsToBeSetup(meid string) clientmodel.ActionsToBeSetup {
 \r
        var n int64 = 1\r
        cells:=Glob_Ran_cell[meid]\r
-       fmt.Println("len of Tonga cells= ",len(cells))\r
-        fmt.Println("Tonga cells = ", cells)\r
-       fmt.Println("Tonga  = ", Glob_Ran_cell)\r
+       //fmt.Println("len of Tonga cells= ",len(cells))\r
+        //fmt.Println("Tonga cells = ", cells)\r
+       //fmt.Println("Tonga  = ", Glob_Ran_cell)\r
 \r
        var tempCells []string\r
        for _, ele:=range cells{\r
@@ -323,8 +323,8 @@ func encode_actionsToBeSetup(meid string) clientmodel.ActionsToBeSetup {
                        tempCells =append(tempCells,ele)\r
                }\r
        }\r
-       fmt.Println("len of Tonga tmep cells= ",len(tempCells))\r
-        fmt.Println("Tonga temp cells = ", tempCells)\r
+       //fmt.Println("len of Tonga tmep cells= ",len(tempCells))\r
+        //fmt.Println("Tonga temp cells = ", tempCells)\r
 \r
        //var ue int64 = 1 //get no of ue connected to du(if required)\r
 \r
@@ -745,34 +745,45 @@ func (c *Control) handleIndication(params *xapp.RMRParams) (err error) {
                                 var sizeof_MeasurementDataItem_t  *C.MeasurementDataItem_t\r
                                 MeasurementDataItem_C:=*(**C.MeasurementDataItem_t)(unsafe.Pointer(uintptr(unsafe.Pointer(indMsgFormat1_C.measData.list.array)) + (uintptr)(int(n))*unsafe.Sizeof(sizeof_MeasurementDataItem_t)))\r
                                 no_of_cell_metrics:=int32(MeasurementDataItem_C.measRecord.list.count)\r
-                                var CellM CellMetricsEntry\r
-                                v := reflect.ValueOf(CellM)\r
+                                //var CellM CellMetricsEntry\r
+                                //v := reflect.ValueOf(CellM)\r
                                 fmt.Printf(" \n No of cell metrics = %d\n",no_of_cell_metrics)\r
-                                values := make(map[string]interface{}, v.NumField())\r
+                                //values := make(map[string]interface{}, v.NumField())\r
+                               values := make(map[string]interface{})\r
+                               CellKpi:=ranCellKpi[params.Meid.RanName]\r
+                               var tmpCellKpi []string\r
+                               for _, ele:=range CellKpi{\r
+                               if ele!=""{\r
+                                               tmpCellKpi =append(tmpCellKpi,ele)\r
+                                       }\r
+                               }\r
+\r
                                 //assert no_of_cell_metrics == v.NumField()   they both should be equal.\r
-                               if (int(no_of_cell_metrics) != v.NumField()){\r
-                        log.Printf("no_of_cell_metrics != v.NumField()")\r
-                       return errors.New("no_of_cell_metrics != v.NumField()")\r
+                               if (int(no_of_cell_metrics) != len(tmpCellKpi)){\r
+                        log.Printf("no_of_cell_metrics !=  len(tmpCellKpi)")\r
+                       return errors.New("no_of_cell_metrics  !=len(tmpCellKpi)")\r
                                }\r
                                 for i := int32(0); i < no_of_cell_metrics; i++ {\r
                                         //fmt.Println(i)\r
-                                        if v.Field(int(i)).CanInterface() {\r
+                                        //if v.Field(int(i)).CanInterface() {\r
                                                         var sizeof_MeasurementRecordItem_t *C.MeasurementRecordItem_t\r
                                                         MeasurementRecordItem_C:=*(**C. MeasurementRecordItem_t)(unsafe.Pointer(uintptr(unsafe.Pointer(MeasurementDataItem_C.measRecord.list.array)) + (uintptr)(int(i))*unsafe.Sizeof(sizeof_MeasurementRecordItem_t)))\r
                                                         type_var:=int(MeasurementRecordItem_C.present)\r
                                                         if type_var==1{\r
                                                                 var cast_integer *C.long = (*C.long)(unsafe.Pointer(&MeasurementRecordItem_C.choice[0]))\r
-                                                                values[v.Type().Field(int(i)).Name]=int32(*cast_integer)\r
+                                                                //values[v.Type().Field(int(i)).Name]=int32(*cast_integer)\r
+                                                               values[tmpCellKpi[int(i)]]=int32(*cast_integer)\r
                                                                 }else if type_var==2{\r
                                 var cast_float *C.double = (*C.double)(unsafe.Pointer(&MeasurementRecordItem_C.choice[0]))\r
-                                values[v.Type().Field(int(i)).Name]=float64(*cast_float)\r
+                                //values[v.Type().Field(int(i)).Name]=float64(*cast_float)\r
+                               values[tmpCellKpi[int(i)]]=float64(*cast_float)\r
                                                         }else{\r
                                                         fmt.Printf("Wrong Data Type")\r
                                                 }\r
 \r
-                                                }else {\r
-                                                fmt.Printf("sorry you have a unexported field (lower case) value you are trying to sneak past. Can not allow it: %v\n", v.Type().Field(int(i)).Name)\r
-                                                }\r
+                                               // }else {\r
+                                                //fmt.Printf("sorry you have a unexported field (lower case) value you are trying to sneak past. Can not allow it: %v\n", v.Type().Field(int(i)).Name)\r
+                                                //}\r
                                         }//end of inner for loop\r
 \r
 \r
@@ -786,47 +797,61 @@ func (c *Control) handleIndication(params *xapp.RMRParams) (err error) {
 \r
                 fmt.Printf(" parsing for UE metrics" )\r
                 indMsgFormat2_C := *(**C.E2SM_KPM_IndicationMessage_Format2_t)(unsafe.Pointer(&indicationmessage.indicationMessage_formats.choice[0]))\r
-                no_of_ue_metrics:=int32(indMsgFormat2_C .measData.list.count)\r
-                fmt.Printf(" \n No of ue metrics = %d\n",no_of_ue_metrics)\r
+                //no_of_ue_metrics:=int32(indMsgFormat2_C .measData.list.count)\r
+                //fmt.Printf(" \n No of ue metrics = %d\n",no_of_ue_metrics)\r
 \r
                 var sizeof_MeasurementDataItem_t  *C.MeasurementDataItem_t\r
                 MeasurementDataItem_C:=*(**C.MeasurementDataItem_t)(unsafe.Pointer(uintptr(unsafe.Pointer(indMsgFormat2_C.measData.list.array)) + (uintptr)(0)*unsafe.Sizeof(sizeof_MeasurementDataItem_t)))\r
+               UeKpi:=ranUeKpi[params.Meid.RanName]\r
+                                var tmpUeKpi []string\r
+                                for _, ele:=range UeKpi{\r
+                                if ele!=""{\r
+                                                tmpUeKpi =append(tmpUeKpi,ele)\r
+                                        }\r
+                                }\r
+\r
+                \r
+               no_of_ue:=int32(MeasurementDataItem_C.measRecord.list.count)/int32(len(tmpUeKpi))\r
+                no_of_ue_metrics:=int32(len(tmpUeKpi))\r
+               fmt.Printf(" \n No of ue= %d\n",no_of_ue)\r
 \r
-                no_of_ue:=int32(MeasurementDataItem_C.measRecord.list.count)\r
-                fmt.Printf(" \n No of ue= %d\n",no_of_ue)\r
                 for n := int32(0); n < no_of_ue; n++ {\r
-                                var UeM UeMetricsEntry\r
-                                v := reflect.ValueOf(UeM)\r
-                                values := make(map[string]interface{}, v.NumField())\r
+                                //var UeM UeMetricsEntry\r
+                                //v := reflect.ValueOf(UeM)\r
+                                //values := make(map[string]interface{}, v.NumField())\r
+                               values := make(map[string]interface{})\r
                                 //assert no_of_ue_metrics == v.NumField()   they both should be equal.\r
-                               if (int(no_of_ue_metrics) != v.NumField()){\r
-                        log.Printf("no_of_ue_metrics != v.NumField()")\r
-                        return errors.New("no_of_ue_metrics != v.NumField()")\r
-                               }\r
+                               //if (int(no_of_ue_metrics) != v.NumField()){\r
+                        //log.Printf("no_of_ue_metrics != v.NumField()")\r
+                        //return errors.New("no_of_ue_metrics != v.NumField()")\r
+                               //}\r
                                 for i := int32(0); i < no_of_ue_metrics; i++ {\r
                                 //fmt.Println(i)\r
-                                if v.Field(int(i)).CanInterface() {\r
+                                //if v.Field(int(i)).CanInterface() {\r
 \r
-                                        var sizeof_MeasurementDataItem_t  *C.MeasurementDataItem_t\r
-                                        MeasurementDataItem_C:=*(**C.MeasurementDataItem_t)(unsafe.Pointer(uintptr(unsafe.Pointer(indMsgFormat2_C.measData.list.array)) + (uintptr)(i)*unsafe.Sizeof(sizeof_MeasurementDataItem_t)))\r
-                                        var sizeof_MeasurementRecordItem_t *C.MeasurementRecordItem_t\r
-                                        MeasurementRecordItem_C:=*(**C.MeasurementRecordItem_t)(unsafe.Pointer(uintptr(unsafe.Pointer(MeasurementDataItem_C.measRecord.list.array)) + (uintptr)(n)*unsafe.Sizeof(sizeof_MeasurementRecordItem_t)))\r
+                                        //var sizeof_MeasurementDataItem_t  *C.MeasurementDataItem_t\r
+                                        //MeasurementDataItem_C:=*(**C.MeasurementDataItem_t)(unsafe.Pointer(uintptr(unsafe.Pointer(indMsgFormat2_C.measData.list.array)) + (uintptr)(i)*unsafe.Sizeof(sizeof_MeasurementDataItem_t)))\r
+\r
+                                       var sizeof_MeasurementRecordItem_t *C.MeasurementRecordItem_t\r
+                                        MeasurementRecordItem_C:=*(**C.MeasurementRecordItem_t)(unsafe.Pointer(uintptr(unsafe.Pointer(MeasurementDataItem_C.measRecord.list.array)) + (uintptr)(n+(i*no_of_ue))*unsafe.Sizeof(sizeof_MeasurementRecordItem_t)))\r
+                                        //var sizeof_MeasurementRecordItem_t *C.MeasurementRecordItem_t\r
+                                        //MeasurementRecordItem_C:=*(**C.MeasurementRecordItem_t)(unsafe.Pointer(uintptr(unsafe.Pointer(MeasurementDataItem_C.measRecord.list.array)) + (uintptr)(n)*unsafe.Sizeof(sizeof_MeasurementRecordItem_t)))\r
 \r
                                         type_var:=int(MeasurementRecordItem_C.present)\r
                                 if type_var==1{\r
                                         var cast_integer *C.long = (*C.long)(unsafe.Pointer(&MeasurementRecordItem_C.choice[0]))\r
-                                        values[v.Type().Field(int(i)).Name]=int32(*cast_integer)\r
+                                        values[tmpUeKpi[int(i)]]=int32(*cast_integer)\r
                                 }else if type_var==2{\r
                                         var cast_float *C.double = (*C.double)(unsafe.Pointer(&MeasurementRecordItem_C.choice[0]))\r
-                                        values[v.Type().Field(int(i)).Name]=float64(*cast_float)\r
+                                        values[tmpUeKpi[int(i)]]=float64(*cast_float)\r
 \r
                                         }else{\r
                                         fmt.Printf("Wrong Data Type")\r
                                 }\r
 \r
-                        }else {\r
-                                fmt.Printf("sorry you have a unexported field (lower case) value you are trying to sneak past. Can not allow it: %v\n", v.Type().Field(int(i)).Name)\r
-                                }\r
+                       // }else {\r
+                               // fmt.Printf("sorry you have a unexported field (lower case) value you are trying to sneak past. Can not allow it: %v\n", v.Type().Field(int(i)).Name)\r
+                               // }\r
 \r
 \r
                                         }       //end of inner for loop\r
@@ -915,27 +940,41 @@ func (c *Control) queryCellReports() {
 */\r
 func (c *Control) writeUeMetrics_db(ueMetrics *map[string]interface{}) {\r
        writeAPI := c.client.WriteAPIBlocking("my-org", "kpimon")\r
+       /*\r
        ueMetricsJSON, err := json.Marshal(ueMetrics)\r
        if err != nil {\r
                xapp.Logger.Error("Marshal UE Metrics failed!")\r
        }\r
+       \r
        p := influxdb2.NewPointWithMeasurement("UeMetrics").\r
                AddField("UE Metrics", ueMetricsJSON).\r
                SetTime(time.Now())\r
+       */\r
+       p := influxdb2.NewPointWithMeasurement("UeMetrics").SetTime(time.Now())\r
+       for key, value := range *ueMetrics {\r
+                       p = p.AddField(key, value)\r
+       }\r
+\r
        writeAPI.WritePoint(context.Background(), p)\r
        xapp.Logger.Info("Wrote UE Metrics to InfluxDB")\r
 }\r
 \r
 func (c *Control) writeCellMetrics_db(cellMetrics *map[string]interface{}) {\r
        writeAPI := c.client.WriteAPIBlocking("my-org", "kpimon")\r
+       /*\r
        cellMetricsJSON, er := json.Marshal(cellMetrics)\r
        if er != nil {\r
                xapp.Logger.Error("Marshal Cell Metrics failed!")\r
        }\r
+       \r
        p := influxdb2.NewPointWithMeasurement("cellMetrics").\r
                AddField("Cell Metrics", cellMetricsJSON).\r
                SetTime(time.Now())\r
-\r
+       */\r
+       p := influxdb2.NewPointWithMeasurement("cellMetrics").SetTime(time.Now())\r
+       for key, value := range *cellMetrics {\r
+                p = p.AddField(key, value)\r
+        }\r
        writeAPI.WritePoint(context.Background(), p)\r
        xapp.Logger.Info("Wrote Cell Metrics to InfluxDB")\r
 }\r
@@ -984,8 +1023,8 @@ func (c Control) xAppStartCB(d interface{}) {
                                ueSlice = append(ueSlice, C.GoString(v))\r
                        }\r
                        ranUeKpi[nb.InventoryName]=ueSlice\r
-                       fmt.Println("len of ranUeKpi= ",len(ranUeKpi))\r
-                       fmt.Println("ranUeKpi map = ", ranUeKpi)\r
+                       //fmt.Println("len of ranUeKpi= ",len(ranUeKpi))\r
+                       //fmt.Println("ranUeKpi map = ", ranUeKpi)\r
 \r
 \r
                        cellSlice := make([]string, result.cellKpiSize)\r
@@ -994,8 +1033,8 @@ func (c Control) xAppStartCB(d interface{}) {
                                 cellSlice = append(cellSlice, C.GoString(v))\r
                         }\r
                        ranCellKpi[nb.InventoryName]=cellSlice\r
-                       fmt.Println("len of ranCellKpi= ",len(ranCellKpi))\r
-                        fmt.Println("ranCellKpi map = ", ranCellKpi)\r
+                       //fmt.Println("len of ranCellKpi= ",len(ranCellKpi))\r
+                        //fmt.Println("ranCellKpi map = ", ranCellKpi)\r
                        /*\r
                        counter = 0\r
                        for i := 0; i < len(resp.Gnb.NodeConfigs); i++ {\r
@@ -1056,9 +1095,6 @@ func (c Control) xAppStartCB(d interface{}) {
                                 Glob_cell_Plmn[response2.Cellids[i]]=response2.PlmnIds[i]\r
                         }\r
 \r
-                       fmt.Println("len of Glob_cell_Plmn= ",len(Glob_cell_Plmn))\r
-                       fmt.Println("Glob_cell_Plmn map = ", Glob_cell_Plmn)\r
-\r
 \r
                        //C.freeMemorydRanCellUeKpi(result)\r
 \r
@@ -1067,7 +1103,14 @@ func (c Control) xAppStartCB(d interface{}) {
 \r
         }\r
 \r
-\r
+       for {\r
+               time.Sleep(5 * time.Second)\r
+               if xapp.IsRegistered() {\r
+                       xapp.Logger.Info("App registration is done, ready to send subscription request.")\r
+                       break\r
+               }\r
+               xapp.Logger.Debug("App registration is not done yet, sleep 5s and check again")\r
+       }\r
        // Send subscription request to connected NodeB\r
        for _, nb := range nbList {\r
                if nb.ConnectionStatus == 1 {\r
@@ -1077,8 +1120,16 @@ func (c Control) xAppStartCB(d interface{}) {
                }\r
 \r
        }\r
-       fmt.Println("len of Glob_Ran_cell= ",len(Glob_Ran_cell))\r
-       fmt.Println("Glob_Ran_cell map = ", Glob_Ran_cell)\r
+\r
+                       fmt.Println("len of ranUeKpi= ",len(ranUeKpi))\r
+                        fmt.Println("ranUeKpi map = ", ranUeKpi)\r
+\r
+                         fmt.Println("len of ranCellKpi= ",len(ranCellKpi))\r
+                        fmt.Println("ranCellKpi map = ", ranCellKpi)\r
+\r
+                        fmt.Println("len of Glob_cell_Plmn= ",len(Glob_cell_Plmn))\r
+                        fmt.Println("Glob_cell_Plmn map = ", Glob_cell_Plmn)\r
+\r
 \r
        go c.controlLoop()\r
        //go c.queryUEReports()\r
index dbd35aa..7704746 100644 (file)
@@ -227,7 +227,7 @@ struct encode_act_Def_result encode_action_Definition(const char *hex_values, in
         }
         printf("\n");
         printf("measName format 3\n");
-        for(int i=0;i<sz1;i++){
+        for(int i=0;i<sz3;i++){
                 printf("%s, ",name_format3[i]);
         }
 
index c3a3676..b96f84b 100644 (file)
Binary files a/f1ap.tar.gz and b/f1ap.tar.gz differ
index ffe9084..050f97d 100644 (file)
@@ -101,7 +101,7 @@ func main() {
                         message := string(base64Text[:nl])
 
        cString2 := C.CString(message)
-       fmt.Println("Ponga server = ",message)
+       fmt.Println("server = ",message)
        defer C.free(unsafe.Pointer(cString2)) // Free the allocated C string when done
        result2:=C.decodeF1apGetCellIds(cString2)
        cellList:=make([]string, result2.size)