kra/internal/initialize/timer.go

69 lines
1.4 KiB
Go

package initialize
import (
"fmt"
"kra/internal/task"
"kra/pkg/timer"
"github.com/robfig/cron/v3"
"gorm.io/gorm"
)
// TimerManager 定时任务管理器
type TimerManager struct {
timer timer.Timer
db *gorm.DB
}
// NewTimerManager 创建定时任务管理器
func NewTimerManager(db *gorm.DB) *TimerManager {
return &TimerManager{
timer: timer.NewTimerTask(),
db: db,
}
}
// Timer 获取定时器实例
func (m *TimerManager) Timer() timer.Timer {
return m.timer
}
// Start 启动定时任务
func (m *TimerManager) Start() {
go func() {
var option []cron.Option
option = append(option, cron.WithSeconds())
// 清理DB定时任务
_, err := m.timer.AddTaskByFunc("ClearDB", "@daily", func() {
err := task.ClearTable(m.db)
if err != nil {
fmt.Println("timer error:", err)
}
}, "定时清理数据库【日志,黑名单】内容", option...)
if err != nil {
fmt.Println("add timer error:", err)
}
// 其他定时任务可以在这里添加
}()
}
// Stop 停止定时任务
func (m *TimerManager) Stop() {
if m.timer != nil {
m.timer.Close()
}
}
// AddTask 添加定时任务
func (m *TimerManager) AddTask(name, spec string, fn func(), desc string, options ...cron.Option) (cron.EntryID, error) {
return m.timer.AddTaskByFunc(name, spec, fn, desc, options...)
}
// RemoveTask 移除定时任务
func (m *TimerManager) RemoveTask(name string) {
m.timer.Clear(name)
}