wip: output, pipe

This commit is contained in:
loveuer
2024-04-01 18:13:10 +08:00
parent 195fbcd308
commit 4c40041b3d
16 changed files with 445 additions and 59 deletions

View File

@ -9,6 +9,8 @@ import (
"github.com/loveuer/nfflow/internal/opt"
"github.com/loveuer/nfflow/internal/sqlType"
"github.com/loveuer/nfflow/internal/util"
"github.com/robfig/cron/v3"
"github.com/sirupsen/logrus"
"time"
)
@ -65,11 +67,11 @@ func TaskList(c *nf.Ctx) error {
func TaskCreate(c *nf.Ctx) error {
type Req struct {
TaskName string `json:"task_name"`
TaskType string `json:"task_type"`
Timeout int `json:"timeout"`
Cron string `json:"cron"`
RunAt int64 `json:"run_at"`
TaskName string `json:"task_name"`
TaskRunType model.TaskRunType `json:"task_run_type"`
TaskTimeout int `json:"task_timeout"`
TaskCron string `json:"task_cron"`
TaskRunAt int64 `json:"task_run_at"`
}
var (
@ -82,32 +84,46 @@ func TaskCreate(c *nf.Ctx) error {
return resp.Resp400(c, err.Error())
}
if req.TaskName != "" {
if req.TaskName == "" {
return resp.Resp400(c, req)
}
task := &model.Task{TaskName: req.TaskName}
if req.Timeout < opt.TaskMinTimeout || req.Timeout > opt.TaskMaxTimeout {
if req.TaskTimeout < opt.TaskMinTimeout || req.TaskTimeout > opt.TaskMaxTimeout {
return resp.Resp400(c, req, fmt.Sprintf("timeout 时长过短(%d - %d)", opt.TaskMinTimeout, opt.TaskMaxTimeout))
}
task.TimeoutSecond = req.Timeout
task.TaskTimeout = req.TaskTimeout
switch req.TaskType {
case "once":
case "timing":
rt := time.UnixMilli(req.RunAt)
if rt.Sub(now).Seconds() > opt.TaskFetchInterval {
return resp.Resp400(c, req, "任务执行时间距离当前时间太短")
switch req.TaskRunType {
case model.TaskRunTypeOnce:
case model.TaskRunTypeTiming:
runAt := time.UnixMilli(req.TaskRunAt)
if runAt.Sub(now).Seconds() < 2*opt.TaskFetchInterval {
return resp.Resp400(c, req, "任务定时时间太短")
}
task.TaskRunType = fmt.Sprintf("T-%d", req.RunAt)
case "cron":
task.TaskRunType = fmt.Sprintf("C-%s", req.TaskType)
task.TaskRunAt = req.TaskRunAt
case model.TaskRunTypeCron:
var schedule cron.Schedule
if schedule, err = opt.CronParser.Parse(req.TaskCron); err != nil {
return resp.Resp400(c, err.Error())
}
logrus.Debugf("TaskCreate: task cron=%s schedule next=%v", req.TaskCron, schedule.Next(now))
if schedule.Next(now).Sub(now).Seconds() < 2*opt.TaskFetchInterval {
return resp.Resp400(c, req, "任务定时时间太短")
}
task.TaskCron = req.TaskCron
default:
return resp.Resp400(c, req, "任务行类型: once/timing/cron")
return resp.Resp400(c, req, "错误的任务行类型")
}
task.TaskRunType = req.TaskRunType
if err = database.DB.Session(util.Timeout(5)).
Create(task).
Error; err != nil {