From 457ff83c238eabf82156fade7999ee826c58e238 Mon Sep 17 00:00:00 2001 From: Joel Wetzell Date: Sat, 7 Feb 2026 12:48:27 -0600 Subject: [PATCH] add more convenience methods for start/stopping modules on router --- router.go | 40 +++++++++++++++++++++++++++++----------- 1 file changed, 29 insertions(+), 11 deletions(-) diff --git a/router.go b/router.go index 5e28f1e..eeca6f4 100644 --- a/router.go +++ b/router.go @@ -50,12 +50,35 @@ func (r *Router) addModule(moduleDecl config.ModuleConfig) error { } func (r *Router) removeModule(moduleId string) error { - moduleInstance, ok := r.ModuleInstances[moduleId] - if !ok { + err := r.stopModule(moduleId) + if err != nil { + return err + } + delete(r.ModuleInstances, moduleId) + return nil +} + +func (r *Router) runModule(ctx context.Context, moduleId string) error { + moduleInstance := r.getModule(moduleId) + if moduleInstance == nil { + return errors.New("module id not found") + } + r.moduleWait.Go(func() { + err := moduleInstance.Run(ctx) + if err != nil { + // TODO(jwetzell): propagate module run errors better + r.logger.Error("error encountered running module", "moduleId", moduleId, "error", err) + } + }) + return nil +} + +func (r *Router) stopModule(moduleId string) error { + moduleInstance := r.getModule(moduleId) + if moduleInstance == nil { return errors.New("module id not found") } moduleInstance.Stop() - delete(r.ModuleInstances, moduleId) return nil } @@ -132,14 +155,9 @@ func (r *Router) Run(ctx context.Context) { r.contextCancel = cancel contextWithRouter := context.WithValue(routerContext, route.RouterContextKey, r) - for _, moduleInstance := range r.ModuleInstances { - r.moduleWait.Go(func() { - err := moduleInstance.Run(contextWithRouter) - if err != nil { - // TODO(jwetzell): handle module run errors better - r.logger.Error("error encountered running module", "error", err) - } - }) + for moduleId := range r.ModuleInstances { + // TODO(jwetzell): handle module run errors + r.runModule(contextWithRouter, moduleId) } <-r.Context.Done() r.logger.Debug("waiting for modules to exit")