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. 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 ## Feature
@@ -18,44 +16,74 @@ cron_parser.go import https://github.com/robfig/cron/blob/master/parser.go , tha
## Usage ## Usage
see more [example](github.com/rfyiamcool/example)
### quick run ### quick run
```go ```go
func run() error { package main
cron := cronlib.New()
specList := map[string]string{ import (
"risk.scan.total.1s": "*/1 * * * * *", "log"
"risk.scan.total.2s": "*/2 * * * * *",
"risk.scan.total.3s": "*/3 * * * * *",
"risk.scan.total.4s": "*/4 * * * * *",
"risk.scan.total.5s.to.3s": "*/5 * * * * *",
}
for srv, spec := range specList { "github.com/rfyiamcool/cronlib"
tspec := spec // copy )
ssrv := srv // copy
// create job var (
cron = cronlib.New()
)
func main() {
handleClean()
go start()
// cron already start, dynamic add job
handleBackup()
select {}
}
func start() {
cron.Start()
cron.Wait()
}
func handleClean() {
job, err := cronlib.NewJobModel( job, err := cronlib.NewJobModel(
spec, "*/5 * * * * *",
func() { func() {
stdout(ssrv, tspec) pstdout("do clean gc action")
}, },
) )
if err != nil { if err != nil {
panic(err.Error()) panic(err.Error())
} }
// register srvName -> job err = cron.Register("clean", job)
err = cron.Register(srv, job)
if err != nil { if err != nil {
panic(err.Error()) panic(err.Error())
} }
}
func handleBackup() {
job, err := cronlib.NewJobModel(
"*/5 * * * * *",
func() {
pstdout("do backup action")
},
)
if err != nil {
panic(err.Error())
} }
cron.Start() err = cron.DynamicRegister("backup", job)
cron.Wait() 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) 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 // reset - reset srv model
func (c *CronSchduler) reset(srv string, model *JobModel, denyReplace, autoStart bool) error { func (c *CronSchduler) reset(srv string, model *JobModel, denyReplace, autoStart bool) error {
c.Lock() c.Lock()