feat: replay service

This commit is contained in:
2026-05-13 19:56:05 +08:00
parent 0d07dc653b
commit 1f77e1dd6c
7 changed files with 538 additions and 0 deletions
+71
View File
@@ -19,6 +19,13 @@ type mqttDebugStartRequest struct {
PersistToDatabase bool `json:"persistToDatabase"`
}
type mqttReplayStartRequest struct {
Addr string `json:"addr"`
EndTime int64 `json:"endTime"`
RegionID uint32 `json:"regionId"`
StartTime int64 `json:"startTime"`
}
var debugUpgrader = websocket.Upgrader{
CheckOrigin: func(r *http.Request) bool {
return true
@@ -89,6 +96,70 @@ func (sc *SystemDebugController) StopMqtt(c *gin.Context) {
writeSuccess(c, http.StatusOK, "stop success", service.Status())
}
// @Summary 获取MQTT重放状态
// @Description 获取心率历史数据 MQTT 重放状态
// @Tags 系统调试
// @Produce json
// @Security BearerAuth
// @Success 200 {object} SwagAPIResponse "查询成功"
// @Router /admin/system-debug/mqtt/replay/status [get]
func (sc *SystemDebugController) MqttReplayStatus(c *gin.Context) {
service := mqtt.GetReplayService()
if service == nil {
writeError(c, http.StatusServiceUnavailable, "mqtt replay service unavailable")
return
}
writeSuccess(c, http.StatusOK, "query success", service.Status())
}
// @Summary 启动MQTT历史数据重放
// @Description 按指定时间范围重放历史心率数据到 MQTT
// @Tags 系统调试
// @Accept json
// @Produce json
// @Security BearerAuth
// @Success 200 {object} SwagAPIResponse "启动成功"
// @Router /admin/system-debug/mqtt/replay/start [post]
func (sc *SystemDebugController) StartMqttReplay(c *gin.Context) {
service := mqtt.GetReplayService()
if service == nil {
writeError(c, http.StatusServiceUnavailable, "mqtt replay service unavailable")
return
}
var payload mqttReplayStartRequest
if err := c.ShouldBindJSON(&payload); err != nil {
writeError(c, http.StatusBadRequest, err.Error())
return
}
status, err := service.Start(mqtt.ReplayStartRequest{
Addr: payload.Addr,
EndTime: payload.EndTime,
RegionID: payload.RegionID,
StartTime: payload.StartTime,
})
if err != nil {
writeError(c, http.StatusBadRequest, err.Error())
return
}
writeSuccess(c, http.StatusOK, "start success", status)
}
// @Summary 停止MQTT历史数据重放
// @Description 停止当前正在执行的心率历史数据 MQTT 重放
// @Tags 系统调试
// @Produce json
// @Security BearerAuth
// @Success 200 {object} SwagAPIResponse "停止成功"
// @Router /admin/system-debug/mqtt/replay/stop [post]
func (sc *SystemDebugController) StopMqttReplay(c *gin.Context) {
service := mqtt.GetReplayService()
if service == nil {
writeError(c, http.StatusServiceUnavailable, "mqtt replay service unavailable")
return
}
writeSuccess(c, http.StatusOK, "stop success", service.Stop())
}
// @Summary MQTT WebSocket连接
// @Description 通过WebSocket实时监听MQTT消息需要SuperAdmin权限
// @Tags 系统调试