mirror of
https://github.com/aljazceru/ark.git
synced 2025-12-17 04:04:21 +01:00
* add "block" scheduler type + sweep integration test * increase timeout in integrationtests * remove config logs * rename scheduler package name * rename package * rename packages
49 lines
976 B
Go
49 lines
976 B
Go
package timescheduler
|
|
|
|
import (
|
|
"fmt"
|
|
"time"
|
|
|
|
"github.com/ark-network/ark/server/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) Unit() ports.TimeUnit {
|
|
return ports.UnixTime
|
|
}
|
|
|
|
func (s *service) AddNow(lifetime int64) int64 {
|
|
return time.Now().Add(time.Duration(lifetime) * time.Second).Unix()
|
|
}
|
|
|
|
func (s *service) AfterNow(expiry int64) bool {
|
|
return time.Unix(expiry, 0).After(time.Now())
|
|
}
|
|
|
|
func (s *service) Start() {
|
|
s.scheduler.StartAsync()
|
|
}
|
|
|
|
func (s *service) Stop() {
|
|
s.scheduler.Stop()
|
|
}
|
|
|
|
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
|
|
}
|