优化
This commit is contained in:
@@ -1,14 +1,13 @@
|
||||
package handler
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"net/http"
|
||||
"strconv"
|
||||
"time"
|
||||
|
||||
"kra/internal/biz"
|
||||
"kra/internal/server/httpx"
|
||||
"kra/internal/server/middleware"
|
||||
"kra/internal/service"
|
||||
"kra/internal/service/dto"
|
||||
|
||||
@@ -31,13 +30,7 @@ func (h *Task) Create(c *gin.Context) {
|
||||
}
|
||||
_, err := h.service.CreateRequest(c.Request.Context(), &req)
|
||||
if err != nil {
|
||||
if errors.Is(err, biz.ErrTaskSchedule) {
|
||||
var scheduleErr *biz.TaskScheduleError
|
||||
errors.As(err, &scheduleErr)
|
||||
httpx.Fail(c, "调度失败:"+scheduleErr.Error())
|
||||
return
|
||||
}
|
||||
httpx.Fail(c, "创建失败:"+err.Error())
|
||||
httpx.Fail(c, "创建失败: "+err.Error())
|
||||
return
|
||||
}
|
||||
httpx.Write(c, httpx.CodeSuccess, gin.H{}, "创建成功")
|
||||
@@ -50,13 +43,7 @@ func (h *Task) Update(c *gin.Context) {
|
||||
return
|
||||
}
|
||||
if err := h.service.UpdateRequest(c.Request.Context(), &req); err != nil {
|
||||
if errors.Is(err, biz.ErrTaskSchedule) {
|
||||
var scheduleErr *biz.TaskScheduleError
|
||||
errors.As(err, &scheduleErr)
|
||||
httpx.Fail(c, "调度失败:"+scheduleErr.Error())
|
||||
return
|
||||
}
|
||||
httpx.Fail(c, "更新失败:"+err.Error())
|
||||
httpx.Fail(c, "更新失败: "+err.Error())
|
||||
return
|
||||
}
|
||||
httpx.Write(c, httpx.CodeSuccess, gin.H{}, "更新成功")
|
||||
@@ -134,8 +121,13 @@ func (h *Task) Methods(c *gin.Context) {
|
||||
}
|
||||
|
||||
func (h *Task) AlertStream(c *gin.Context) {
|
||||
claims := middleware.Claims(c)
|
||||
if claims == nil || claims.ID == 0 {
|
||||
httpx.Fail(c, "未获取到用户身份")
|
||||
return
|
||||
}
|
||||
c.Header("Content-Type", "text/event-stream")
|
||||
c.Header("Cache-Control", "no-cache")
|
||||
c.Header("Cache-Control", "no-cache, no-transform")
|
||||
c.Header("Connection", "keep-alive")
|
||||
c.Header("X-Accel-Buffering", "no")
|
||||
flusher, ok := c.Writer.(http.Flusher)
|
||||
@@ -145,11 +137,11 @@ func (h *Task) AlertStream(c *gin.Context) {
|
||||
}
|
||||
// Remove the normal server deadline for long-lived SSE connections.
|
||||
_ = http.NewResponseController(c.Writer).SetWriteDeadline(time.Time{})
|
||||
events := h.service.Subscribe()
|
||||
defer h.service.Unsubscribe(events)
|
||||
ticker := time.NewTicker(20 * time.Second)
|
||||
events := h.service.Subscribe(claims.ID)
|
||||
defer h.service.Unsubscribe(claims.ID, events)
|
||||
ticker := time.NewTicker(30 * time.Second)
|
||||
defer ticker.Stop()
|
||||
_, _ = fmt.Fprint(c.Writer, "event: connected\ndata: {}\n\n")
|
||||
_, _ = fmt.Fprint(c.Writer, ": connected\n\n")
|
||||
flusher.Flush()
|
||||
for {
|
||||
select {
|
||||
@@ -157,10 +149,10 @@ func (h *Task) AlertStream(c *gin.Context) {
|
||||
if !open {
|
||||
return
|
||||
}
|
||||
_, _ = fmt.Fprintf(c.Writer, "event: alert\ndata: %s\n\n", event)
|
||||
_, _ = fmt.Fprintf(c.Writer, "event: timedTask:alert\ndata: %s\n\n", event)
|
||||
flusher.Flush()
|
||||
case <-ticker.C:
|
||||
_, _ = fmt.Fprint(c.Writer, ": keepalive\n\n")
|
||||
_, _ = fmt.Fprint(c.Writer, ": ping\n\n")
|
||||
flusher.Flush()
|
||||
case <-c.Request.Context().Done():
|
||||
return
|
||||
|
||||
Reference in New Issue
Block a user