Prechádzať zdrojové kódy

better version error handling

reid 2 rokov pred
rodič
commit
7c7fd59c90
3 zmenil súbory, kde vykonal 52 pridanie a 34 odobranie
  1. 9 1
      config/config.go
  2. 27 0
      config/version.go
  3. 16 33
      main.go

+ 9 - 1
config/config.go

@@ -1,4 +1,5 @@
 package config
+// code for managing groundseg and container configurations
 
 import (
 	"encoding/json"
@@ -16,14 +17,21 @@ import (
 )
 
 var (
-	globalConfig   structs.SysConfig
 	logger         = slog.New(slog.NewJSONHandler(os.Stdout, nil))
+	// global settings config (accessed via funcs)
+	globalConfig   structs.SysConfig
+	// base path for installation (override default with env var)
 	BasePath       = os.Getenv("GS_BASE_PATH")
+	// only amd64 or arm64
 	Architecture   = getArchitecture()
+	// struct of /retrieve blob
 	StartramConfig structs.StartramRetrieve
+	// unused for now, set with `./groundseg dev`
 	DebugMode      = false
 	Ready          = false
+	// representation of desired/actual container states
 	GSContainers   = make(map[string]structs.ContainerState)
+	// version server check
 	checkInterval  = 5 * time.Minute
 	confMutex      sync.Mutex
 	contMutex      sync.Mutex

+ 27 - 0
config/version.go

@@ -128,3 +128,30 @@ func CreateDefaultVersion() error {
 	}
 	return nil
 }
+
+// return the existing local version info or create default
+func LocalVersion() structs.Version {
+	confPath := filepath.Join(BasePath, "settings", "version_info.json")
+	_, err := os.Open(confPath)
+	if err != nil {
+		// create a default if it doesn't exist
+		err = CreateDefaultVersion()
+		if err != nil {
+			// panic if we can't create it
+			errmsg := fmt.Sprintf("Unable to write version info! %v", err)
+			logger.Error(errmsg)
+			panic(errmsg)
+		}
+	}
+	file, err := ioutil.ReadFile(confPath)
+	if err != nil {
+		errmsg := fmt.Sprintf("Unable to load version info: %v", err)
+		panic(errmsg)
+	}
+	var versionStruct structs.Version
+	if err := json.Unmarshal(file, &versionStruct); err != nil {
+		errmsg := fmt.Sprintf("Error decoding version JSON: %v", err)
+		panic(errmsg)
+	}
+	return versionStruct
+}

+ 16 - 33
main.go

@@ -15,21 +15,17 @@ package main
 // - Very good golang Docker libraries
 
 import (
-	"encoding/json"
 	"fmt"
 	"goseg/config"
 	"goseg/docker"
 	"goseg/rectify"
 	"goseg/startram"
-	"goseg/structs"
 	"goseg/ws"
-	"io/ioutil"
 	"log/slog"
 	"net/http"
 	"os"
-	"path/filepath"
 	"strings"
-	// "time"
+	"time"
 
 	"github.com/gorilla/mux"
 )
@@ -68,29 +64,7 @@ func main() {
 		}()
 		// otherwise use cached if possible, or save hardcoded defaults and use that
 	} else {
-		confPath := filepath.Join(config.BasePath, "settings", "version_info.json")
-		_, err := os.Open(confPath)
-		if err != nil {
-			// create a default if it doesn't exist
-			err = config.CreateDefaultVersion()
-			if err != nil {
-				// panic if we can't create it
-				errmsg := fmt.Sprintf("Unable to write version info! %v", err)
-				logger.Error(errmsg)
-				panic(errmsg)
-			}
-		}
-		file, err := ioutil.ReadFile(confPath)
-		if err != nil {
-			errmsg := fmt.Sprintf("Unable to load version info: %v", err)
-			panic(errmsg)
-		}
-		var versionStruct structs.Version
-		if err := json.Unmarshal(file, &versionStruct); err != nil {
-			errmsg := fmt.Sprintf("Error decoding version JSON: %v", err)
-			panic(errmsg)
-		}
-		// Store in var
+		versionStruct := config.LocalVersion()
 		releaseChannel := conf.UpdateBranch
 		targetChan := versionStruct.Groundseg[releaseChannel]
 		config.VersionInfo = targetChan
@@ -106,12 +80,21 @@ func main() {
 		pierList := strings.Join(conf.Piers, ", ")
 		logger.Info(fmt.Sprintf("Loaded piers: %s", pierList))
 	}
-	// block until returns
-	if remoteVersion == true {
-		<-versionUpdateChannel
-	}
+	// get the startram config from server
 	if conf.WgRegistered == true {
-		startram.Retrieve()
+		_, err := startram.Retrieve()
+		if err != nil {
+			logger.Warn(fmt.Sprintf("Could not retrieve StarTram/Anchor config: %v",err))
+		}
+	}
+	// block until version info returns
+	if remoteVersion == true {
+		select {
+		case <-versionUpdateChannel:
+			logger.Info("Version info retrieved")
+		case <-time.After(10 * time.Second):
+			logger.Warn("Could not retrieve version info after 10 seconds!")
+		}
 	}
 	// Load Netdata
 	loadService(docker.LoadNetdata, "Unable to load Netdata!")