main.go 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. package main
  2. import (
  3. "fmt"
  4. "goseg/config"
  5. "goseg/docker"
  6. "goseg/rectify"
  7. "goseg/ws"
  8. "log/slog"
  9. "net/http"
  10. "os"
  11. "github.com/gorilla/mux"
  12. )
  13. var (
  14. logger = slog.New(slog.NewJSONHandler(os.Stdout, nil))
  15. DevMode = false
  16. )
  17. func loadService(loadFunc func() error, errMsg string) {
  18. go func() {
  19. if err := loadFunc(); err != nil {
  20. logger.Error(fmt.Sprintf("%s %v", errMsg, err))
  21. }
  22. }()
  23. }
  24. func main() {
  25. for _, arg := range os.Args[1:] {
  26. // trigger this with `./groundseg dev`
  27. if arg == "dev" {
  28. logger.Info("Starting GroundSeg in debug mode")
  29. DevMode = true
  30. }
  31. }
  32. logger.Info("Starting GroundSeg")
  33. logger.Info("Urbit is love <3")
  34. // global SysConfig var is managed through config package
  35. conf := config.Conf()
  36. internetAvailable := config.NetCheck("1.1.1.1:53")
  37. availMsg := fmt.Sprintf("Internet available: %t", internetAvailable)
  38. logger.Info(availMsg)
  39. // async operation to retrieve version info
  40. versionUpdateChannel := make(chan bool)
  41. if conf.UpdateMode == "auto" {
  42. go func() {
  43. _, versionUpdate := config.CheckVersion()
  44. if versionUpdate {
  45. logger.Info("Version info retrieved")
  46. }
  47. versionUpdateChannel <- versionUpdate
  48. }()
  49. }
  50. // infinite version check loop
  51. go config.CheckVersionLoop()
  52. // listen to docker daemon
  53. go docker.DockerListener()
  54. // digest docker events from eventbus
  55. go rectify.DockerSubscriptionHandler()
  56. // just making sure we can parse (debug)
  57. var pierList string
  58. for _, pier := range conf.Piers {
  59. pierList = pierList + ", " + pier
  60. }
  61. logger.Info(pierList)
  62. // block until returns (debug)
  63. <-versionUpdateChannel
  64. // Load Netdata
  65. loadService(docker.LoadNetdata, "Unable to load Netdata!")
  66. // Load Wireguard
  67. loadService(docker.LoadWireguard, "Unable to load Wireguard!")
  68. // Load Urbits
  69. loadService(docker.LoadUrbits, "Unable to load Urbit ships!")
  70. // Load MC
  71. loadService(docker.LoadMC, "Unable to load MinIO Client!")
  72. // Load MinIOs
  73. loadService(docker.LoadMinIOs, "Unable to load MinIO containers!")
  74. // Websocket
  75. r := mux.NewRouter()
  76. r.HandleFunc("/ws", ws.WsHandler)
  77. http.ListenAndServe(":3000", r)
  78. }