优化结构

This commit is contained in:
Yvan
2026-08-22 15:53:14 +08:00
parent ca52de5db0
commit 491ed21d48
72 changed files with 746 additions and 695 deletions
+12 -11
View File
@@ -6,6 +6,7 @@ import (
"errors"
"fmt"
"kra/internal/biz/system"
taskbiz "kra/internal/biz/task"
"log/slog"
"sync"
"time"
@@ -14,7 +15,7 @@ import (
)
type TaskScheduler struct {
tasks *system.TaskUsecase
tasks *taskbiz.TaskUsecase
authorities *system.AuthorityUsecase
executor *TaskExecutor
logger *slog.Logger
@@ -38,13 +39,13 @@ type scheduledEntry struct {
entry cron.EntryID
}
func NewTaskScheduler(tasks *system.TaskUsecase, authorities *system.AuthorityUsecase, executor *TaskExecutor, logger *slog.Logger) *TaskScheduler {
func NewTaskScheduler(tasks *taskbiz.TaskUsecase, authorities *system.AuthorityUsecase, executor *TaskExecutor, logger *slog.Logger) *TaskScheduler {
idle := make(chan struct{})
close(idle)
return &TaskScheduler{tasks: tasks, authorities: authorities, executor: executor, logger: logger.With("mod", "timedTask"), standard: cron.New(), seconds: cron.New(cron.WithSeconds()), entries: map[uint]scheduledEntry{}, running: map[uint]struct{}{}, idle: idle, subscribers: map[uint]map[chan []byte]struct{}{}}
}
func NewTaskRuntime(scheduler *TaskScheduler) system.TaskRuntime { return scheduler }
func NewTaskRuntime(scheduler *TaskScheduler) taskbiz.TaskRuntime { return scheduler }
func NewTaskReloader(scheduler *TaskScheduler) system.TaskReloader { return scheduler }
@@ -118,7 +119,7 @@ func (s *TaskScheduler) Reload(ctx context.Context) error {
return err
}
type preparedTask struct {
task *system.TimedTask
task *taskbiz.TimedTask
schedule cron.Schedule
}
prepared := make([]preparedTask, 0, len(items))
@@ -183,7 +184,7 @@ func (s *TaskScheduler) finishRun(id uint) {
}
}
func (s *TaskScheduler) dispatch(task *system.TimedTask, trigger string, async bool) bool {
func (s *TaskScheduler) dispatch(task *taskbiz.TimedTask, trigger string, async bool) bool {
ctx, ok := s.beginRun(task.ID)
if !ok {
s.logger.Warn("timed task skipped because it is already running or the scheduler is stopping", "task_id", task.ID, "task_name", task.Name, "trigger_type", trigger)
@@ -201,7 +202,7 @@ func (s *TaskScheduler) dispatch(task *system.TimedTask, trigger string, async b
return true
}
func (s *TaskScheduler) run(ctx context.Context, task *system.TimedTask, trigger string) {
func (s *TaskScheduler) run(ctx context.Context, task *taskbiz.TimedTask, trigger string) {
log := s.executor.Run(ctx, task, trigger)
attributes := []any{"task_id", log.TaskID, "task_name", log.TaskName, "trigger_type", log.TriggerType, "status", log.Status, "duration_ms", log.DurationMS, "started_at", log.StartedAt, "finished_at", log.FinishedAt}
if log.ErrorMsg != "" {
@@ -224,7 +225,7 @@ func (s *TaskScheduler) run(ctx context.Context, task *system.TimedTask, trigger
}
}
func (s *TaskScheduler) Schedule(task *system.TimedTask) error {
func (s *TaskScheduler) Schedule(task *taskbiz.TimedTask) error {
if task == nil {
return errors.New("定时任务不能为空")
}
@@ -246,21 +247,21 @@ func (s *TaskScheduler) Schedule(task *system.TimedTask) error {
return nil
}
func parseTaskSchedule(task *system.TimedTask) (cron.Schedule, error) {
func parseTaskSchedule(task *taskbiz.TimedTask) (cron.Schedule, error) {
if task.WithSeconds {
return cron.NewParser(cron.Second | cron.Minute | cron.Hour | cron.Dom | cron.Month | cron.Dow | cron.Descriptor).Parse(task.Spec)
}
return cron.ParseStandard(task.Spec)
}
func cloneTimedTask(task *system.TimedTask) *system.TimedTask {
func cloneTimedTask(task *taskbiz.TimedTask) *taskbiz.TimedTask {
copy := *task
copy.Params = append([]byte(nil), task.Params...)
copy.HTTPHeader = append([]byte(nil), task.HTTPHeader...)
return &copy
}
func (s *TaskScheduler) scheduleLocked(task *system.TimedTask, schedule cron.Schedule) {
func (s *TaskScheduler) scheduleLocked(task *taskbiz.TimedTask, schedule cron.Schedule) {
run := func() {
s.dispatch(task, "auto", false)
}
@@ -319,7 +320,7 @@ func (s *TaskScheduler) NextRuns() map[uint]time.Time {
return out
}
func (s *TaskScheduler) Trigger(task *system.TimedTask) bool {
func (s *TaskScheduler) Trigger(task *taskbiz.TimedTask) bool {
if task == nil {
return false
}