优化
This commit is contained in:
@@ -1,26 +1,26 @@
|
||||
package handler
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"net/http"
|
||||
"strconv"
|
||||
"time"
|
||||
|
||||
"kra/internal/biz"
|
||||
"kra/internal/server/httpx"
|
||||
"kra/internal/service"
|
||||
"kra/internal/service/dto"
|
||||
"kra/internal/worker"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
)
|
||||
|
||||
type Task struct {
|
||||
service *service.TaskService
|
||||
scheduler *worker.TaskScheduler
|
||||
service *service.TaskService
|
||||
}
|
||||
|
||||
func NewTask(service *service.TaskService, scheduler *worker.TaskScheduler) *Task {
|
||||
return &Task{service: service, scheduler: scheduler}
|
||||
func NewTask(service *service.TaskService) *Task {
|
||||
return &Task{service: service}
|
||||
}
|
||||
|
||||
func (h *Task) Create(c *gin.Context) {
|
||||
@@ -29,15 +29,17 @@ func (h *Task) Create(c *gin.Context) {
|
||||
httpx.Fail(c, "参数错误")
|
||||
return
|
||||
}
|
||||
id, err := h.service.CreateRequest(c.Request.Context(), &req)
|
||||
_, 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())
|
||||
return
|
||||
}
|
||||
if err = h.scheduler.ScheduleID(c.Request.Context(), id); err != nil {
|
||||
httpx.Fail(c, "调度失败:"+err.Error())
|
||||
return
|
||||
}
|
||||
httpx.Write(c, httpx.CodeSuccess, gin.H{}, "创建成功")
|
||||
}
|
||||
|
||||
@@ -48,13 +50,15 @@ 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())
|
||||
return
|
||||
}
|
||||
if err := h.scheduler.ScheduleID(c.Request.Context(), req.ID); err != nil {
|
||||
httpx.Fail(c, "调度失败:"+err.Error())
|
||||
return
|
||||
}
|
||||
httpx.Write(c, httpx.CodeSuccess, gin.H{}, "更新成功")
|
||||
}
|
||||
|
||||
@@ -64,7 +68,6 @@ func (h *Task) Delete(c *gin.Context) {
|
||||
httpx.Fail(c, "参数错误")
|
||||
return
|
||||
}
|
||||
h.scheduler.Remove(req.ID)
|
||||
if err := h.service.Delete(c.Request.Context(), req.ID); err != nil {
|
||||
httpx.Fail(c, "删除失败")
|
||||
return
|
||||
@@ -82,10 +85,6 @@ func (h *Task) Toggle(c *gin.Context) {
|
||||
httpx.Fail(c, "操作失败: "+err.Error())
|
||||
return
|
||||
}
|
||||
if err := h.scheduler.ScheduleID(c.Request.Context(), req.ID); err != nil {
|
||||
httpx.Fail(c, "操作失败: "+err.Error())
|
||||
return
|
||||
}
|
||||
httpx.Write(c, httpx.CodeSuccess, gin.H{}, "操作成功")
|
||||
}
|
||||
|
||||
@@ -95,7 +94,7 @@ func (h *Task) Trigger(c *gin.Context) {
|
||||
httpx.Fail(c, "参数错误")
|
||||
return
|
||||
}
|
||||
if err := h.scheduler.TriggerID(c.Request.Context(), req.ID); err != nil {
|
||||
if err := h.service.Trigger(c.Request.Context(), req.ID); err != nil {
|
||||
httpx.Fail(c, "触发失败: "+err.Error())
|
||||
return
|
||||
}
|
||||
@@ -110,7 +109,7 @@ func (h *Task) List(c *gin.Context) {
|
||||
value, _ := strconv.ParseBool(raw)
|
||||
enabled = &value
|
||||
}
|
||||
items, total, err := h.service.ListRequest(c.Request.Context(), page, size, c.Query("name"), c.Query("executorType"), enabled, h.scheduler.NextRuns())
|
||||
items, total, err := h.service.ListRequest(c.Request.Context(), page, size, c.Query("name"), c.Query("executorType"), enabled)
|
||||
if err != nil {
|
||||
httpx.Fail(c, "获取失败")
|
||||
return
|
||||
@@ -146,8 +145,8 @@ 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.scheduler.Subscribe()
|
||||
defer h.scheduler.Unsubscribe(events)
|
||||
events := h.service.Subscribe()
|
||||
defer h.service.Unsubscribe(events)
|
||||
ticker := time.NewTicker(20 * time.Second)
|
||||
defer ticker.Stop()
|
||||
_, _ = fmt.Fprint(c.Writer, "event: connected\ndata: {}\n\n")
|
||||
|
||||
Reference in New Issue
Block a user