dataRT/route/api/alarm.go

96 lines
1.6 KiB
Go
Raw Normal View History

2025-10-23 18:02:29 +08:00
package api
import (
2025-11-06 21:09:50 +08:00
"datart/data"
2025-10-23 18:02:29 +08:00
"datart/data/mongo"
"datart/log"
"errors"
2025-11-06 21:09:50 +08:00
"fmt"
2025-10-23 18:02:29 +08:00
"regexp"
"github.com/gin-gonic/gin"
)
func (a *Api) PostInsertAlarm(ctx *gin.Context) {
alarm, ip, err := a.checkAndGenInsertAlarmRequest(ctx)
if err != nil {
2025-11-06 21:09:50 +08:00
2025-10-23 18:02:29 +08:00
log.Error(err)
2025-11-06 21:09:50 +08:00
2025-10-23 18:02:29 +08:00
ctx.JSON(200, gin.H{
"code": 1,
"msg": "invalid param",
})
return
}
2025-11-20 20:58:51 +08:00
event, err := alarm.ConvertToEvent(ip)
if err != nil {
log.Error(err, fmt.Sprintf(" params: %v", alarm))
ctx.JSON(200, gin.H{
"code": 2,
"msg": "convert error",
})
return
}
2025-11-06 21:09:50 +08:00
err = mongo.InsertOneEvent(ctx.Request.Context(), event)
if err != nil {
log.Error(err, fmt.Sprintf(" params: %v", event))
ctx.JSON(200, gin.H{
2025-11-20 20:58:51 +08:00
"code": 3,
2025-11-06 21:09:50 +08:00
"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{
2025-11-20 20:58:51 +08:00
"code": 4,
2025-11-06 21:09:50 +08:00
"msg": "publish error",
})
return
}
2025-10-23 18:02:29 +08:00
ctx.JSON(200, gin.H{
"code": 0,
"msg": "success",
})
}
func (a *Api) checkAndGenInsertAlarmRequest(ctx *gin.Context) (*mongo.Alarm, string, error) {
alarm := new(mongo.Alarm)
2025-11-06 21:09:50 +08:00
2025-10-23 18:02:29 +08:00
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
}
2025-11-06 21:09:50 +08:00
2025-10-23 18:02:29 +08:00
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
}