Files
be.ems/features/event/event.go
2024-01-22 17:12:36 +08:00

66 lines
1.7 KiB
Go

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