Files
mlsr/lsdb/Scheduler.go
T

84 lines
2.0 KiB
Go

// Package lsdb
// @Author: Wang Feng
// @Description:
// @Version: 0.1.0
// @Date: 2022/4/1 18:17
// @Copyright: MIN-Group;国家重大科技基础设施——未来网络北大实验室;深圳市信息论与未来网络重点实验室
//
package lsdb
import (
"github.com/go-co-op/gocron"
"time"
)
//
// Scheduler
// @Description: 封装了goCron的调度器
//
type MlsrScheduler struct {
sche *gocron.Scheduler
}
//
// Init
// @Description: 调度器初始化
// @receiver s
//
func (s *MlsrScheduler) Init() {
// UTC表示unix标准时间,与北京时区不同,但不影响任务执行
s.sche = gocron.NewScheduler(time.UTC)
}
//
// ScheduleTaskAfterDuration
// @Description: 安排任务在一定时间后触发,触发一次
// @receiver s
// @param dur 时间间隔
//
func (s *MlsrScheduler) ScheduleTaskAfterDuration(dur time.Duration, intervalSeconds int) *gocron.Scheduler {
timeRun := time.Now()
timeRun = timeRun.Add(dur)
return s.scheduleRecurringTaskAtTime(timeRun, intervalSeconds)
}
//
// ScheduleTaskAtTime
// @Description: 安排任务在某个时间执行一次
// @receiver s
// @param timeRun 执行时间
//
func (s *MlsrScheduler) ScheduleTaskAtTime(timeRun time.Time, intervalSeconds int) *gocron.Scheduler {
return s.scheduleRecurringTaskAtTime(timeRun, intervalSeconds)
}
//
// scheduleRecurringTaskAtTime
// @Description: 安排执行某次循环性任务
// @receiver s
// @param timeRun 首次执行时间
// @param intervalSeconds 执行间隔(单位:秒)
//
func (s *MlsrScheduler) scheduleRecurringTaskAtTime(timeRun time.Time, intervalSeconds int) *gocron.Scheduler {
// 判断调度器是否还在正常运行
if (s.sche == nil) || (!s.sche.IsRunning()) {
s.Init()
}
// 安排任务执行
return s.sche.Every(intervalSeconds).Seconds().StartAt(timeRun)
}
func (s *MlsrScheduler) StartAsync() {
s.sche.StartAsync()
}
//
// Close
// @Description: 关闭调度器
// @receiver s
//
func (s *MlsrScheduler) Close() {
s.sche.Clear()
}