From d9bcce94858503cffea9698d43d22f4bd0d38a62 Mon Sep 17 00:00:00 2001 From: Gucheng Wang Date: Mon, 17 Jan 2022 20:09:29 +0800 Subject: [PATCH] Start syncer dynamically. --- object/syncer.go | 12 ++++++++++++ object/syncer_cron.go | 31 ++++++++++++++++++++++++++++++- object/syncer_user.go | 17 +---------------- 3 files changed, 43 insertions(+), 17 deletions(-) diff --git a/object/syncer.go b/object/syncer.go index ce40e884..b827ce79 100644 --- a/object/syncer.go +++ b/object/syncer.go @@ -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 } diff --git a/object/syncer_cron.go b/object/syncer_cron.go index d6855c45..e402ed22 100644 --- a/object/syncer_cron.go +++ b/object/syncer_cron.go @@ -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) +} diff --git a/object/syncer_user.go b/object/syncer_user.go index 73f2d652..c3cf36ca 100644 --- a/object/syncer_user.go +++ b/object/syncer_user.go @@ -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))