mirror of
https://github.com/Rain-kl/OpenFlare.git
synced 2026-10-01 22:46:38 +08:00
68 lines
1.3 KiB
Go
68 lines
1.3 KiB
Go
// Copyright 2025 linux.do
|
|
// Copyright 2026 Arctel.net
|
|
// SPDX-License-Identifier: Apache-2.0
|
|
|
|
package scheduler
|
|
|
|
import (
|
|
"fmt"
|
|
"sync"
|
|
"time"
|
|
|
|
"github.com/Rain-kl/Wavelet/internal/config"
|
|
"github.com/Rain-kl/Wavelet/internal/task"
|
|
|
|
"github.com/hibiken/asynq"
|
|
)
|
|
|
|
const (
|
|
cleanupDedupWindow = 23 * time.Hour // 清理任务去重窗口
|
|
cleanupMaxRetry = 3 // 清理任务最大重试次数
|
|
)
|
|
|
|
var (
|
|
scheduler *asynq.Scheduler
|
|
schedulerOnce sync.Once
|
|
)
|
|
|
|
func init() {
|
|
// AsynqClient 已在 task 包中初始化
|
|
}
|
|
|
|
// GetAsynqClient 获取全局 AsynqClient
|
|
func GetAsynqClient() *asynq.Client {
|
|
return task.AsynqClient
|
|
}
|
|
|
|
// StartScheduler 启动调度器
|
|
func StartScheduler() error {
|
|
var err error
|
|
schedulerOnce.Do(func() {
|
|
location, locErr := time.LoadLocation("Asia/Shanghai")
|
|
if locErr != nil {
|
|
err = fmt.Errorf(errLoadLocationFailed, locErr)
|
|
return
|
|
}
|
|
scheduler = asynq.NewScheduler(
|
|
task.RedisOpt,
|
|
&asynq.SchedulerOpts{
|
|
Location: location,
|
|
},
|
|
)
|
|
|
|
// 清理未使用的上传文件任务
|
|
if _, err = scheduler.Register(
|
|
config.Config.Scheduler.CleanupUnusedUploadsTaskCron,
|
|
asynq.NewTask(task.CleanupUnusedUploadsTask, nil),
|
|
asynq.Unique(cleanupDedupWindow),
|
|
asynq.MaxRetry(cleanupMaxRetry),
|
|
); err != nil {
|
|
return
|
|
}
|
|
|
|
// 启动调度器
|
|
err = scheduler.Run()
|
|
})
|
|
return err
|
|
}
|