1
0
forked from extern/smegmesh
smegmesh/pkg/sync/syncscheduler.go

56 lines
1.1 KiB
Go
Raw Normal View History

2023-10-10 21:14:40 +02:00
package sync
import (
"time"
"github.com/tim-beatham/wgmesh/pkg/ctrlserver"
logging "github.com/tim-beatham/wgmesh/pkg/log"
2023-10-10 21:14:40 +02:00
)
// SyncScheduler: Loops through all nodes in the mesh and runs a schedule to
// sync each event
type SyncScheduler interface {
Run() error
Stop() error
}
// SyncSchedulerImpl scheduler for sync scheduling
2023-10-10 21:14:40 +02:00
type SyncSchedulerImpl struct {
2023-11-03 16:24:18 +01:00
quit chan struct{}
server *ctrlserver.MeshCtrlServer
syncer Syncer
2023-10-10 21:14:40 +02:00
}
// Run implements SyncScheduler.
func (s *SyncSchedulerImpl) Run() error {
2023-11-03 16:24:18 +01:00
ticker := time.NewTicker(time.Duration(s.server.Conf.SyncRate) * time.Second)
2023-10-10 21:14:40 +02:00
quit := make(chan struct{})
s.quit = quit
for {
select {
case <-ticker.C:
err := s.syncer.SyncMeshes()
if err != nil {
2023-10-24 01:12:38 +02:00
logging.Log.WriteErrorf(err.Error())
}
2023-10-10 21:14:40 +02:00
break
case <-quit:
break
}
}
}
// Stop implements SyncScheduler.
func (s *SyncSchedulerImpl) Stop() error {
close(s.quit)
return nil
}
2023-11-03 16:24:18 +01:00
func NewSyncScheduler(s *ctrlserver.MeshCtrlServer, syncRequester SyncRequester) SyncScheduler {
syncer := NewSyncer(s.MeshManager, s.Conf, syncRequester)
return &SyncSchedulerImpl{server: s, syncer: syncer}
2023-10-10 21:14:40 +02:00
}