main.go 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. // Command routerd consumes alerts from NATS JetStream, resolves
  2. // recipients (companies → groups → individuals ∩ subscriptions),
  3. // and enqueues one delivery per (individual, channel) to
  4. // deliveries.<channel>.<company_id> subjects.
  5. //
  6. // M0: connects to NATS, /health, /metrics. No business logic yet.
  7. package main
  8. import (
  9. "context"
  10. "os"
  11. "os/signal"
  12. "syscall"
  13. "git3.techno-world.net/lrosales/broad-announce/internal/broker"
  14. "git3.techno-world.net/lrosales/broad-announce/internal/config"
  15. "git3.techno-world.net/lrosales/broad-announce/internal/httpserver"
  16. "git3.techno-world.net/lrosales/broad-announce/internal/observability"
  17. )
  18. func main() {
  19. cfg, err := config.LoadCommon("routerd")
  20. if err != nil {
  21. os.Stderr.WriteString("config: " + err.Error() + "\n")
  22. os.Exit(1)
  23. }
  24. logger := observability.Init(cfg.Env, cfg.LogLevel, "routerd")
  25. logger.Info("starting", "env", cfg.Env, "addr", cfg.HTTPAddr)
  26. ctx, stop := signal.NotifyContext(context.Background(), os.Interrupt, syscall.SIGTERM)
  27. defer stop()
  28. br, err := broker.Connect(ctx, cfg.NATSURL)
  29. if err != nil {
  30. logger.Error("nats connect", "err", err)
  31. os.Exit(1)
  32. }
  33. defer br.Close()
  34. logger.Info("nats connected")
  35. reg, _ := observability.NewRegistry("routerd")
  36. srv := httpserver.New(httpserver.Config{
  37. Addr: cfg.HTTPAddr,
  38. ServiceName: "routerd",
  39. ShutdownGrace: cfg.ShutdownGrace,
  40. }, logger, observability.MetricsHandler(reg))
  41. errCh := make(chan error, 1)
  42. go func() { errCh <- srv.Start() }()
  43. select {
  44. case <-ctx.Done():
  45. logger.Info("shutdown signal received")
  46. case err := <-errCh:
  47. if err != nil {
  48. logger.Error("http server", "err", err)
  49. os.Exit(1)
  50. }
  51. }
  52. if err := srv.Shutdown(ctx); err != nil {
  53. logger.Warn("graceful shutdown", "err", err)
  54. }
  55. logger.Info("bye")
  56. }