dataRT/route/api/alarm.go

92 lines
1.6 KiB
Go
Raw Normal View History

2025-10-23 18:02:29 +08:00
package api
import (
2025-12-05 17:54:25 +08:00
"context"
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"
)
2025-12-05 17:54:25 +08:00
func (a *Api) PostUploadAlarm(ctx *gin.Context) {
alarm, ip, err := a.checkAndGenUploadAlarmRequest(ctx)
2025-10-23 18:02:29 +08:00
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
}
2025-12-05 17:54:25 +08:00
go func(e *mongo.Event) {
if err := data.PublishEvent(context.Background(), e); err != nil {
2025-11-06 21:09:50 +08:00
2025-12-05 17:54:25 +08:00
log.Error(err, fmt.Sprintf(" params: %v", e))
}
}(event)
2025-10-23 18:02:29 +08:00
ctx.JSON(200, gin.H{
"code": 0,
"msg": "success",
})
}
2025-12-05 17:54:25 +08:00
func (a *Api) checkAndGenUploadAlarmRequest(ctx *gin.Context) (*mongo.Alarm, string, error) {
2025-10-23 18:02:29 +08:00
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
}