47 lines
864 B
Go
47 lines
864 B
Go
package cron_manager
|
|
|
|
import (
|
|
"errors"
|
|
"github.com/robfig/cron/v3"
|
|
"sync"
|
|
)
|
|
|
|
var (
|
|
manager sync.Map
|
|
SixCron *cron.Cron
|
|
)
|
|
|
|
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)))
|
|
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)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
manager.Store(id, &mapValue{en, SixCron})
|
|
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
|
|
}
|