This commit is contained in:
Yvan
2026-08-18 15:04:07 +08:00
parent 10ccc005be
commit 1ef8ecb7b2
42 changed files with 3027 additions and 296 deletions
+13 -7
View File
@@ -103,12 +103,12 @@ func truncateTaskText(value string) string {
return value[:limit] + "...(截断)"
}
func (e *TaskExecutor) runMethod(task *biz.TimedTask) error {
func (e *TaskExecutor) runMethod(ctx context.Context, task *biz.TimedTask) error {
method, ok := biz.TaskMethodByName(task.MethodName)
if !ok {
return fmt.Errorf("方法 %s 未注册(需在 internal/worker/task_registry.go 经 biz.RegisterTaskMethod 注册)", task.MethodName)
}
ctx, cancel := context.WithTimeout(context.Background(), 5*time.Minute)
runCtx, cancel := context.WithTimeout(ctx, 5*time.Minute)
defer cancel()
done := make(chan error, 1)
go func() {
@@ -117,7 +117,7 @@ func (e *TaskExecutor) runMethod(task *biz.TimedTask) error {
done <- fmt.Errorf("panic: %v", recovered)
}
}()
done <- method(ctx, json.RawMessage(task.Params))
done <- method(runCtx, json.RawMessage(task.Params))
}()
select {
case err := <-done:
@@ -125,12 +125,18 @@ func (e *TaskExecutor) runMethod(task *biz.TimedTask) error {
return errTaskTimeout
}
return err
case <-ctx.Done():
return errTaskTimeout
case <-runCtx.Done():
if errors.Is(runCtx.Err(), context.DeadlineExceeded) {
return errTaskTimeout
}
return runCtx.Err()
}
}
func (e *TaskExecutor) Run(ctx context.Context, task *biz.TimedTask, trigger string) (log *biz.TimedTaskLog) {
if ctx == nil {
ctx = context.Background()
}
started := time.Now()
log = &biz.TimedTaskLog{TaskID: task.ID, TaskName: task.Name, TriggerType: trigger, StartedAt: started, Status: "success"}
defer func() {
@@ -148,9 +154,9 @@ func (e *TaskExecutor) Run(ctx context.Context, task *biz.TimedTask, trigger str
var err error
switch task.ExecutorType {
case biz.TaskExecutorMethod:
err = e.runMethod(task)
err = e.runMethod(ctx, task)
case biz.TaskExecutorHTTP:
runCtx, cancel := context.WithTimeout(context.Background(), 30*time.Second)
runCtx, cancel := context.WithTimeout(ctx, 30*time.Second)
log.Output, err = e.runHTTP(runCtx, task)
cancel()
default: