Documentation
¶
Overview ¶
Package schedule provides a lightweight cron-style task scheduler for Nimbus.
Usage:
s := schedule.New()
s.Every(5*time.Minute, "cleanup-temp", func(ctx context.Context) error {
return os.RemoveAll("/tmp/nimbus-cache")
})
s.Daily("03:00", "send-reports", func(ctx context.Context) error {
return reportService.SendDailyDigest(ctx)
})
s.Start(ctx) // non-blocking, runs in background
defer s.Stop()
Index ¶
- func OnTaskRun(...)
- type Locker
- type RedisLocker
- type Scheduler
- func (s *Scheduler) Count() int
- func (s *Scheduler) Daily(at string, name string, fn Task) *Scheduler
- func (s *Scheduler) Every(interval time.Duration, name string, fn Task) *Scheduler
- func (s *Scheduler) EveryFiveMinutes(name string, fn Task) *Scheduler
- func (s *Scheduler) EveryMinute(name string, fn Task) *Scheduler
- func (s *Scheduler) Hourly(name string, fn Task) *Scheduler
- func (s *Scheduler) Start(ctx context.Context)
- func (s *Scheduler) Stop()
- func (s *Scheduler) WithLocker(locker Locker) *Scheduler
- type Task
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
Types ¶
type Locker ¶
type Locker interface {
TryLock(ctx context.Context, key string, ttl time.Duration) (unlock func(), acquired bool, err error)
}
Locker coordinates schedule execution across multiple app instances. When configured, each task tick tries to acquire a distributed lock and runs only on the lock holder.
type RedisLocker ¶
type RedisLocker struct {
// contains filtered or unexported fields
}
RedisLocker uses Redis SETNX + TTL for distributed task locking.
func NewRedisLocker ¶
func NewRedisLocker(client *redis.Client) *RedisLocker
NewRedisLocker creates a Redis-backed scheduler locker.
type Scheduler ¶
type Scheduler struct {
// contains filtered or unexported fields
}
Scheduler manages periodic tasks.
func (*Scheduler) Daily ¶
Daily registers a task that runs once per day at the given time (HH:MM in local timezone).
s.Daily("03:00", "nightly-cleanup", cleanupHandler)
func (*Scheduler) Every ¶
Every registers a task that runs at a fixed interval.
s.Every(30*time.Second, "ping-check", pingHandler)
func (*Scheduler) EveryFiveMinutes ¶
EveryFiveMinutes registers a task that runs every 5 minutes.
func (*Scheduler) EveryMinute ¶
EveryMinute registers a task that runs once per minute.
func (*Scheduler) Start ¶
Start begins running all scheduled tasks in the background. Call Stop or cancel the parent context to halt.
func (*Scheduler) WithLocker ¶
WithLocker enables distributed lock coordination for scheduled task runs. Use this in multi-instance deployments to avoid duplicate task execution.