Start syncer dynamically.

This commit is contained in:
Gucheng Wang 2022-01-17 20:09:29 +08:00
parent d183b9eca9
commit d9bcce9485
3 changed files with 43 additions and 17 deletions

View File

@ -140,6 +140,10 @@ func UpdateSyncer(id string, syncer *Syncer) bool {
panic(err)
}
if affected == 1 {
addSyncerJob(syncer)
}
return affected != 0
}
@ -149,6 +153,10 @@ func AddSyncer(syncer *Syncer) bool {
panic(err)
}
if affected == 1 {
addSyncerJob(syncer)
}
return affected != 0
}
@ -158,6 +166,10 @@ func DeleteSyncer(syncer *Syncer) bool {
panic(err)
}
if affected == 1 {
deleteSyncerJob(syncer)
}
return affected != 0
}

View File

@ -14,7 +14,11 @@
package object
import "github.com/robfig/cron/v3"
import (
"fmt"
"github.com/robfig/cron/v3"
)
var cronMap map[string]*cron.Cron
@ -38,3 +42,28 @@ func clearCron(name string) {
delete(cronMap, name)
}
}
func addSyncerJob(syncer *Syncer) {
deleteSyncerJob(syncer)
if !syncer.IsEnabled {
return
}
syncer.initAdapter()
syncer.syncUsers()
schedule := fmt.Sprintf("@every %ds", syncer.SyncInterval)
cron := getCronMap(syncer.Name)
_, err := cron.AddFunc(schedule, syncer.syncUsers)
if err != nil {
panic(err)
}
cron.Start()
}
func deleteSyncerJob(syncer *Syncer) {
clearCron(syncer.Name)
}

View File

@ -158,22 +158,7 @@ func (syncer *Syncer) initAdapter() {
func RunSyncUsersJob() {
syncers := GetSyncers("admin")
for _, syncer := range syncers {
if !syncer.IsEnabled {
continue
}
syncer.initAdapter()
syncer.syncUsers()
schedule := fmt.Sprintf("@every %ds", syncer.SyncInterval)
cron := getCronMap(syncer.Name)
_, err := cron.AddFunc(schedule, syncer.syncUsers)
if err != nil {
panic(err)
}
cron.Start()
addSyncerJob(syncer)
}
time.Sleep(time.Duration(1<<63 - 1))