From 3fa96bbfa60fafc57a10272ad624778c8c00e630 Mon Sep 17 00:00:00 2001 From: Egor Date: Sun, 15 Feb 2026 22:45:41 -0800 Subject: [PATCH] cache previously created signal groups better for potential re-use --- service/integration/signal/sender.go | 10 ++++++++-- service/notification/dispatcher.go | 19 +++++++++++++++---- service/server/handlers_subscriptions.go | 4 ---- 3 files changed, 23 insertions(+), 10 deletions(-) diff --git a/service/integration/signal/sender.go b/service/integration/signal/sender.go index 37dd0e3..3e060f6 100644 --- a/service/integration/signal/sender.go +++ b/service/integration/signal/sender.go @@ -45,10 +45,16 @@ func (s *Sender) CreateDefaultSignalSubscription(appName string) (*notification. return nil, err } - return ¬ification.SignalSubscription{ + signalSub := ¬ification.SignalSubscription{ GroupID: groupID, Account: account, - }, nil + } + + if err := s.store.SaveSignalGroup(appName, signalSub); err != nil { + s.logger.Warn("Failed to cache Signal group", "error", err) + } + + return signalSub, nil } func (s *Sender) Send(sub *notification.Subscription, notif notification.Notification) error { diff --git a/service/notification/dispatcher.go b/service/notification/dispatcher.go index 1489ba0..effb407 100644 --- a/service/notification/dispatcher.go +++ b/service/notification/dispatcher.go @@ -104,8 +104,7 @@ func (d *Dispatcher) Send(appName string, notif Notification) error { for _, sub := range app.Subscriptions { sender, ok := d.senders[sub.Channel] if !ok { - d.logger.Error("No sender for channel", "channel", sub.Channel, "subscriptionID", sub.ID) - lastErr = fmt.Errorf("no sender for channel: %s", sub.Channel) + d.logger.Debug("Skipping subscription for disabled channel", "channel", sub.Channel, "subscriptionID", sub.ID) continue } @@ -195,9 +194,21 @@ func (d *Dispatcher) trySignalAutoConfig(appName string) (*App, error) { return nil, fmt.Errorf("sender does not implement signal auto-configuration") } - signalSub, err := autoConfigurer.CreateDefaultSignalSubscription(appName) + var signalSub *SignalSubscription + + cachedGroup, err := d.store.GetSignalGroup(appName) if err != nil { - return nil, err + d.logger.Warn("Failed to check for cached Signal group", "error", err) + } + + if cachedGroup != nil { + d.logger.Debug("Reusing cached Signal group", "app", appName) + signalSub = cachedGroup + } else { + signalSub, err = autoConfigurer.CreateDefaultSignalSubscription(appName) + if err != nil { + return nil, err + } } subID, err := GenerateSubscriptionID() diff --git a/service/server/handlers_subscriptions.go b/service/server/handlers_subscriptions.go index bcfdd22..97ce34e 100644 --- a/service/server/handlers_subscriptions.go +++ b/service/server/handlers_subscriptions.go @@ -104,10 +104,6 @@ func (s *Server) handleCreateSubscription(w http.ResponseWriter, r *http.Request return } sub.Signal = signalSub - - if err := s.store.SaveSignalGroup(appName, signalSub); err != nil { - s.logger.Warn("Failed to cache Signal group", "error", err) - } } }