merge: 合并代码20241228
This commit is contained in:
@@ -68,6 +68,8 @@ func PostCDREventFrom(w http.ResponseWriter, r *http.Request) {
|
||||
wsService.NewWSSend.ByGroupID(wsService.GROUP_SMF_CDR+neInfo.NeId, cdrEvent)
|
||||
case "SMSC":
|
||||
wsService.NewWSSend.ByGroupID(wsService.GROUP_SMSC_CDR+neInfo.NeId, cdrEvent)
|
||||
case "SGWC":
|
||||
wsService.NewWSSend.ByGroupID(wsService.GROUP_SGWC_CDR+neInfo.NeId, cdrEvent)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1,19 +1,17 @@
|
||||
package event
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"io"
|
||||
"net/http"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"be.ems/lib/core/ctx"
|
||||
"be.ems/lib/dborm"
|
||||
"be.ems/lib/global"
|
||||
"be.ems/lib/log"
|
||||
"be.ems/lib/services"
|
||||
"be.ems/restagent/config"
|
||||
"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"
|
||||
@@ -36,34 +34,100 @@ type UEEvent struct {
|
||||
EventJson map[string]any `json:"eventJSON" xorm:"event_json"`
|
||||
}
|
||||
|
||||
// 旧AMF上报处理
|
||||
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 {
|
||||
var body map[string]any
|
||||
if err := c.ShouldBindBodyWithJSON(&body); 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)
|
||||
|
||||
ueEvent := UEEvent{
|
||||
NeType: "AMF",
|
||||
Timestamp: time.Now().Unix(),
|
||||
EventType: eventType,
|
||||
}
|
||||
// 从eventJson中获取rmUID
|
||||
if v, ok := body["rmUID"]; ok {
|
||||
ueEvent.RmUID = fmt.Sprint(v)
|
||||
} else {
|
||||
ueEvent.RmUID = "4400HXAMF001"
|
||||
}
|
||||
if v, ok := body["neName"]; ok {
|
||||
ueEvent.NeName = fmt.Sprint(v)
|
||||
} else {
|
||||
ueEvent.NeName = "AMF_001"
|
||||
}
|
||||
|
||||
// 统一格式
|
||||
eventJson := map[string]any{"cellID": 0, "gNBID": "", "imsi": "", "onlineNumber": 0, "result": "", "tacID": 0, "timestamp": 0, "time": 0, "type": eventType}
|
||||
switch eventType {
|
||||
case "auth-result":
|
||||
// {"authCode":"200","authMessage":"成功","authTime":"2024-12-07 16:48:37","cellID":"3","gNBID":"1","imsi":"460002082100000","onlineNumber":1,"tacID":"81"}
|
||||
if v, ok := body["imsi"]; ok {
|
||||
eventJson["imsi"] = fmt.Sprint(v)
|
||||
}
|
||||
if v, ok := body["cellID"]; ok {
|
||||
eventJson["cellID"] = fmt.Sprint(v)
|
||||
}
|
||||
if v, ok := body["gNBID"]; ok {
|
||||
eventJson["gNBID"] = fmt.Sprint(v)
|
||||
}
|
||||
if v, ok := body["tacID"]; ok {
|
||||
eventJson["tacID"] = fmt.Sprint(v)
|
||||
}
|
||||
if v, ok := body["onlineNumber"]; ok {
|
||||
eventJson["onlineNumber"] = parse.Number(v)
|
||||
}
|
||||
if v, ok := body["authCode"]; ok {
|
||||
eventJson["result"] = fmt.Sprint(v)
|
||||
}
|
||||
if v, ok := body["authTime"]; ok {
|
||||
eventJson["timestamp"] = ueEvent.Timestamp
|
||||
eventJson["time"] = fmt.Sprint(v)
|
||||
}
|
||||
case "detach":
|
||||
// {"detachResult":0,"detachTime":"2024-12-07 18:00:47","imsi":"460002082100000"}
|
||||
if v, ok := body["imsi"]; ok {
|
||||
eventJson["imsi"] = fmt.Sprint(v)
|
||||
}
|
||||
if v, ok := body["detachResult"]; ok {
|
||||
if fmt.Sprint(v) == "0" {
|
||||
eventJson["result"] = "200"
|
||||
} else {
|
||||
eventJson["result"] = "500"
|
||||
}
|
||||
}
|
||||
if v, ok := body["detachTime"]; ok {
|
||||
eventJson["timestamp"] = ueEvent.Timestamp
|
||||
eventJson["time"] = fmt.Sprint(v)
|
||||
}
|
||||
case "cm-state":
|
||||
// {"changeTime":"2024-12-07 17:07:52","imsi":"460002082100000","onlineNumber":1,"status":2}
|
||||
if v, ok := body["imsi"]; ok {
|
||||
eventJson["imsi"] = fmt.Sprint(v)
|
||||
}
|
||||
if v, ok := body["onlineNumber"]; ok {
|
||||
eventJson["onlineNumber"] = parse.Number(v)
|
||||
}
|
||||
if v, ok := body["status"]; ok {
|
||||
eventJson["result"] = fmt.Sprint(v)
|
||||
}
|
||||
if v, ok := body["changeTime"]; ok {
|
||||
eventJson["timestamp"] = ueEvent.Timestamp
|
||||
eventJson["time"] = fmt.Sprint(v)
|
||||
}
|
||||
}
|
||||
ueEvent.EventJson = eventJson
|
||||
|
||||
affected, err := dborm.XormInsertTableOne("ue_event_amf", ueEvent)
|
||||
if err != nil && affected <= 0 {
|
||||
@@ -72,13 +136,20 @@ func PostUEEventFromAMF(c *gin.Context) {
|
||||
return
|
||||
}
|
||||
|
||||
// AMF没有RmUID,直接推送
|
||||
// 推送到ws订阅组
|
||||
wsService.NewWSSend.ByGroupID(wsService.GROUP_AMF_UE, ueEvent)
|
||||
// 发送到匹配的网元
|
||||
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)
|
||||
}
|
||||
}
|
||||
|
||||
services.ResponseStatusOK204NoContent(c.Writer)
|
||||
}
|
||||
|
||||
// UE上报处理
|
||||
func PostUEEvent(w http.ResponseWriter, r *http.Request) {
|
||||
log.Info("PostUEEvent processing... ")
|
||||
|
||||
@@ -103,7 +174,12 @@ func PostUEEvent(w http.ResponseWriter, r *http.Request) {
|
||||
if neInfo.RmUID == ueEvent.RmUID {
|
||||
// 推送到ws订阅组
|
||||
if ueEvent.NeType == "MME" {
|
||||
wsService.NewWSSend.ByGroupID(wsService.GROUP_MME_UE+neInfo.NeId, ueEvent)
|
||||
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)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -100,6 +100,11 @@ var smsForward = &(config.GetYamlConfig().Alarm.SMSCForward)
|
||||
func AlarmForwardBySMPP(alarmData *Alarm) (string, error) {
|
||||
log.Info("AlarmForwardBySMPP processing... ")
|
||||
|
||||
if smsForward == nil {
|
||||
err := errors.New("smsForward configuration is nil")
|
||||
log.Error(err)
|
||||
return "", err
|
||||
}
|
||||
userList := smsForward.MobileList
|
||||
auth := gosmpp.Auth{
|
||||
SMSC: smsForward.SMSCAddr,
|
||||
@@ -133,12 +138,17 @@ func AlarmForwardBySMPP(alarmData *Alarm) (string, error) {
|
||||
log.Error("Failed to create SMPP new session:", err)
|
||||
return userList, err
|
||||
}
|
||||
defer func() {
|
||||
_ = trans.Close()
|
||||
}()
|
||||
// defer func() {
|
||||
// if err := trans.Close(); err != nil {
|
||||
// log.Error(err)
|
||||
// }
|
||||
// }()
|
||||
|
||||
message := "Alarm Notification: " + alarmData.AlarmTitle + " from " + alarmData.NeType + "_" + alarmData.NeId + " at " + alarmData.EventTime
|
||||
for _, user := range strings.Split(userList, ",") {
|
||||
message := "Alarm Notification: " + alarmData.AlarmTitle +
|
||||
" from " + alarmData.NeType + "_" + alarmData.NeId +
|
||||
" at " + alarmData.EventTime
|
||||
users := strings.Split(userList, ",")
|
||||
for _, user := range users {
|
||||
sm, err := newSubmitSM(user, message)
|
||||
if err != nil {
|
||||
log.Errorf("Failed to newSubmitSM %s short message: %v", user, err)
|
||||
|
||||
@@ -174,7 +174,7 @@ func (k *KpiCTitle) Post(c *gin.Context) {
|
||||
}
|
||||
userName := ctx.LoginUserToUserName(c)
|
||||
title.CreatedBy = &userName
|
||||
result := dborm.DefaultDB().Where("ne_type=? and (kpi_id=? or title=?)", title.NeType, title.KpiID, title.Title).First(&title)
|
||||
result := dborm.DefaultDB().Where("ne_type=? and (kpi_id=? or title=?) and status!='Deleted'", title.NeType, title.KpiID, title.Title).First(&title)
|
||||
if result.RowsAffected > 0 {
|
||||
c.JSON(http.StatusOK, services.ErrResp("custom indicator already exist"))
|
||||
return
|
||||
|
||||
@@ -786,7 +786,9 @@ func GetStateFromNF(w http.ResponseWriter, r *http.Request) {
|
||||
response.Data = data
|
||||
services.ResponseWithJson(w, http.StatusOK, response)
|
||||
return
|
||||
} else if neType == "omc" {
|
||||
}
|
||||
|
||||
if neType == "omc" {
|
||||
emsState := GetEMSState("127.0.0.1")
|
||||
services.ResponseWithJson(w, http.StatusOK, emsState)
|
||||
return
|
||||
@@ -1029,10 +1031,19 @@ func GetEMSState(ip string) *SysState {
|
||||
}
|
||||
}
|
||||
|
||||
version := "16.1.1"
|
||||
if global.Version != "" {
|
||||
version = global.Version
|
||||
CapabilityInt := config.GetYamlConfig().OMC.Capability
|
||||
if CapabilityInt == 0 {
|
||||
CapabilityInt = 5000
|
||||
}
|
||||
snStr := config.GetYamlConfig().OMC.Sn
|
||||
if snStr == "" {
|
||||
snStr = "-"
|
||||
}
|
||||
expiryDateStr := config.GetYamlConfig().OMC.ExpiryDate
|
||||
if expiryDateStr == "" {
|
||||
expiryDateStr = "-"
|
||||
}
|
||||
|
||||
hostName, _ := os.Hostname()
|
||||
dbInfo, _ := dborm.XormGetMySQLVersion()
|
||||
emsState := &SysState{
|
||||
@@ -1041,10 +1052,10 @@ func GetEMSState(ip string) *SysState {
|
||||
DbInfo: dbInfo,
|
||||
IpAddr: ipAddrs,
|
||||
Port: config.GetYamlConfig().Rest[0].Port,
|
||||
Version: version,
|
||||
Capability: 9999999,
|
||||
SerialNum: config.GetYamlConfig().OMC.Sn,
|
||||
ExpiryDate: "-",
|
||||
Version: global.Version,
|
||||
Capability: CapabilityInt,
|
||||
SerialNum: snStr,
|
||||
ExpiryDate: expiryDateStr,
|
||||
HardwareInfo: HardwareInfo{CPUs: getCpuNumber(), Memory: getTotalMemory()},
|
||||
CpuUsage: *cpuUsage,
|
||||
MemUsage: *memUsage,
|
||||
|
||||
Reference in New Issue
Block a user