| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879 |
- package main
- import (
- "fmt"
- "goseg/config"
- "goseg/docker"
- "goseg/ws"
- "log/slog"
- "net/http"
- "os"
- "github.com/gorilla/mux"
- )
- var (
- logger = slog.New(slog.NewJSONHandler(os.Stdout, nil))
- DevMode = false
- )
- func loadService(loadFunc func() error, errMsg string) {
- go func() {
- if err := loadFunc(); err != nil {
- logger.Error(fmt.Sprintf("%s %v", errMsg, err))
- }
- }()
- }
- func main() {
- for _, arg := range os.Args[1:] {
- // trigger this with `./groundseg dev`
- if arg == "dev" {
- logger.Info("Starting GroundSeg in debug mode")
- DevMode = true
- }
- }
- logger.Info("Starting GroundSeg")
- logger.Info("Urbit is love <3")
- // global SysConfig var is managed through config package
- conf := config.Conf()
- internetAvailable := config.NetCheck("1.1.1.1:53")
- availMsg := fmt.Sprintf("Internet available: %t", internetAvailable)
- logger.Info(availMsg)
- // async operation to retrieve version info
- versionUpdateChannel := make(chan bool)
- if conf.UpdateMode == "auto" {
- go func() {
- _, versionUpdate := config.CheckVersion()
- if versionUpdate {
- logger.Info("Version info retrieved")
- }
- versionUpdateChannel <- versionUpdate
- }()
- }
- go config.CheckVersionLoop()
- // just making sure we can parse (debug)
- var pierList string
- for _, pier := range conf.Piers {
- pierList = pierList + ", " + pier
- }
- logger.Info(pierList)
- // block until returns (debug)
- <-versionUpdateChannel
- // Load Netdata
- loadService(docker.LoadNetdata, "Unable to load Netdata!")
- // Load Wireguard
- loadService(docker.LoadWireguard, "Unable to load Wireguard!")
- // Load Urbits
- loadService(docker.LoadUrbits, "Unable to load Urbit ships!")
- // Load MC
- loadService(docker.LoadMC, "Unable to load MinIO Client!")
- // Load MinIOs
- loadService(docker.LoadMinIOs, "Unable to load MinIO containers!")
- // Websocket
- r := mux.NewRouter()
- r.HandleFunc("/ws", ws.WsHandler)
- http.ListenAndServe(":3000", r)
- }
|