feat: AMF-audit日志文件接口默认一小时注册用户带时间参数查询
This commit is contained in:
@@ -388,9 +388,10 @@ func (s *AMFController) NbStateList(c *gin.Context) {
|
||||
// @Router /neData/amf/log/audit [get]
|
||||
func (s *AMFController) AuditLog(c *gin.Context) {
|
||||
var query struct {
|
||||
NeId string `form:"neId" binding:"required"`
|
||||
BeginTime int64 `json:"beginTime" form:"beginTime"`
|
||||
EndTime int64 `json:"endTime" form:"endTime"`
|
||||
NeId string `form:"neId" binding:"required"` // 网元ID
|
||||
LastTime int64 `json:"lastTime" form:"lastTime"` // 单位分钟,可设置为最小1分钟至最大24小时
|
||||
SuPI string `json:"supi" form:"supi"` // IMSI号码
|
||||
OpType string `json:"opType" form:"opType"` // 操作类型 REGISTRATION DE-REGISTRATION SERVICE-REQ RELEASE-REQ
|
||||
}
|
||||
if err := c.ShouldBindQuery(&query); err != nil {
|
||||
errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err))
|
||||
@@ -398,14 +399,9 @@ func (s *AMFController) AuditLog(c *gin.Context) {
|
||||
return
|
||||
}
|
||||
|
||||
// 处理时间范围
|
||||
if query.BeginTime != 0 && query.BeginTime < 1e12 {
|
||||
c.JSON(422, resp.CodeMsg(resp.CODE_PARAM_CHEACK, "begin time must ms"))
|
||||
return
|
||||
}
|
||||
if query.EndTime != 0 && query.EndTime < 1e12 {
|
||||
c.JSON(422, resp.CodeMsg(resp.CODE_PARAM_CHEACK, "end time must ms"))
|
||||
return
|
||||
queryOpType := query.OpType
|
||||
if queryOpType == "" || queryOpType == "<nil>" {
|
||||
queryOpType = "REGISTRATION"
|
||||
}
|
||||
|
||||
auditLog, err := neDataService.NewAMF.GetAuditLog(query.NeId)
|
||||
@@ -443,56 +439,134 @@ func (s *AMFController) AuditLog(c *gin.Context) {
|
||||
// 响应格式
|
||||
timeStr := ""
|
||||
data := make([]map[string]any, 0)
|
||||
if query.BeginTime > 1e12 && query.EndTime > 1e12 {
|
||||
|
||||
switch {
|
||||
default:
|
||||
// 验证时间范围在1分钟到24小时之间
|
||||
if query.LastTime < 1 || query.LastTime > 1440 { // 24小时 = 1440分钟
|
||||
// 可以返回错误或者限制在有效范围内
|
||||
query.LastTime = 60 // 默认设置为1小时
|
||||
}
|
||||
|
||||
// 时间处理
|
||||
beginT := time.UnixMilli(query.BeginTime)
|
||||
endT := time.UnixMilli(query.EndTime)
|
||||
beginT := time.Now().Add(time.Duration(-query.LastTime) * time.Minute)
|
||||
endT := time.Now()
|
||||
timeStr = fmt.Sprintf("%s - %s", beginT.Format(time.DateTime), endT.Format(time.DateTime))
|
||||
|
||||
for _, v := range auditLog {
|
||||
// 先过滤操作类型为REGISTRATION的记录
|
||||
opType := fmt.Sprint(v["op_type"])
|
||||
if opType == "" || opType == "<nil>" || opType != queryOpType {
|
||||
continue
|
||||
}
|
||||
|
||||
// 检查时间字段
|
||||
timeV, ok := v["time"].(string)
|
||||
if !ok {
|
||||
continue
|
||||
}
|
||||
|
||||
// 解析时间
|
||||
t, err := time.Parse(time.DateTime, timeV)
|
||||
if err != nil {
|
||||
continue
|
||||
}
|
||||
|
||||
// 检查时间是否在范围内
|
||||
if t.After(beginT) && t.After(endT) {
|
||||
// 修正时间范围判断逻辑
|
||||
if t.After(beginT) && !t.After(endT) { // 时间在开始时间之后,并且不超过结束时间
|
||||
data = append(data, map[string]any{
|
||||
"supi": fmt.Sprint(v["supi"]),
|
||||
"amf_ue_ngap_id": parse.Number(v["amf_ue_ngap_id"]),
|
||||
"ran_ue_ngap_id": parse.Number(v["ran_ue_ngap_id"]),
|
||||
"gnb_id": parse.Number(v["gnb_id"]),
|
||||
"time": timeV,
|
||||
"op_type": fmt.Sprint(v["op_type"]),
|
||||
"time": fmt.Sprint(v["time"]),
|
||||
})
|
||||
}
|
||||
}
|
||||
} else {
|
||||
lastItem := auditLog[0]
|
||||
lastTime := ""
|
||||
if timeV, ok := lastItem["time"].(string); ok {
|
||||
lastTime = timeV[:19]
|
||||
case query.LastTime > 0 && query.SuPI != "":
|
||||
// 验证时间范围在1分钟到24小时之间
|
||||
if query.LastTime < 1 || query.LastTime > 1440 { // 24小时 = 1440分钟
|
||||
// 可以返回错误或者限制在有效范围内
|
||||
query.LastTime = 60 // 默认设置为1小时
|
||||
}
|
||||
timeStr = lastTime
|
||||
|
||||
// 时间处理
|
||||
beginT := time.Now().Add(time.Duration(-query.LastTime) * time.Minute)
|
||||
endT := time.Now()
|
||||
timeStr = fmt.Sprintf("%s - %s", beginT.Format(time.DateTime), endT.Format(time.DateTime))
|
||||
|
||||
for _, v := range auditLog {
|
||||
// 先过滤操作类型为REGISTRATION的记录
|
||||
opType := fmt.Sprint(v["op_type"])
|
||||
if opType == "" || opType == "<nil>" || opType != queryOpType {
|
||||
continue
|
||||
}
|
||||
|
||||
supiV, ok := v["supi"].(string)
|
||||
if !ok {
|
||||
continue
|
||||
}
|
||||
// 检查时间字段
|
||||
timeV, ok := v["time"].(string)
|
||||
if !ok {
|
||||
continue
|
||||
}
|
||||
if !strings.HasPrefix(timeV, lastTime) {
|
||||
|
||||
// 解析时间
|
||||
t, err := time.Parse(time.DateTime, timeV)
|
||||
if err != nil {
|
||||
continue
|
||||
}
|
||||
|
||||
// 修正时间范围判断逻辑
|
||||
if t.After(beginT) && !t.After(endT) && supiV == query.SuPI { // 时间在开始时间之后,并且不超过结束时间
|
||||
data = append(data, map[string]any{
|
||||
"supi": fmt.Sprint(v["supi"]),
|
||||
"amf_ue_ngap_id": parse.Number(v["amf_ue_ngap_id"]),
|
||||
"ran_ue_ngap_id": parse.Number(v["ran_ue_ngap_id"]),
|
||||
"gnb_id": parse.Number(v["gnb_id"]),
|
||||
"op_type": fmt.Sprint(v["op_type"]),
|
||||
"time": fmt.Sprint(v["time"]),
|
||||
})
|
||||
}
|
||||
}
|
||||
case query.SuPI != "":
|
||||
for _, v := range auditLog {
|
||||
// 先过滤操作类型为REGISTRATION的记录
|
||||
opType := fmt.Sprint(v["op_type"])
|
||||
if opType == "" || opType == "<nil>" || opType != queryOpType {
|
||||
continue
|
||||
}
|
||||
|
||||
supiV, ok := v["supi"].(string)
|
||||
if !ok {
|
||||
continue
|
||||
}
|
||||
|
||||
if supiV == query.SuPI {
|
||||
data = append(data, map[string]any{
|
||||
"supi": fmt.Sprint(v["supi"]),
|
||||
"amf_ue_ngap_id": parse.Number(v["amf_ue_ngap_id"]),
|
||||
"ran_ue_ngap_id": parse.Number(v["ran_ue_ngap_id"]),
|
||||
"gnb_id": parse.Number(v["gnb_id"]),
|
||||
"op_type": fmt.Sprint(v["op_type"]),
|
||||
"time": fmt.Sprint(v["time"]),
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
// 时间处理
|
||||
if len(data) == 1 {
|
||||
timeStr = data[0]["time"].(string)
|
||||
}
|
||||
if len(data) > 1 {
|
||||
beginT := data[0]["time"].(string)
|
||||
endT := data[len(data)-1]["time"].(string)
|
||||
timeStr = fmt.Sprintf("%s - %s", beginT, endT)
|
||||
}
|
||||
}
|
||||
|
||||
c.JSON(200, map[string]any{
|
||||
"time": timeStr,
|
||||
"ngap_context": data,
|
||||
|
||||
Reference in New Issue
Block a user