qinglong-go/internal/cron-manager/cron.go

47 lines
864 B
Go
Raw Permalink Normal View History

2023-02-03 04:43:37 +00:00
package cron_manager
import (
"errors"
"github.com/robfig/cron/v3"
"sync"
)
var (
manager sync.Map
SixCron *cron.Cron
2023-02-03 04:43:37 +00:00
)
type mapValue struct {
en cron.EntryID
c *cron.Cron
}
func init() {
SixCron = cron.New(cron.WithChain(cron.Recover(cron.DefaultLogger)), cron.WithParser(
cron.NewParser(cron.SecondOptional|cron.Minute|cron.Hour|cron.Dom|cron.Month|cron.Dow|cron.Descriptor)))
2023-02-03 04:43:37 +00:00
SixCron.Start()
}
func AddCron(id string, value string, task func()) error {
if value == "7 7 7 7 7" {
value = "7 7 7 7 6"
}
en, err := SixCron.AddFunc(value, task)
2023-02-03 04:43:37 +00:00
if err != nil {
return err
}
manager.Store(id, &mapValue{en, SixCron})
2023-02-03 04:43:37 +00:00
return nil
}
func DeleteCron(id string) error {
value, loaded := manager.LoadAndDelete(id)
if !loaded {
return errors.New("the cron " + id + " not found!")
}
v := value.(*mapValue)
v.c.Remove(v.en)
return nil
}