\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
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
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
\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
*/\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
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
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
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
\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
}\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