From 96349b71bcd1f1fc18b30d81f25b5d3b70db5213 Mon Sep 17 00:00:00 2001 From: simonzhangsz Date: Mon, 22 Jan 2024 17:12:36 +0800 Subject: [PATCH] add: ue event from AMF --- database/upgrade/upg_ue_event.sql | 36 +++++++++++++++++ database/upgvue3/upg_ue_event.sql | 36 +++++++++++++++++ features/event/event.go | 65 +++++++++++++++++++++++++++++++ lib/routes/routes.go | 3 ++ restagent/restagent.go | 2 + tools/misc/tables_s.lst | 1 + 6 files changed, 143 insertions(+) create mode 100644 database/upgrade/upg_ue_event.sql create mode 100644 database/upgvue3/upg_ue_event.sql create mode 100644 features/event/event.go diff --git a/database/upgrade/upg_ue_event.sql b/database/upgrade/upg_ue_event.sql new file mode 100644 index 00000000..b60f7382 --- /dev/null +++ b/database/upgrade/upg_ue_event.sql @@ -0,0 +1,36 @@ +/* + Navicat Premium Data Transfer + + Source Server : local_mariadb + Source Server Type : MariaDB + Source Server Version : 100338 (10.3.38-MariaDB) + Source Host : localhost:33066 + Source Schema : omc_db + + Target Server Type : MariaDB + Target Server Version : 100338 (10.3.38-MariaDB) + File Encoding : 65001 + + Date: 22/01/2024 17:03:39 +*/ + +SET NAMES utf8mb4; +SET FOREIGN_KEY_CHECKS = 0; + +-- ---------------------------- +-- Table structure for ue_event +-- ---------------------------- +CREATE TABLE IF NOT EXISTS `ue_event` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `ne_type` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `ne_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `rm_uid` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `timestamp` int(11) NULL DEFAULT NULL, + `event_type` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT 'auth-result/detach/cm-state', + `event_json` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `created_at` datetime NULL DEFAULT current_timestamp(), + PRIMARY KEY (`id`) USING BTREE, + INDEX `id`(`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 5 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic; + +SET FOREIGN_KEY_CHECKS = 1; diff --git a/database/upgvue3/upg_ue_event.sql b/database/upgvue3/upg_ue_event.sql new file mode 100644 index 00000000..b60f7382 --- /dev/null +++ b/database/upgvue3/upg_ue_event.sql @@ -0,0 +1,36 @@ +/* + Navicat Premium Data Transfer + + Source Server : local_mariadb + Source Server Type : MariaDB + Source Server Version : 100338 (10.3.38-MariaDB) + Source Host : localhost:33066 + Source Schema : omc_db + + Target Server Type : MariaDB + Target Server Version : 100338 (10.3.38-MariaDB) + File Encoding : 65001 + + Date: 22/01/2024 17:03:39 +*/ + +SET NAMES utf8mb4; +SET FOREIGN_KEY_CHECKS = 0; + +-- ---------------------------- +-- Table structure for ue_event +-- ---------------------------- +CREATE TABLE IF NOT EXISTS `ue_event` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `ne_type` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `ne_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `rm_uid` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `timestamp` int(11) NULL DEFAULT NULL, + `event_type` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT 'auth-result/detach/cm-state', + `event_json` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `created_at` datetime NULL DEFAULT current_timestamp(), + PRIMARY KEY (`id`) USING BTREE, + INDEX `id`(`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 5 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic; + +SET FOREIGN_KEY_CHECKS = 1; diff --git a/features/event/event.go b/features/event/event.go new file mode 100644 index 00000000..d10e98d3 --- /dev/null +++ b/features/event/event.go @@ -0,0 +1,65 @@ +package event + +import ( + "encoding/json" + "io" + "time" + + "ems.agt/lib/dborm" + "ems.agt/lib/global" + "ems.agt/lib/log" + "ems.agt/lib/services" + "github.com/gin-gonic/gin" +) + +var ( + UriUEEvent = "/upload-ue/v1/:eventType" +) + +type UEEvent struct { + NeType string `json:"-" xorm:"ne_type"` + NeName string `json:"-" xorm:"ne_name"` + RmUID string `json:"-" xorm:"rm_uid"` + Timestamp int `json:"-" xorm:"timestamp"` + EventType string `json:"-" xorm:"event_type"` + EventJson map[string]any `json:"-" xorm:"event_json"` +} + +func PostUEEventFromAMF(c *gin.Context) { + log.Info("PostUEEventFromAMF processing... ") + + body, err := io.ReadAll(io.LimitReader(c.Request.Body, global.RequestBodyMaxLen)) + if err != nil { + log.Error("Faile to io.ReadAll: ", err) + services.ResponseNotFound404UriNotExist(c.Writer, c.Request) + return + } + + //vars := mux.Vars(c.Request) + eventType, ok := c.Params.Get("eventType") + if !ok || eventType == "" { + log.Error("eventType is empty") + services.ResponseNotFound404UriNotExist(c.Writer, c.Request) + return + } + ueEvent := new(UEEvent) + err = json.Unmarshal(body, &ueEvent.EventJson) + if err != nil { + log.Error("Failed to Unmarshal ueEvent:", err) + services.ResponseInternalServerError500ProcessError(c.Writer, err) + return + } + ueEvent.NeType = "AMF" + ueEvent.Timestamp = int(time.Now().Unix()) + ueEvent.EventType = eventType + log.Trace("ueEvent:", ueEvent) + + affected, err := dborm.XormInsertTableOne("ue_event", ueEvent) + if err != nil && affected <= 0 { + log.Error("Failed to insert ue_event:", err) + services.ResponseInternalServerError500ProcessError(c.Writer, err) + return + } + + services.ResponseStatusOK204NoContent(c.Writer) +} diff --git a/lib/routes/routes.go b/lib/routes/routes.go index a4806494..d2c94e3d 100644 --- a/lib/routes/routes.go +++ b/lib/routes/routes.go @@ -303,6 +303,9 @@ func init() { Register("POST", cdr.UriCDREvent, cdr.PostCDREventFromNF, nil) Register("POST", cdr.CustomUriCDREvent, cdr.PostCDREventFromNF, nil) + // UE event + //Register("POST", event.UriUEEvent, event.PostUEEventFromAMF, nil) + // 进程网络 Register("GET", psnet.UriWs, psnet.ProcessWs, nil) Register("POST", psnet.UriStop, psnet.StopProcess, nil) diff --git a/restagent/restagent.go b/restagent/restagent.go index 26be20ec..4a3fbb35 100644 --- a/restagent/restagent.go +++ b/restagent/restagent.go @@ -10,6 +10,7 @@ import ( "strings" "ems.agt/features/dbrest" + "ems.agt/features/event" "ems.agt/features/fm" "ems.agt/features/lm" "ems.agt/features/pm" @@ -185,6 +186,7 @@ func main() { uriGroup := app.Group(config.UriPrefix) uriGroup.Use(libSession.SessionHeader()) uriGroup.Any("/*any", gin.WrapH(routes.NewRouter())) + app.POST(event.UriUEEvent, event.PostUEEventFromAMF) // 开启监控采集 // monitor.StartMonitor(false, "") diff --git a/tools/misc/tables_s.lst b/tools/misc/tables_s.lst index bad3edd3..bd9747f1 100644 --- a/tools/misc/tables_s.lst +++ b/tools/misc/tables_s.lst @@ -55,4 +55,5 @@ user user_menu user_role cdr_event +ue_event #end \ No newline at end of file