Merge remote-tracking branch 'origin/main' into lichang

This commit is contained in:
TsMask
2024-05-17 18:07:42 +08:00
28 changed files with 1042 additions and 359 deletions

View File

@@ -1,7 +1,7 @@
# Makefile for rest agent project # Makefile for rest agent project
PROJECT = OMC PROJECT = OMC
VERSION = 2.2405.1 VERSION = 2.2405.2
PLATFORM = amd64 PLATFORM = amd64
ARMPLATFORM = aarch64 ARMPLATFORM = aarch64
BUILDDIR = ../../build BUILDDIR = ../../build

View File

@@ -839,7 +839,7 @@
"end": "(Number of results = %d)\n\n" "end": "(Number of results = %d)\n\n"
} }
"northbound_cm": { "nbi_cm": {
"retFmt": "GetDB", "retFmt": "GetDB",
"retMsg": "RetCode = %d operation succeeded\n\n", "retMsg": "RetCode = %d operation succeeded\n\n",
"errMsg": "ErrorCode = %d operation failed: %s\n\n", "errMsg": "ErrorCode = %d operation failed: %s\n\n",

View File

@@ -211,18 +211,18 @@ func XormGetNorthboundPm(date string, index int, neType string, pms *[]Northboun
log.Debug("XormGetNorthboundPm processing... ") log.Debug("XormGetNorthboundPm processing... ")
pm := new(NorthboundPm) pm := new(NorthboundPm)
rows, err := dbClient.xEngine.Table("northbound_pm"). rows, err := dbClient.xEngine.Table("nbi_pm").
Where("`ne_type` = ? AND `date` = ? AND `index` = ?", neType, date, index). Where("`ne_type` = ? AND `date` = ? AND `index` = ?", neType, date, index).
Rows(pm) Rows(pm)
if err != nil { if err != nil {
log.Error("Failed to get table northbound_pm from database:", err) log.Error("Failed to get table nbi_pm from database:", err)
return nil, err return nil, err
} }
defer rows.Close() defer rows.Close()
for rows.Next() { for rows.Next() {
err := rows.Scan(pm) err := rows.Scan(pm)
if err != nil { if err != nil {
log.Error("Failed to get table northbound_pm from database:", err) log.Error("Failed to get table nbi_pm from database:", err)
return nil, err return nil, err
} }
*pms = append(*pms, *pm) *pms = append(*pms, *pm)

View File

@@ -82,7 +82,7 @@ func (t *TaskFunc) GenNFPMXmlFile(neType string) error {
var pmResults []NorthboundPm var pmResults []NorthboundPm
_, err = XormGetNorthboundPm(date, index, neType, &pmResults) _, err = XormGetNorthboundPm(date, index, neType, &pmResults)
if err != nil { if err != nil {
log.Error("Failed to get northbound_pm:", err) log.Error("Failed to get nbi_pm:", err)
return err return err
} }

View File

@@ -1,7 +1,7 @@
# Makefile for OMC-OMC-crontask project # Makefile for OMC-OMC-crontask project
PROJECT = OMC PROJECT = OMC
VERSION = 2.2405.1 VERSION = 2.2405.2
LIBDIR = be.ems/lib LIBDIR = be.ems/lib
BINNAME = crontask BINNAME = crontask

View File

@@ -1,7 +1,7 @@
# Makefile for rest agent project # Makefile for rest agent project
PROJECT = OMC PROJECT = OMC
VERSION = 2.2405.1 VERSION = 2.2405.2
RelDate = `date +%Y%m%d` RelDate = `date +%Y%m%d`
Release = $(RelDate) Release = $(RelDate)
RelVer = $(VERSION)-$(RelDate) RelVer = $(VERSION)-$(RelDate)

View File

@@ -11,7 +11,7 @@
Target Server Version : 100338 (10.3.38-MariaDB) Target Server Version : 100338 (10.3.38-MariaDB)
File Encoding : 65001 File Encoding : 65001
Date: 19/04/2024 15:26:46 Date: 14/05/2024 11:57:19
*/ */
SET NAMES utf8mb4; SET NAMES utf8mb4;

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -1,53 +1,81 @@
-- MariaDB dump 10.19 Distrib 10.6.16-MariaDB, for debian-linux-gnu (x86_64) /*
-- Navicat Premium Data Transfer
-- Host: 192.168.2.219 Database: omc_db
-- ------------------------------------------------------
-- Server version 10.3.38-MariaDB
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; Source Server : local_mariadb
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; Source Server Type : MariaDB
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; Source Server Version : 100338 (10.3.38-MariaDB)
/*!40101 SET NAMES utf8mb4 */; Source Host : localhost:33066
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */; Source Schema : omc_db
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
-- Target Server Type : MariaDB
-- Table structure for table `trace_info` Target Server Version : 100338 (10.3.38-MariaDB)
-- File Encoding : 65001
Date: 14/05/2024 15:00:46
*/
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for trace_info
-- ----------------------------
DROP TABLE IF EXISTS `trace_info`; DROP TABLE IF EXISTS `trace_info`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `trace_info` ( CREATE TABLE `trace_info` (
`ne_type` varchar(32) NOT NULL, `ne_type` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
`interface` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL, `interface` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL,
`message_type` tinyint(4) NOT NULL, `message_type` tinyint(4) NOT NULL,
`message_title` varchar(64) DEFAULT NULL, `message_title` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
PRIMARY KEY (`ne_type`,`interface`,`message_type`) USING BTREE PRIMARY KEY (`ne_type`, `interface`, `message_type`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC; ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;
/*!40101 SET character_set_client = @saved_cs_client */;
-- -- ----------------------------
-- Dumping data for table `trace_info` -- Records of trace_info
-- -- ----------------------------
INSERT INTO `trace_info` VALUES ('AMF', 'N1', 1, NULL);
INSERT INTO `trace_info` VALUES ('AMF', 'N11', 1, NULL);
INSERT INTO `trace_info` VALUES ('AMF', 'N12', 1, NULL);
INSERT INTO `trace_info` VALUES ('AMF', 'N14', 1, NULL);
INSERT INTO `trace_info` VALUES ('AMF', 'N15', 1, NULL);
INSERT INTO `trace_info` VALUES ('AMF', 'N2', 1, NULL);
INSERT INTO `trace_info` VALUES ('AMF', 'N8', 1, NULL);
INSERT INTO `trace_info` VALUES ('AUSF', 'N12', 1, 'Nausf_AUTH_Post ue-authentications');
INSERT INTO `trace_info` VALUES ('AUSF', 'N12', 2, 'Nausf_AUTH_Put 5g-aka-confirmation');
INSERT INTO `trace_info` VALUES ('AUSF', 'N12', 3, 'Nausf_AUTH_Delete 5g-aka-confirmation');
INSERT INTO `trace_info` VALUES ('AUSF', 'N12', 4, 'Nausf_AUTH_Post eap-session');
INSERT INTO `trace_info` VALUES ('AUSF', 'N12', 5, 'Nausf_AUTH_Delete eap-session');
INSERT INTO `trace_info` VALUES ('SMF', 'N10', 1, NULL);
INSERT INTO `trace_info` VALUES ('SMF', 'N11', 1, NULL);
INSERT INTO `trace_info` VALUES ('SMF', 'N4', 1, NULL);
INSERT INTO `trace_info` VALUES ('SMF', 'N7', 1, NULL);
INSERT INTO `trace_info` VALUES ('UDM', 'N10', 1, 'Nudm_SDM_Get sm-data');
INSERT INTO `trace_info` VALUES ('UDM', 'N10', 2, 'Nudm_SDM_Post sdm-subscriptions');
INSERT INTO `trace_info` VALUES ('UDM', 'N10', 3, 'Nudm_SDM_Patch sdm-subscriptions');
INSERT INTO `trace_info` VALUES ('UDM', 'N10', 4, 'Nudm_SDM_Delete sdm-subscriptions');
INSERT INTO `trace_info` VALUES ('UDM', 'N10', 5, 'Nudm_SDM_Get id-translation-result');
INSERT INTO `trace_info` VALUES ('UDM', 'N10', 6, 'Nudm_UECM_Get smf-registrations');
INSERT INTO `trace_info` VALUES ('UDM', 'N10', 7, 'Nudm_UECM_Put smf-registrations');
INSERT INTO `trace_info` VALUES ('UDM', 'N10', 8, 'Nudm_UECM_Patch smf-3gpp-access');
INSERT INTO `trace_info` VALUES ('UDM', 'N10', 9, 'Nudm_UECM_Get smf-3gpp-access');
INSERT INTO `trace_info` VALUES ('UDM', 'N10', 10, 'Nudm_UECM_Delete smf-3gpp-access');
INSERT INTO `trace_info` VALUES ('UDM', 'N13', 1, 'Nudm_UEAU_Post generate-auth-data');
INSERT INTO `trace_info` VALUES ('UDM', 'N13', 2, 'Nudm_UEAU_Post auth-events');
INSERT INTO `trace_info` VALUES ('UDM', 'N8', 1, 'Nudm_SDM_Get supi');
INSERT INTO `trace_info` VALUES ('UDM', 'N8', 2, 'Nudm_SDM_Get nssai');
INSERT INTO `trace_info` VALUES ('UDM', 'N8', 3, 'Nudm_SDM_Get am-data');
INSERT INTO `trace_info` VALUES ('UDM', 'N8', 4, 'Nudm_SDM_Put am-data cag-ack');
INSERT INTO `trace_info` VALUES ('UDM', 'N8', 5, 'Nudm_SDM_Get smf-select-data');
INSERT INTO `trace_info` VALUES ('UDM', 'N8', 6, 'Nudm_SDM_Post sdm-subscriptions');
INSERT INTO `trace_info` VALUES ('UDM', 'N8', 7, 'Nudm_SDM_Patch sdm-subscriptions');
INSERT INTO `trace_info` VALUES ('UDM', 'N8', 8, 'Nudm_SDM_Delete sdm-subscriptions');
INSERT INTO `trace_info` VALUES ('UDM', 'N8', 9, 'Nudm_SDM_Get id-translation-result');
INSERT INTO `trace_info` VALUES ('UDM', 'N8', 10, 'Nudm_UECM_Put amf-3gpp-access');
INSERT INTO `trace_info` VALUES ('UDM', 'N8', 11, 'Nudm_UECM_Patch amf-3gpp-access');
INSERT INTO `trace_info` VALUES ('UDM', 'N8', 12, 'Nudm_UECM_Get amf-3gpp-access');
INSERT INTO `trace_info` VALUES ('UDM', 'N8', 13, 'Namf_Callback Deregistraion');
INSERT INTO `trace_info` VALUES ('UPF', 'N3', 1, NULL);
INSERT INTO `trace_info` VALUES ('UPF', 'N4', 1, NULL);
INSERT INTO `trace_info` VALUES ('UPF', 'N6', 1, NULL);
INSERT INTO `trace_info` VALUES ('UPF', 'N9', 1, NULL);
LOCK TABLES `trace_info` WRITE; SET FOREIGN_KEY_CHECKS = 1;
/*!40000 ALTER TABLE `trace_info` DISABLE KEYS */;
INSERT INTO `trace_info` VALUES ('AMF','N1',1,NULL),('AMF','N11',1,NULL),('AMF','N12',1,NULL),('AMF','N14',1,NULL),('AMF','N15',1,NULL),('AMF','N2',1,NULL),('AMF','N8',1,NULL),('AUSF','N12',1,'Nausf_AUTH_Post ue-authentications'),('AUSF','N12',2,'Nausf_AUTH_Put 5g-aka-confirmation'),('AUSF','N12',3,'Nausf_AUTH_Delete 5g-aka-confirmation'),('AUSF','N12',4,'Nausf_AUTH_Post eap-session'),('AUSF','N12',5,'Nausf_AUTH_Delete eap-session'),('SMF','N10',1,NULL),('SMF','N11',1,NULL),('SMF','N4',1,NULL),('SMF','N7',1,NULL),('UDM','N10',1,'Nudm_SDM_Get sm-data'),('UDM','N10',2,'Nudm_SDM_Post sdm-subscriptions'),('UDM','N10',3,'Nudm_SDM_Patch sdm-subscriptions'),('UDM','N10',4,'Nudm_SDM_Delete sdm-subscriptions'),('UDM','N10',5,'Nudm_SDM_Get id-translation-result'),('UDM','N10',6,'Nudm_UECM_Get smf-registrations'),('UDM','N10',7,'Nudm_UECM_Put smf-registrations'),('UDM','N10',8,'Nudm_UECM_Patch smf-3gpp-access'),('UDM','N10',9,'Nudm_UECM_Get smf-3gpp-access'),('UDM','N10',10,'Nudm_UECM_Delete smf-3gpp-access'),('UDM','N13',1,'Nudm_UEAU_Post generate-auth-data'),('UDM','N13',2,'Nudm_UEAU_Post auth-events'),('UDM','N8',1,'Nudm_SDM_Get supi'),('UDM','N8',2,'Nudm_SDM_Get nssai'),('UDM','N8',3,'Nudm_SDM_Get am-data'),('UDM','N8',4,'Nudm_SDM_Put am-data cag-ack'),('UDM','N8',5,'Nudm_SDM_Get smf-select-data'),('UDM','N8',6,'Nudm_SDM_Post sdm-subscriptions'),('UDM','N8',7,'Nudm_SDM_Patch sdm-subscriptions'),('UDM','N8',8,'Nudm_SDM_Delete sdm-subscriptions'),('UDM','N8',9,'Nudm_SDM_Get id-translation-result'),('UDM','N8',10,'Nudm_UECM_Put amf-3gpp-access'),('UDM','N8',11,'Nudm_UECM_Patch amf-3gpp-access'),('UDM','N8',12,'Nudm_UECM_Get amf-3gpp-access'),('UDM','N8',13,'Namf_Callback Deregistraion'),('UPF','N3',1,NULL),('UPF','N4',1,NULL),('UPF','N6',1,NULL),('UPF','N9',1,NULL);
/*!40000 ALTER TABLE `trace_info` ENABLE KEYS */;
UNLOCK TABLES;
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
-- Dump completed on 2024-03-06 17:27:05

View File

@@ -70,8 +70,8 @@ type KpiData struct {
NEName string `json:"neName" xorm:"ne_name"` NEName string `json:"neName" xorm:"ne_name"`
RmUid string `json:"rmUid" xorm:"rm_uid"` RmUid string `json:"rmUid" xorm:"rm_uid"`
Date string `json:"date" xorm:"date"` Date string `json:"date" xorm:"date"`
StartTime time.Time `json:"startTime" xorm:"start_time"` StartTime string `json:"startTime" xorm:"start_time"`
EndTime time.Time `json:"endTime" xorm:"end_time"` EndTime string `json:"endTime" xorm:"end_time"`
Index int `json:"index" xorm:"index"` Index int `json:"index" xorm:"index"`
Granularity int8 `json:"granularity" xorm:"granularity"` Granularity int8 `json:"granularity" xorm:"granularity"`
KPIValues []KPIVal `json:"kpiValues" xorm:"json 'kpi_values'"` KPIValues []KPIVal `json:"kpiValues" xorm:"json 'kpi_values'"`
@@ -190,7 +190,7 @@ func GetDateTimeFromTimeString(fmtString string, timeString string) string {
return t.Format(global.DateTime) return t.Format(global.DateTime)
} }
// process alarm post message from NFs // process KPI report post message from NFs
func PostKPIReportFromNF(w http.ResponseWriter, r *http.Request) { func PostKPIReportFromNF(w http.ResponseWriter, r *http.Request) {
log.Debug("PostKPIReportFromNF processing... ") log.Debug("PostKPIReportFromNF processing... ")
@@ -202,6 +202,91 @@ func PostKPIReportFromNF(w http.ResponseWriter, r *http.Request) {
return return
} }
// body, err := io.ReadAll(io.LimitReader(r.Body, global.RequestBodyMaxLen))
body, err := io.ReadAll(io.LimitReader(r.Body, global.RequestBodyMaxLen))
if err != nil {
log.Error("Faile to io.ReadAll: ", err)
services.ResponseNotFound404UriNotExist(w, r)
return
}
//log.Trace("Request body:", string(body))
kpiReport := new(KpiReport)
_ = json.Unmarshal(body, &kpiReport)
//log.Trace("kpiReport:", kpiReport)
layout := time.RFC3339Nano
//kpiDate := GetDateFromTimeString(layout, kpiReport.Task.Period.StartTime)
kpiIndex, _ := strconv.Atoi(vars["index"])
startTime := global.GetFmtTimeString(layout, kpiReport.Task.Period.StartTime, time.DateTime)
endTime := global.GetFmtTimeString(layout, kpiReport.Task.Period.EndTime, time.DateTime)
// get time granularity from startTime and endTime
seconds, _ := global.GetSecondDuration(startTime, endTime)
var granularity int8 = 60
if seconds != 0 && seconds <= math.MaxInt8 && seconds >= math.MinInt8 {
granularity = int8(seconds)
}
// 黄金指标事件对象
kpiEvent := map[string]any{
// kip_id ...
"neType": kpiReport.Task.NE.NeType,
"neName": kpiReport.Task.NE.NEName,
"startIndex": kpiIndex,
"timeGroup": startTime,
}
// insert into new kpi_report_xxx table
kpiData := new(KpiData)
kpiData.Date = startTime
kpiData.Index = kpiIndex
//stime, _ := time.ParseInLocation(time.RFC3339Nano, kpiReport.Task.Period.StartTime, time.Local)
//etime, _ := time.ParseInLocation(time.RFC3339Nano, kpiReport.Task.Period.EndTime, time.Local)
kpiData.StartTime = startTime
kpiData.EndTime = endTime
kpiData.Granularity = granularity
kpiData.NEName = kpiReport.Task.NE.NEName
kpiData.NEType = kpiReport.Task.NE.NeType
kpiData.RmUid = kpiReport.Task.NE.RmUID
kpiVal := new(KPIVal)
kpiData.CreatedAt = time.Now().UnixMilli()
for _, k := range kpiReport.Task.NE.KPIs {
kpiEvent[k.KPIID] = k.Value // kip_id
kpiVal.KPIID = k.KPIID
kpiVal.Value = int64(k.Value)
kpiVal.Err = k.Err
kpiData.KPIValues = append(kpiData.KPIValues, *kpiVal)
}
// insert kpi_report table, no session
tableName := "kpi_report_" + strings.ToLower(kpiReport.Task.NE.NeType)
affected, err := xEngine.Table(tableName).Insert(kpiData)
if err != nil && affected <= 0 {
log.Errorf("Failed to insert %s:%v", tableName, err)
services.ResponseInternalServerError500ProcessError(w, err)
return
}
// 推送到ws订阅组
wsService.NewWSSendImpl.ByGroupID(wsService.GROUP_KPI, kpiEvent)
if kpiReport.Task.NE.NeType == "UPF" {
wsService.NewWSSendImpl.ByGroupID(wsService.GROUP_KPI_UPF, kpiEvent)
}
services.ResponseStatusOK204NoContent(w)
}
// post kpi report from NEs, insert insto gold_kpi table, discard...
func PostGoldKPIFromNF(w http.ResponseWriter, r *http.Request) {
log.Debug("PostKPIReportFromNF processing... ")
vars := mux.Vars(r)
apiVer := vars["apiVersion"]
if apiVer != global.ApiVersionV1 {
log.Error("Uri api version is invalid. apiVersion:", apiVer)
services.ResponseNotFound404UriNotExist(w, r)
return
}
// body, err := io.ReadAll(io.LimitReader(r.Body, global.RequestBodyMaxLen)) // body, err := io.ReadAll(io.LimitReader(r.Body, global.RequestBodyMaxLen))
body, err := io.ReadAll(io.LimitReader(r.Body, global.RequestBodyMaxLen)) body, err := io.ReadAll(io.LimitReader(r.Body, global.RequestBodyMaxLen))
if err != nil { if err != nil {
@@ -244,12 +329,10 @@ func PostKPIReportFromNF(w http.ResponseWriter, r *http.Request) {
kpiData := new(KpiData) kpiData := new(KpiData)
kpiData.Date = goldKpi.Date kpiData.Date = goldKpi.Date
kpiData.Index = goldKpi.Index kpiData.Index = goldKpi.Index
st, _ := time.ParseInLocation(time.RFC3339Nano, kpiReport.Task.Period.StartTime, time.Local) //st, _ := time.ParseInLocation(time.RFC3339Nano, kpiReport.Task.Period.StartTime, time.Local)
et, _ := time.ParseInLocation(time.RFC3339Nano, kpiReport.Task.Period.EndTime, time.Local) //et, _ := time.ParseInLocation(time.RFC3339Nano, kpiReport.Task.Period.EndTime, time.Local)
// kpiData.StartTime = goldKpi.StartTime kpiData.StartTime = goldKpi.StartTime
// kpiData.EndTime = goldKpi.EndTime kpiData.EndTime = goldKpi.EndTime
kpiData.StartTime = st
kpiData.EndTime = et
kpiData.Granularity = goldKpi.Granularity kpiData.Granularity = goldKpi.Granularity
kpiData.NEName = goldKpi.NEName kpiData.NEName = goldKpi.NEName
kpiData.NEType = goldKpi.NEType kpiData.NEType = goldKpi.NEType
@@ -969,9 +1052,9 @@ func PostMeasurementFromNF(w http.ResponseWriter, r *http.Request) {
layout := time.RFC3339 layout := time.RFC3339
measurement.Date = GetDateFromTimeString(layout, measurement.StartTime) measurement.Date = GetDateFromTimeString(layout, measurement.StartTime)
measurement.StartTime = GetDateTimeFromTimeString(layout, measurement.StartTime) measurement.StartTime = GetDateTimeFromTimeString(layout, measurement.StartTime)
affected, err := session.Table("northbound_pm").Insert(measurement) affected, err := session.Table("nbi_pm").Insert(measurement)
if err != nil && affected <= 0 { if err != nil && affected <= 0 {
log.Error("Failed to insert northbound_pm:", err) log.Error("Failed to insert nbi_pm:", err)
services.ResponseInternalServerError500DatabaseOperationFailed(w) services.ResponseInternalServerError500DatabaseOperationFailed(w)
return return
} }
@@ -1052,9 +1135,9 @@ func GetMeasurementFromNF(w http.ResponseWriter, r *http.Request) {
layout := time.RFC3339 layout := time.RFC3339
measurement.Date = GetDateFromTimeString(layout, measurement.StartTime) measurement.Date = GetDateFromTimeString(layout, measurement.StartTime)
measurement.StartTime = GetDateTimeFromTimeString(layout, measurement.StartTime) measurement.StartTime = GetDateTimeFromTimeString(layout, measurement.StartTime)
affected, err := session.Table("northbound_pm").Insert(measurement) affected, err := session.Table("nbi_pm").Insert(measurement)
if err != nil && affected <= 0 { if err != nil && affected <= 0 {
log.Error("Failed to insert northbound_pm:", err) log.Error("Failed to insert nbi_pm:", err)
services.ResponseInternalServerError500DatabaseOperationFailed(w) services.ResponseInternalServerError500DatabaseOperationFailed(w)
return return
} }

View File

@@ -1779,21 +1779,21 @@ func XormGetNorthboundCm(neType string, cmResults *[]NorthboundCm) error {
log.Info("XormGetNorthboundCm processing... ") log.Info("XormGetNorthboundCm processing... ")
cmResult := new(NorthboundCm) cmResult := new(NorthboundCm)
rows, err := xEngine.Table("northbound_cm"). rows, err := xEngine.Table("nbi_cm").
Distinct("object_type"). Distinct("object_type").
Where("`ne_type` = ?", neType). Where("`ne_type` = ?", neType).
Desc("timestamp"). Desc("timestamp").
Cols("*"). Cols("*").
Rows(cmResult) Rows(cmResult)
if err != nil { if err != nil {
log.Error("Failed to get table northbound_cm:", err) log.Error("Failed to get table nbi_cm:", err)
return err return err
} }
defer rows.Close() defer rows.Close()
for rows.Next() { for rows.Next() {
err := rows.Scan(cmResult) err := rows.Scan(cmResult)
if err != nil { if err != nil {
log.Error("Failed to get table northbound_cm:", err) log.Error("Failed to get table nbi_cm:", err)
return err return err
} }
*cmResults = append(*cmResults, *cmResult) *cmResults = append(*cmResults, *cmResult)
@@ -1805,14 +1805,14 @@ func XormGetNorthboundCmLatestObject(neType, neID, objectType string) (*Northbou
log.Info("XormGetNorthboundCmLatestObject processing... ") log.Info("XormGetNorthboundCmLatestObject processing... ")
cmResult := new(NorthboundCm) cmResult := new(NorthboundCm)
_, err := xEngine.Table("northbound_cm"). _, err := xEngine.Table("nbi_cm").
Where("`ne_type`=? and `ne_id`=? and `object_type`=?", neType, neID, objectType). Where("`ne_type`=? and `ne_id`=? and `object_type`=?", neType, neID, objectType).
Desc("timestamp"). Desc("timestamp").
Cols("*"). Cols("*").
Limit(1). Limit(1).
Get(cmResult) Get(cmResult)
if err != nil { if err != nil {
log.Error("Failed to get table northbound_cm:", err) log.Error("Failed to get table nbi_cm:", err)
return nil, err return nil, err
} }

View File

@@ -3,7 +3,7 @@
ProjectL = omc ProjectL = omc
ProjectU = OMC ProjectU = OMC
PROJECT = $(ProjectL) PROJECT = $(ProjectL)
VERSION = 2.2405.1 VERSION = 2.2405.2
RelDate = `date +%Y%m%d` RelDate = `date +%Y%m%d`
Release = $(RelDate) Release = $(RelDate)
RelVer = $(VERSION)-$(RelDate) RelVer = $(VERSION)-$(RelDate)

View File

@@ -2,7 +2,7 @@
ProcList="restagent crontask sshsvc captrace data2html" ProcList="restagent crontask sshsvc captrace data2html"
ProjectL=omc ProjectL=omc
VERSION=2.2405.1 VERSION=2.2405.2
RelDate=`date +%Y%m%d` RelDate=`date +%Y%m%d`
Release=${RelDate} Release=${RelDate}
RelVer=${VERSION}-${RelDate} RelVer=${VERSION}-${RelDate}

View File

@@ -20,6 +20,11 @@ type YamlConfig struct {
Count int `yaml:"count"` Count int `yaml:"count"`
} `yaml:"logger"` } `yaml:"logger"`
Pprof struct {
Enabled bool `yaml:"enabled"`
Addr string `yaml:"addr"`
} `yaml:"pprof"`
// Rest []struct { // Rest []struct {
// IPv4 string `yaml:"ipv4"` // IPv4 string `yaml:"ipv4"`
// IPv6 string `yaml:"ipv6"` // IPv6 string `yaml:"ipv6"`

View File

@@ -2,12 +2,17 @@
# level: /trace/debug/info/warn/error/fatal, default: debug # level: /trace/debug/info/warn/error/fatal, default: debug
# duration: rotation time with xx hours, example: 1/12/24 hours # duration: rotation time with xx hours, example: 1/12/24 hours
# count: rotation count of log, default is 30 rotation # count: rotation count of log, default is 30 rotation
# pprof: false(default)/true to disable/enable pprof
logger: logger:
file: d:/local.git/be.ems/restagent/log/restagent.log file: d:/local.git/be.ems/restagent/log/restagent.log
level: trace level: trace
duration: 24 duration: 24
count: 2 count: 2
pprof:
enabled: true
addr: :36060
# rest agent listen ipv4/v6 and port, support multiple routines # rest agent listen ipv4/v6 and port, support multiple routines
# ip: 0.0.0.0 or ::0, support IPv4/v6 # ip: 0.0.0.0 or ::0, support IPv4/v6
# clientAuthType: 0:NoClientCert (default), 1:RequestClientCert, 2:RequireAnyClientCert, # clientAuthType: 0:NoClientCert (default), 1:RequestClientCert, 2:RequireAnyClientCert,

View File

@@ -1,7 +1,7 @@
# Makefile for rest agent project # Makefile for rest agent project
PROJECT = OMC PROJECT = OMC
VERSION = 2.2405.1 VERSION = 2.2405.2
PLATFORM = amd64 PLATFORM = amd64
ARMPLATFORM = aarch64 ARMPLATFORM = aarch64
BUILDDIR = ../../build BUILDDIR = ../../build

View File

@@ -9,6 +9,8 @@ import (
"strconv" "strconv"
"strings" "strings"
_ "net/http/pprof"
"be.ems/features/dbrest" "be.ems/features/dbrest"
"be.ems/features/event" "be.ems/features/event"
"be.ems/features/fm" "be.ems/features/fm"
@@ -185,12 +187,20 @@ func HttpListenWebServer(addr string) {
} }
func main() { func main() {
// src 配置中心初始加载 // src 配置中心初始加载
src.ConfigurationInit() src.ConfigurationInit()
app := src.AppEngine() app := src.AppEngine()
conf := config.GetYamlConfig() conf := config.GetYamlConfig()
if conf.Pprof.Enabled {
// 启用pprof HTTP服务
go func() {
fmt.Println(http.ListenAndServe(conf.Pprof.Addr, nil))
}()
}
log.InitLogger(conf.Logger.File, conf.Logger.Duration, conf.Logger.Count, "omc:restagent", config.GetLogLevel()) log.InitLogger(conf.Logger.File, conf.Logger.Duration, conf.Logger.Count, "omc:restagent", config.GetLogLevel())
fmt.Printf("OMC restagent version: %s\n", global.Version) fmt.Printf("OMC restagent version: %s\n", global.Version)
log.Infof("========================= OMC restagent startup =========================") log.Infof("========================= OMC restagent startup =========================")

View File

@@ -1,7 +1,7 @@
# 项目信息 # 项目信息
framework: framework:
name: "CN EMS" name: "CN EMS"
version: "2.2405.1" version: "2.2405.2"
# 应用服务配置 # 应用服务配置
server: server:

View File

@@ -19,6 +19,8 @@ type CDREventQuery struct {
NeID string `json:"neId" form:"neId" binding:"required"` NeID string `json:"neId" form:"neId" binding:"required"`
RmUID string `json:"rmUID" form:"rmUID"` RmUID string `json:"rmUID" form:"rmUID"`
RecordType string `json:"recordType" form:"recordType"` // 记录行为 MOC MTC MOSM MTSM RecordType string `json:"recordType" form:"recordType"` // 记录行为 MOC MTC MOSM MTSM
CallerParty string `json:"callerParty" form:"callerParty"` // 主叫号码
CalledParty string `json:"calledParty" form:"calledParty"` // 被叫号码
StartTime string `json:"startTime" form:"startTime"` StartTime string `json:"startTime" form:"startTime"`
EndTime string `json:"endTime" form:"endTime"` EndTime string `json:"endTime" form:"endTime"`
SortField string `json:"sortField" form:"sortField" binding:"omitempty,oneof=timestamp"` // 排序字段,填写结果字段 SortField string `json:"sortField" form:"sortField" binding:"omitempty,oneof=timestamp"` // 排序字段,填写结果字段

View File

@@ -20,6 +20,7 @@ type UEEventQuery struct {
NeID string `json:"neId" form:"neId" binding:"required"` NeID string `json:"neId" form:"neId" binding:"required"`
RmUID string `json:"rmUID" form:"rmUID"` RmUID string `json:"rmUID" form:"rmUID"`
EventType string `json:"eventType" form:"eventType"` // 事件类型 auth-result detach cm-state EventType string `json:"eventType" form:"eventType"` // 事件类型 auth-result detach cm-state
IMSI string `json:"imsi" form:"imsi"` // imsi
StartTime string `json:"startTime" form:"startTime"` StartTime string `json:"startTime" form:"startTime"`
EndTime string `json:"endTime" form:"endTime"` EndTime string `json:"endTime" form:"endTime"`
SortField string `json:"sortField" form:"sortField" binding:"omitempty,oneof=timestamp"` // 排序字段,填写结果字段 SortField string `json:"sortField" form:"sortField" binding:"omitempty,oneof=timestamp"` // 排序字段,填写结果字段

View File

@@ -63,10 +63,6 @@ func (r *CDREventImpl) SelectPage(querys model.CDREventQuery) map[string]any {
conditions = append(conditions, "rm_uid = ?") conditions = append(conditions, "rm_uid = ?")
params = append(params, querys.RmUID) params = append(params, querys.RmUID)
} }
if querys.RmUID != "" {
conditions = append(conditions, "rm_uid = ?")
params = append(params, querys.RmUID)
}
if querys.StartTime != "" { if querys.StartTime != "" {
conditions = append(conditions, "timestamp >= ?") conditions = append(conditions, "timestamp >= ?")
beginDate := date.ParseStrToDate(querys.StartTime, date.YYYY_MM_DD_HH_MM_SS) beginDate := date.ParseStrToDate(querys.StartTime, date.YYYY_MM_DD_HH_MM_SS)
@@ -77,6 +73,14 @@ func (r *CDREventImpl) SelectPage(querys model.CDREventQuery) map[string]any {
endDate := date.ParseStrToDate(querys.EndTime, date.YYYY_MM_DD_HH_MM_SS) endDate := date.ParseStrToDate(querys.EndTime, date.YYYY_MM_DD_HH_MM_SS)
params = append(params, endDate.Unix()) params = append(params, endDate.Unix())
} }
if querys.CallerParty != "" {
conditions = append(conditions, "JSON_EXTRACT(cdr_json, '$.callerParty') = ?")
params = append(params, querys.CallerParty)
}
if querys.CalledParty != "" {
conditions = append(conditions, "JSON_EXTRACT(cdr_json, '$.calledParty') = ?")
params = append(params, querys.CalledParty)
}
if querys.RecordType != "" { if querys.RecordType != "" {
recordTypes := strings.Split(querys.RecordType, ",") recordTypes := strings.Split(querys.RecordType, ",")
placeholder := repo.KeyPlaceholderByQuery(len(recordTypes)) placeholder := repo.KeyPlaceholderByQuery(len(recordTypes))

View File

@@ -74,6 +74,10 @@ func (r *UEEventImpl) SelectPage(querys model.UEEventQuery) map[string]any {
endDate := date.ParseStrToDate(querys.EndTime, date.YYYY_MM_DD_HH_MM_SS) endDate := date.ParseStrToDate(querys.EndTime, date.YYYY_MM_DD_HH_MM_SS)
params = append(params, endDate.Unix()) params = append(params, endDate.Unix())
} }
if querys.IMSI != "" {
conditions = append(conditions, "JSON_EXTRACT(event_json, '$.imsi') = ?")
params = append(params, querys.IMSI)
}
if querys.EventType != "" { if querys.EventType != "" {
eventTypes := strings.Split(querys.EventType, ",") eventTypes := strings.Split(querys.EventType, ",")
placeholder := repo.KeyPlaceholderByQuery(len(eventTypes)) placeholder := repo.KeyPlaceholderByQuery(len(eventTypes))

View File

@@ -1,7 +1,7 @@
# Makefile for OMC-OMC-crontask project # Makefile for OMC-OMC-crontask project
PROJECT = OMC PROJECT = OMC
VERSION = 2.2405.1 VERSION = 2.2405.2
LIBDIR = be.ems/lib LIBDIR = be.ems/lib
BINNAME = sshsvc BINNAME = sshsvc

View File

@@ -29,8 +29,6 @@ ne_pool
ne_software ne_software
ne_state ne_state
ne_version ne_version
northbound_cm
northbound_pm
operation_log operation_log
param_value param_value
permission permission