package api import ( "datart/data" "datart/data/mongo" "datart/log" "errors" "fmt" "regexp" "github.com/gin-gonic/gin" ) func (a *Api) PostInsertAlarm(ctx *gin.Context) { alarm, ip, err := a.checkAndGenInsertAlarmRequest(ctx) if err != nil { log.Error(err) ctx.JSON(200, gin.H{ "code": 1, "msg": "invalid param", }) return } event := alarm.ConvertToEvent(ip) err = mongo.InsertOneEvent(ctx.Request.Context(), event) if err != nil { log.Error(err, fmt.Sprintf(" params: %v", event)) ctx.JSON(200, gin.H{ "code": 2, "msg": "insert error", }) return } err = data.PublishEvent(ctx.Request.Context(), event) if err != nil { log.Error(err, fmt.Sprintf(" params: %v", event)) ctx.JSON(200, gin.H{ "code": 3, "msg": "publish error", }) return } ctx.JSON(200, gin.H{ "code": 0, "msg": "success", }) } func (a *Api) checkAndGenInsertAlarmRequest(ctx *gin.Context) (*mongo.Alarm, string, error) { alarm := new(mongo.Alarm) err := ctx.ShouldBindJSON(alarm) if err != nil { return nil, "", err } ok, err := regexp.MatchString(`ssu\d{3}`, alarm.DeviceNo) if err != nil { return nil, "", err } if !ok { return nil, "", errors.New("invalid device_no") } if alarm.AlarmCode < 1 || alarm.AlarmCode > 10 { return nil, "", errors.New("invalid alarm_code") } if alarm.AlarmStatus < 0 || alarm.AlarmStatus > 1 { return nil, "", errors.New("invalid alarm_status") } return alarm, ctx.RemoteIP(), nil }