mirror of
https://github.com/aljazceru/ark.git
synced 2025-12-18 20:54:20 +01:00
* sweeper base implementation * sweeper service final implementation * fixes * fix CSV script * RoundSwept event fix & test * remove Vtxos after a sweep transaction * ARK_ROUND_LIFETIME config * remove TxBuilder.GetLifetime * refactor sweeper * use GetTransaction blocktime * polish and comments * fix linting * pair programming fixes * several fixes * clean Println * fixes * linter fixes * remove infrastructure deps from application layer * Fixes --------- Co-authored-by: altafan <18440657+altafan@users.noreply.github.com>
46 lines
954 B
Go
46 lines
954 B
Go
package scheduler
|
|
|
|
import (
|
|
"fmt"
|
|
"time"
|
|
|
|
"github.com/ark-network/ark/internal/core/ports"
|
|
"github.com/go-co-op/gocron"
|
|
)
|
|
|
|
type service struct {
|
|
scheduler *gocron.Scheduler
|
|
}
|
|
|
|
func NewScheduler() ports.SchedulerService {
|
|
svc := gocron.NewScheduler(time.UTC)
|
|
return &service{svc}
|
|
}
|
|
|
|
func (s *service) Start() {
|
|
s.scheduler.StartAsync()
|
|
}
|
|
|
|
func (s *service) Stop() {
|
|
s.scheduler.Stop()
|
|
}
|
|
|
|
func (s *service) ScheduleTask(interval int64, immediate bool, task func()) error {
|
|
if immediate {
|
|
_, err := s.scheduler.Every(int(interval)).Seconds().Do(task)
|
|
return err
|
|
}
|
|
_, err := s.scheduler.Every(int(interval)).Seconds().WaitForSchedule().Do(task)
|
|
return err
|
|
}
|
|
|
|
func (s *service) ScheduleTaskOnce(at int64, task func()) error {
|
|
delay := at - time.Now().Unix()
|
|
if delay < 0 {
|
|
return fmt.Errorf("cannot schedule task in the past")
|
|
}
|
|
|
|
_, err := s.scheduler.Every(int(delay)).Seconds().WaitForSchedule().LimitRunsTo(1).Do(task)
|
|
return err
|
|
}
|