Expensive bee
This commit is contained in:
@@ -15,19 +15,21 @@ type AlarmEvent struct {
|
||||
|
||||
// Scheduler checks alarms every second and fires events when they trigger.
|
||||
type Scheduler struct {
|
||||
store *db.Store
|
||||
events chan AlarmEvent
|
||||
stop chan struct{}
|
||||
mu sync.Mutex
|
||||
parser cron.Parser
|
||||
store db.AlarmStore
|
||||
events chan AlarmEvent
|
||||
stop chan struct{}
|
||||
mu sync.Mutex
|
||||
parser cron.Parser
|
||||
clientMode bool // If true, skip MarkTriggered/ToggleAlarm (server handles it)
|
||||
}
|
||||
|
||||
func New(store *db.Store) *Scheduler {
|
||||
func New(store db.AlarmStore, clientMode bool) *Scheduler {
|
||||
return &Scheduler{
|
||||
store: store,
|
||||
events: make(chan AlarmEvent, 10),
|
||||
stop: make(chan struct{}),
|
||||
parser: cron.NewParser(cron.Minute | cron.Hour | cron.Dom | cron.Month | cron.Dow),
|
||||
store: store,
|
||||
clientMode: clientMode,
|
||||
events: make(chan AlarmEvent, 10),
|
||||
stop: make(chan struct{}),
|
||||
parser: cron.NewParser(cron.Minute | cron.Hour | cron.Dom | cron.Month | cron.Dow),
|
||||
}
|
||||
}
|
||||
|
||||
@@ -90,11 +92,14 @@ func (s *Scheduler) check(now time.Time, firedThisMinute map[int]string) {
|
||||
|
||||
if s.shouldTrigger(a, now) {
|
||||
firedThisMinute[a.ID] = currentMinute
|
||||
_ = s.store.MarkTriggered(a.ID)
|
||||
|
||||
// Disable one-shot alarms after triggering
|
||||
if a.Trigger == "once" {
|
||||
_ = s.store.ToggleAlarm(a.ID)
|
||||
// In host mode, update the DB; in client mode, server handles this
|
||||
if !s.clientMode {
|
||||
_ = s.store.MarkTriggered(a.ID)
|
||||
// Disable one-shot alarms after triggering
|
||||
if a.Trigger == "once" {
|
||||
_ = s.store.ToggleAlarm(a.ID)
|
||||
}
|
||||
}
|
||||
|
||||
select {
|
||||
|
||||
Reference in New Issue
Block a user