refactor: 重构更新多个文件中的相关调用
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
package event
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"net/http"
|
||||
"strings"
|
||||
@@ -8,12 +9,15 @@ import (
|
||||
|
||||
"be.ems/lib/config"
|
||||
"be.ems/lib/core/ctx"
|
||||
"be.ems/lib/dborm"
|
||||
"be.ems/lib/log"
|
||||
"be.ems/lib/services"
|
||||
|
||||
"be.ems/src/framework/database/db"
|
||||
"be.ems/src/framework/utils/date"
|
||||
"be.ems/src/framework/utils/parse"
|
||||
neService "be.ems/src/modules/network_element/service"
|
||||
wsService "be.ems/src/modules/ws/service"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
)
|
||||
|
||||
@@ -25,21 +29,11 @@ var (
|
||||
CustomUriUEEvent = config.UriPrefix + "/logManagement/v1/elementType/{elementTypeValue}/objectType/ueEvent"
|
||||
)
|
||||
|
||||
type UEEvent struct {
|
||||
NeType string `json:"neType" xorm:"ne_type"`
|
||||
NeName string `json:"neName" xorm:"ne_name"`
|
||||
RmUID string `json:"rmUID" xorm:"rm_uid"`
|
||||
Timestamp int64 `json:"timestamp" xorm:"timestamp"`
|
||||
EventType string `json:"eventType" xorm:"event_type"`
|
||||
EventJson map[string]any `json:"eventJSON" xorm:"event_json"`
|
||||
}
|
||||
|
||||
// 旧AMF上报处理
|
||||
func PostUEEventFromAMF(c *gin.Context) {
|
||||
log.Info("PostUEEventFromAMF processing... ")
|
||||
|
||||
eventType, ok := c.Params.Get("eventType")
|
||||
if !ok || eventType == "" {
|
||||
eventType := c.Param("eventType")
|
||||
if eventType == "" {
|
||||
log.Error("eventType is empty")
|
||||
services.ResponseNotFound404UriNotExist(c.Writer, c.Request)
|
||||
return
|
||||
@@ -51,21 +45,45 @@ func PostUEEventFromAMF(c *gin.Context) {
|
||||
return
|
||||
}
|
||||
|
||||
ueEvent := UEEvent{
|
||||
NeType: "AMF",
|
||||
Timestamp: time.Now().Unix(),
|
||||
EventType: eventType,
|
||||
// 执行插入表
|
||||
type UEEvent struct {
|
||||
ID string `json:"id" gorm:"column:id;primaryKey;autoIncrement"`
|
||||
NeType string `json:"neType" gorm:"column:ne_type"`
|
||||
NeName string `json:"neName" gorm:"column:ne_name"`
|
||||
RmUID string `json:"rmUID" gorm:"column:rm_uid"` // 可能没有
|
||||
Timestamp int64 `json:"timestamp" gorm:"column:timestamp"` // 接收到的timestamp秒级存储毫秒时间戳
|
||||
EventType string `json:"eventType" gorm:"column:event_type"` // 事件类型 auth-result detach cm-state
|
||||
EventJSONStr string `json:"eventJSON" gorm:"column:event_json"` // data JSON String
|
||||
CreatedAt int64 `json:"createdAt" gorm:"column:created_at"` // 记录创建存储毫秒
|
||||
}
|
||||
timestamp := time.Now().UnixMilli()
|
||||
data := UEEvent{
|
||||
NeType: "AMF",
|
||||
NeName: "",
|
||||
RmUID: "",
|
||||
Timestamp: timestamp,
|
||||
EventType: eventType,
|
||||
EventJSONStr: "",
|
||||
CreatedAt: timestamp,
|
||||
}
|
||||
|
||||
// 从eventJson中获取rmUID
|
||||
if v, ok := body["rmUID"]; ok {
|
||||
ueEvent.RmUID = fmt.Sprint(v)
|
||||
data.RmUID = fmt.Sprint(v)
|
||||
} else {
|
||||
ueEvent.RmUID = "4400HXAMF001"
|
||||
data.RmUID = "4400HXAMF001"
|
||||
}
|
||||
if v, ok := body["neName"]; ok {
|
||||
ueEvent.NeName = fmt.Sprint(v)
|
||||
data.NeName = fmt.Sprint(v)
|
||||
} else {
|
||||
ueEvent.NeName = "AMF_001"
|
||||
data.NeName = "AMF_001"
|
||||
}
|
||||
|
||||
// 是否存在网元
|
||||
neInfo := neService.NewNeInfo.FindByRmuid(data.RmUID)
|
||||
if neInfo.NeType != "AMF" || neInfo.RmUID != data.RmUID {
|
||||
services.ResponseInternalServerError500ProcessError(c.Writer, fmt.Errorf("network element does not exist"))
|
||||
return
|
||||
}
|
||||
|
||||
// 统一格式
|
||||
@@ -92,7 +110,8 @@ func PostUEEventFromAMF(c *gin.Context) {
|
||||
eventJson["result"] = fmt.Sprint(v)
|
||||
}
|
||||
if v, ok := body["authTime"]; ok {
|
||||
eventJson["timestamp"] = ueEvent.Timestamp
|
||||
authTime := date.ParseStrToDate(fmt.Sprint(v), date.YYYY_MM_DD_HH_MM_SS)
|
||||
eventJson["timestamp"] = authTime.Unix()
|
||||
eventJson["time"] = fmt.Sprint(v)
|
||||
}
|
||||
case "detach":
|
||||
@@ -108,7 +127,8 @@ func PostUEEventFromAMF(c *gin.Context) {
|
||||
}
|
||||
}
|
||||
if v, ok := body["detachTime"]; ok {
|
||||
eventJson["timestamp"] = ueEvent.Timestamp
|
||||
detachTime := date.ParseStrToDate(fmt.Sprint(v), date.YYYY_MM_DD_HH_MM_SS)
|
||||
eventJson["timestamp"] = detachTime.Unix()
|
||||
eventJson["time"] = fmt.Sprint(v)
|
||||
}
|
||||
case "cm-state":
|
||||
@@ -123,27 +143,29 @@ func PostUEEventFromAMF(c *gin.Context) {
|
||||
eventJson["result"] = fmt.Sprint(v)
|
||||
}
|
||||
if v, ok := body["changeTime"]; ok {
|
||||
eventJson["timestamp"] = ueEvent.Timestamp
|
||||
changeTime := date.ParseStrToDate(fmt.Sprint(v), date.YYYY_MM_DD_HH_MM_SS)
|
||||
eventJson["timestamp"] = changeTime.Unix()
|
||||
eventJson["time"] = fmt.Sprint(v)
|
||||
}
|
||||
}
|
||||
ueEvent.EventJson = eventJson
|
||||
|
||||
affected, err := dborm.XormInsertTableOne("ue_event_amf", ueEvent)
|
||||
if err != nil && affected <= 0 {
|
||||
log.Error("Failed to insert ue_event_amf:", err)
|
||||
ueByte, err := json.Marshal(eventJson)
|
||||
if err != nil {
|
||||
services.ResponseInternalServerError500ProcessError(c.Writer, err)
|
||||
return
|
||||
}
|
||||
data.EventJSONStr = string(ueByte)
|
||||
|
||||
if err := db.DB("").Table("ue_event_amf").Create(&data).Error; err != nil {
|
||||
log.Error("Failed to insert ue_event_amf", err)
|
||||
services.ResponseInternalServerError500ProcessError(c.Writer, err)
|
||||
return
|
||||
}
|
||||
|
||||
// 发送到匹配的网元
|
||||
neInfo := neService.NewNeInfo.SelectNeInfoByRmuid(ueEvent.RmUID)
|
||||
if neInfo.RmUID == ueEvent.RmUID {
|
||||
// 推送到ws订阅组
|
||||
if ueEvent.NeType == "AMF" {
|
||||
wsService.NewWSSend.ByGroupID(wsService.GROUP_AMF_UE, ueEvent)
|
||||
wsService.NewWSSend.ByGroupID(wsService.GROUP_AMF_UE+"_"+neInfo.NeId, ueEvent)
|
||||
}
|
||||
// 推送到ws订阅组
|
||||
if data.NeType == "AMF" {
|
||||
wsService.NewWSSend.ByGroupID(wsService.GROUP_AMF_UE, data)
|
||||
wsService.NewWSSend.ByGroupID(wsService.GROUP_AMF_UE+"_"+neInfo.NeId, data)
|
||||
}
|
||||
|
||||
services.ResponseStatusOK204NoContent(c.Writer)
|
||||
@@ -152,35 +174,74 @@ func PostUEEventFromAMF(c *gin.Context) {
|
||||
// UE上报处理
|
||||
func PostUEEvent(w http.ResponseWriter, r *http.Request) {
|
||||
log.Info("PostUEEvent processing... ")
|
||||
|
||||
neType := ctx.GetParam(r, "elementTypeValue")
|
||||
var ueEvent UEEvent
|
||||
if err := ctx.ShouldBindJSON(r, &ueEvent); err != nil {
|
||||
var body struct {
|
||||
NeType string `json:"neType" `
|
||||
NeName string `json:"neName" `
|
||||
RmUID string `json:"rmUID" `
|
||||
Timestamp int64 `json:"timestamp" `
|
||||
EventType string `json:"eventType" `
|
||||
EventJson map[string]any `json:"eventJSON" `
|
||||
}
|
||||
if err := ctx.ShouldBindJSON(r, &body); err != nil {
|
||||
services.ResponseInternalServerError500ProcessError(w, err)
|
||||
return
|
||||
}
|
||||
|
||||
ueEvent.NeType = strings.ToUpper(neType)
|
||||
tableName := fmt.Sprintf("ue_event_%s", strings.ToLower(neType))
|
||||
affected, err := dborm.XormInsertTableOne(tableName, ueEvent)
|
||||
if err != nil && affected <= 0 {
|
||||
neTypeLower := strings.ToLower(body.NeType)
|
||||
if neType == "" || neType != neTypeLower {
|
||||
services.ResponseInternalServerError500ProcessError(w, fmt.Errorf("inconsistent network element types"))
|
||||
return
|
||||
}
|
||||
|
||||
// 是否存在网元
|
||||
neInfo := neService.NewNeInfo.FindByRmuid(body.RmUID)
|
||||
if neInfo.NeType != body.NeType || neInfo.RmUID != body.RmUID {
|
||||
services.ResponseInternalServerError500ProcessError(w, fmt.Errorf("network element does not exist"))
|
||||
return
|
||||
}
|
||||
|
||||
ueByte, err := json.Marshal(body.EventJson)
|
||||
if err != nil {
|
||||
services.ResponseInternalServerError500ProcessError(w, err)
|
||||
return
|
||||
}
|
||||
|
||||
// 执行插入表
|
||||
type UEEvent struct {
|
||||
ID string `json:"-" gorm:"column:id;primaryKey;autoIncrement"`
|
||||
NeType string `json:"neType" gorm:"column:ne_type"`
|
||||
NeName string `json:"neName" gorm:"column:ne_name"`
|
||||
RmUID string `json:"rmUID" gorm:"column:rm_uid"` // 可能没有
|
||||
Timestamp int64 `json:"timestamp" gorm:"column:timestamp"` // 接收到的timestamp秒级存储毫秒时间戳
|
||||
EventType string `json:"eventType" gorm:"column:event_type"` // 事件类型 auth-result detach cm-state
|
||||
EventJSONStr string `json:"eventJSON" gorm:"column:event_json"` // data JSON String
|
||||
CreatedAt int64 `json:"-" gorm:"column:created_at"` // 记录创建存储毫秒
|
||||
}
|
||||
data := UEEvent{
|
||||
NeType: body.NeType,
|
||||
NeName: body.NeName,
|
||||
RmUID: body.RmUID,
|
||||
Timestamp: int64(body.Timestamp) * 1000,
|
||||
EventType: body.EventType,
|
||||
EventJSONStr: string(ueByte),
|
||||
CreatedAt: time.Now().UnixMilli(),
|
||||
}
|
||||
tableName := fmt.Sprintf("ue_event_%s", neTypeLower)
|
||||
if err := db.DB("").Table(tableName).Create(&data).Error; err != nil {
|
||||
log.Error("Failed to insert "+tableName, err)
|
||||
services.ResponseInternalServerError500ProcessError(w, err)
|
||||
return
|
||||
}
|
||||
|
||||
// 发送到匹配的网元
|
||||
neInfo := neService.NewNeInfo.SelectNeInfoByRmuid(ueEvent.RmUID)
|
||||
if neInfo.RmUID == ueEvent.RmUID {
|
||||
// 推送到ws订阅组
|
||||
if ueEvent.NeType == "MME" {
|
||||
wsService.NewWSSend.ByGroupID(wsService.GROUP_MME_UE, ueEvent)
|
||||
wsService.NewWSSend.ByGroupID(wsService.GROUP_MME_UE+"_"+neInfo.NeId, ueEvent)
|
||||
}
|
||||
if ueEvent.NeType == "AMF" {
|
||||
wsService.NewWSSend.ByGroupID(wsService.GROUP_AMF_UE, ueEvent)
|
||||
wsService.NewWSSend.ByGroupID(wsService.GROUP_AMF_UE+"_"+neInfo.NeId, ueEvent)
|
||||
}
|
||||
// 推送到ws订阅组
|
||||
if body.NeType == "MME" {
|
||||
wsService.NewWSSend.ByGroupID(wsService.GROUP_MME_UE, data)
|
||||
wsService.NewWSSend.ByGroupID(wsService.GROUP_MME_UE+"_"+neInfo.NeId, data)
|
||||
}
|
||||
if body.NeType == "AMF" {
|
||||
wsService.NewWSSend.ByGroupID(wsService.GROUP_AMF_UE, data)
|
||||
wsService.NewWSSend.ByGroupID(wsService.GROUP_AMF_UE+"_"+neInfo.NeId, data)
|
||||
}
|
||||
|
||||
services.ResponseStatusOK204NoContent(w)
|
||||
|
||||
Reference in New Issue
Block a user