Expensive bee

This commit is contained in:
2026-02-03 16:49:05 +02:00
parent d3f29e3927
commit cdcdf2c644
10 changed files with 376 additions and 50 deletions

View File

@@ -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 {