wip: output, pipe
This commit is contained in:
@ -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 {
|
||||
|
Reference in New Issue
Block a user