add dynamic register

This commit is contained in:
rfyiamcool
2020-08-04 17:56:06 +08:00
parent 126634fdb3
commit d5dea2dcc5
6 changed files with 130 additions and 33 deletions

View File

@@ -2,9 +2,7 @@
Cronlib is easy golang crontab library, support parse crontab and schedule cron jobs.
**tks**
cron_parser.go import https://github.com/robfig/cron/blob/master/parser.go , thank @robfig
cron_parser.go import `https://github.com/robfig/cron/blob/master/parser.go`, thank @robfig
## Feature
@@ -18,44 +16,74 @@ cron_parser.go import https://github.com/robfig/cron/blob/master/parser.go , tha
## Usage
see more [example](github.com/rfyiamcool/example)
### quick run
```go
func run() error {
cron := cronlib.New()
package main
specList := map[string]string{
"risk.scan.total.1s": "*/1 * * * * *",
"risk.scan.total.2s": "*/2 * * * * *",
"risk.scan.total.3s": "*/3 * * * * *",
"risk.scan.total.4s": "*/4 * * * * *",
"risk.scan.total.5s.to.3s": "*/5 * * * * *",
import (
"log"
"github.com/rfyiamcool/cronlib"
)
var (
cron = cronlib.New()
)
func main() {
handleClean()
go start()
// cron already start, dynamic add job
handleBackup()
select {}
}
for srv, spec := range specList {
tspec := spec // copy
ssrv := srv // copy
func start() {
cron.Start()
cron.Wait()
}
// create job
func handleClean() {
job, err := cronlib.NewJobModel(
spec,
"*/5 * * * * *",
func() {
stdout(ssrv, tspec)
pstdout("do clean gc action")
},
)
if err != nil {
panic(err.Error())
}
// register srvName -> job
err = cron.Register(srv, job)
err = cron.Register("clean", job)
if err != nil {
panic(err.Error())
}
}
cron.Start()
cron.Wait()
func handleBackup() {
job, err := cronlib.NewJobModel(
"*/5 * * * * *",
func() {
pstdout("do backup action")
},
)
if err != nil {
panic(err.Error())
}
err = cron.DynamicRegister("backup", job)
if err != nil {
panic(err.Error())
}
}
func pstdout(srv string) {
log.Println(srv)
}
```

64
example/easy/easy.go Normal file
View File

@@ -0,0 +1,64 @@
package main
import (
"log"
"github.com/rfyiamcool/cronlib"
)
var (
cron = cronlib.New()
)
func main() {
handleClean()
go start()
// dynamic add
handleBackup()
select {}
}
func start() {
cron.Start()
cron.Wait()
}
func handleClean() {
job, err := cronlib.NewJobModel(
"*/5 * * * * *",
func() {
pstdout("do clean gc action")
},
)
if err != nil {
panic(err.Error())
}
err = cron.Register("clean", job)
if err != nil {
panic(err.Error())
}
}
func handleBackup() {
job, err := cronlib.NewJobModel(
"*/5 * * * * *",
func() {
pstdout("do backup action")
},
)
if err != nil {
panic(err.Error())
}
err = cron.DynamicRegister("backup", job)
if err != nil {
panic(err.Error())
}
}
func pstdout(srv string) {
log.Println(srv)
}

View File

@@ -75,6 +75,11 @@ func (c *CronSchduler) UpdateJobModel(srv string, model *JobModel) error {
return c.reset(srv, model, false, true)
}
// DynamicRegister - after cronlib already run, dynamic add a job, the job autostart by cronlib.
func (c *CronSchduler) DynamicRegister(srv string, model *JobModel) error {
return c.reset(srv, model, false, true)
}
// reset - reset srv model
func (c *CronSchduler) reset(srv string, model *JobModel, denyReplace, autoStart bool) error {
c.Lock()