113 lines
3.2 KiB
Go
113 lines
3.2 KiB
Go
package event
|
||
|
||
import (
|
||
"encoding/json"
|
||
"fmt"
|
||
"io"
|
||
"net/http"
|
||
"strings"
|
||
"time"
|
||
|
||
"nms_cxy/lib/core/ctx"
|
||
"nms_cxy/lib/dborm"
|
||
"nms_cxy/lib/global"
|
||
"nms_cxy/lib/log"
|
||
"nms_cxy/lib/services"
|
||
"nms_cxy/omc/config"
|
||
neService "nms_cxy/src/modules/network_element/service"
|
||
wsService "nms_cxy/src/modules/ws/service"
|
||
|
||
"github.com/gin-gonic/gin"
|
||
)
|
||
|
||
var (
|
||
// 走Gin
|
||
UriUEEventAMF = "/upload-ue/v1/:eventType"
|
||
// 走Mux
|
||
UriUEEvent = config.DefaultUriPrefix + "/logManagement/v1/elementType/{elementTypeValue}/objectType/ueEvent"
|
||
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"`
|
||
}
|
||
|
||
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("Failed 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 = time.Now().Unix()
|
||
ueEvent.EventType = eventType
|
||
log.Trace("ueEvent AMF:", ueEvent)
|
||
|
||
affected, err := dborm.XormInsertTableOne("ue_event_amf", ueEvent)
|
||
if err != nil && affected <= 0 {
|
||
log.Error("Failed to insert ue_event_amf:", err)
|
||
services.ResponseInternalServerError500ProcessError(c.Writer, err)
|
||
return
|
||
}
|
||
|
||
// AMF没有RmUID,直接推送
|
||
// 推送到ws订阅组
|
||
wsService.NewWSSendImpl.ByGroupID(wsService.GROUP_AMF_UE, ueEvent)
|
||
|
||
services.ResponseStatusOK204NoContent(c.Writer)
|
||
}
|
||
|
||
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 {
|
||
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 {
|
||
log.Error("Failed to insert "+tableName, err)
|
||
services.ResponseInternalServerError500ProcessError(w, err)
|
||
return
|
||
}
|
||
|
||
// 发送到匹配的网元
|
||
neInfo := neService.NewNeInfoImpl.SelectNeInfoByRmuid(ueEvent.RmUID)
|
||
if neInfo.RmUID == ueEvent.RmUID {
|
||
// 推送到ws订阅组
|
||
if ueEvent.NeType == "MME" {
|
||
wsService.NewWSSendImpl.ByGroupID(wsService.GROUP_MME_UE+neInfo.NeId, ueEvent)
|
||
}
|
||
}
|
||
|
||
services.ResponseStatusOK204NoContent(w)
|
||
}
|