Files
urldb/utils/global_scheduler.go

144 lines
4.1 KiB
Go
Raw Normal View History

2025-07-11 17:45:16 +08:00
package utils
import (
"log"
"sync"
2025-07-17 14:08:52 +08:00
"github.com/ctwj/panResManage/db/repo"
2025-07-11 17:45:16 +08:00
)
// GlobalScheduler 全局调度器管理器
type GlobalScheduler struct {
scheduler *Scheduler
mutex sync.RWMutex
}
var (
globalScheduler *GlobalScheduler
once sync.Once
)
// GetGlobalScheduler 获取全局调度器实例(单例模式)
2025-07-15 12:50:24 +08:00
func GetGlobalScheduler(hotDramaRepo repo.HotDramaRepository, readyResourceRepo repo.ReadyResourceRepository, resourceRepo repo.ResourceRepository, systemConfigRepo repo.SystemConfigRepository, panRepo repo.PanRepository) *GlobalScheduler {
2025-07-11 17:45:16 +08:00
once.Do(func() {
globalScheduler = &GlobalScheduler{
2025-07-15 12:50:24 +08:00
scheduler: NewScheduler(hotDramaRepo, readyResourceRepo, resourceRepo, systemConfigRepo, panRepo),
2025-07-11 17:45:16 +08:00
}
})
return globalScheduler
}
// StartHotDramaScheduler 启动热播剧定时任务
func (gs *GlobalScheduler) StartHotDramaScheduler() {
gs.mutex.Lock()
defer gs.mutex.Unlock()
if gs.scheduler.IsRunning() {
log.Println("热播剧定时任务已在运行中")
return
}
gs.scheduler.StartHotDramaScheduler()
log.Println("全局调度器已启动热播剧定时任务")
}
// StopHotDramaScheduler 停止热播剧定时任务
func (gs *GlobalScheduler) StopHotDramaScheduler() {
gs.mutex.Lock()
defer gs.mutex.Unlock()
if !gs.scheduler.IsRunning() {
log.Println("热播剧定时任务未在运行")
return
}
gs.scheduler.StopHotDramaScheduler()
log.Println("全局调度器已停止热播剧定时任务")
}
// IsHotDramaSchedulerRunning 检查热播剧定时任务是否在运行
func (gs *GlobalScheduler) IsHotDramaSchedulerRunning() bool {
gs.mutex.RLock()
defer gs.mutex.RUnlock()
return gs.scheduler.IsRunning()
}
// GetHotDramaNames 手动获取热播剧名字
func (gs *GlobalScheduler) GetHotDramaNames() ([]string, error) {
return gs.scheduler.GetHotDramaNames()
}
2025-07-12 21:23:23 +08:00
// StartReadyResourceScheduler 启动待处理资源自动处理任务
func (gs *GlobalScheduler) StartReadyResourceScheduler() {
gs.mutex.Lock()
defer gs.mutex.Unlock()
if gs.scheduler.IsReadyResourceRunning() {
log.Println("待处理资源自动处理任务已在运行中")
return
}
gs.scheduler.StartReadyResourceScheduler()
log.Println("全局调度器已启动待处理资源自动处理任务")
}
// StopReadyResourceScheduler 停止待处理资源自动处理任务
func (gs *GlobalScheduler) StopReadyResourceScheduler() {
gs.mutex.Lock()
defer gs.mutex.Unlock()
if !gs.scheduler.IsReadyResourceRunning() {
log.Println("待处理资源自动处理任务未在运行")
return
}
gs.scheduler.StopReadyResourceScheduler()
log.Println("全局调度器已停止待处理资源自动处理任务")
}
// IsReadyResourceRunning 检查待处理资源自动处理任务是否在运行
func (gs *GlobalScheduler) IsReadyResourceRunning() bool {
gs.mutex.RLock()
defer gs.mutex.RUnlock()
return gs.scheduler.IsReadyResourceRunning()
}
// ProcessReadyResources 手动触发待处理资源处理
func (gs *GlobalScheduler) ProcessReadyResources() {
gs.mutex.Lock()
defer gs.mutex.Unlock()
gs.scheduler.processReadyResources()
}
2025-07-11 17:45:16 +08:00
// UpdateSchedulerStatus 根据系统配置更新调度器状态
2025-07-15 12:50:24 +08:00
func (gs *GlobalScheduler) UpdateSchedulerStatus(autoFetchHotDramaEnabled bool, autoProcessReadyResources bool) {
2025-07-11 17:45:16 +08:00
gs.mutex.Lock()
defer gs.mutex.Unlock()
2025-07-15 12:50:24 +08:00
// 处理热播剧自动拉取功能
2025-07-11 17:45:16 +08:00
if autoFetchHotDramaEnabled {
if !gs.scheduler.IsRunning() {
log.Println("系统配置启用自动拉取热播剧,启动定时任务")
gs.scheduler.StartHotDramaScheduler()
}
} else {
if gs.scheduler.IsRunning() {
log.Println("系统配置禁用自动拉取热播剧,停止定时任务")
gs.scheduler.StopHotDramaScheduler()
}
}
2025-07-15 12:50:24 +08:00
// 处理待处理资源自动处理功能
if autoProcessReadyResources {
if !gs.scheduler.IsReadyResourceRunning() {
log.Println("系统配置启用自动处理待处理资源,启动定时任务")
gs.scheduler.StartReadyResourceScheduler()
}
} else {
if gs.scheduler.IsReadyResourceRunning() {
log.Println("系统配置禁用自动处理待处理资源,停止定时任务")
gs.scheduler.StopReadyResourceScheduler()
}
}
2025-07-11 17:45:16 +08:00
}