main.go 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. package main
  2. import (
  3. "context"
  4. "os"
  5. "os/signal"
  6. "syscall"
  7. "networktool/internal/config"
  8. "networktool/internal/deviceinfo"
  9. "networktool/internal/discovery"
  10. "networktool/internal/httpserver"
  11. "networktool/internal/logger"
  12. applyexecsvc "networktool/internal/network/applyexec"
  13. configreadersvc "networktool/internal/network/configreader"
  14. interfacesvc "networktool/internal/network/interfaces"
  15. netplansvc "networktool/internal/network/netplan"
  16. validatorsvc "networktool/internal/network/validator"
  17. "networktool/internal/systemaction"
  18. "networktool/internal/tasks"
  19. )
  20. func main() {
  21. ctx, stop := signal.NotifyContext(context.Background(), syscall.SIGINT, syscall.SIGTERM)
  22. defer stop()
  23. log := logger.New()
  24. cfg := config.Load(os.Args[1:])
  25. log.Info("server starting", "version", cfg.ServerVersion)
  26. if os.Geteuid() != 0 {
  27. log.Warn("server is not running as root; netplan write/apply and system actions will fail")
  28. }
  29. deviceSvc := deviceinfo.New(cfg)
  30. interfaceSvc := interfacesvc.New(cfg)
  31. configSvc := configreadersvc.New()
  32. validatorSvc := validatorsvc.New()
  33. netplanSvc := netplansvc.New()
  34. applySvc := applyexecsvc.New()
  35. taskSvc := tasks.New()
  36. systemSvc := systemaction.New()
  37. if err := interfaceSvc.EnsureMaintenanceAddress(); err != nil {
  38. log.Error("failed to ensure maintenance address", "error", err.Error())
  39. return
  40. }
  41. httpSrv := httpserver.New(cfg, log, deviceSvc, interfaceSvc, configSvc, validatorSvc, netplanSvc, applySvc, taskSvc, systemSvc)
  42. udpSrv := discovery.New(cfg, log, deviceSvc)
  43. errCh := make(chan error, 2)
  44. go func() { errCh <- httpSrv.Run(ctx) }()
  45. go func() { errCh <- udpSrv.Run(ctx) }()
  46. select {
  47. case <-ctx.Done():
  48. log.Info("server shutting down")
  49. case err := <-errCh:
  50. if err != nil {
  51. log.Error("server stopped with error", "error", err.Error())
  52. }
  53. }
  54. }