add: ue event from AMF

This commit is contained in:
2024-01-22 17:12:36 +08:00
parent bc2404be31
commit 96349b71bc
6 changed files with 143 additions and 0 deletions

View File

@@ -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;

View File

@@ -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;

65
features/event/event.go Normal file
View File

@@ -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)
}

View File

@@ -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)

View File

@@ -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, "")

View File

@@ -55,4 +55,5 @@ user
user_menu
user_role
cdr_event
ue_event
#end