|
|
@@ -8,7 +8,6 @@ import (
|
|
|
"io/ioutil"
|
|
|
"log/slog"
|
|
|
"net"
|
|
|
- "net/http"
|
|
|
"os"
|
|
|
"path/filepath"
|
|
|
"runtime"
|
|
|
@@ -23,8 +22,6 @@ var (
|
|
|
Architecture = getArchitecture()
|
|
|
DebugMode = false
|
|
|
Ready = false
|
|
|
- VersionServerReady = false
|
|
|
- VersionInfo structs.Channel
|
|
|
GSContainers = make(map[string]structs.ContainerState)
|
|
|
checkInterval = 5 * time.Minute
|
|
|
confMutex sync.Mutex
|
|
|
@@ -184,97 +181,4 @@ func NetCheck(netCheck string) bool {
|
|
|
_ = conn.Close()
|
|
|
}
|
|
|
return internet
|
|
|
-}
|
|
|
-
|
|
|
-// check the version server and return struct
|
|
|
-func CheckVersion() (structs.Channel, bool) {
|
|
|
- versMutex.Lock()
|
|
|
- defer versMutex.Unlock()
|
|
|
- conf := Conf()
|
|
|
- releaseChannel := conf.UpdateBranch
|
|
|
- const retries = 10
|
|
|
- const delay = time.Second
|
|
|
- url := globalConfig.UpdateUrl
|
|
|
- var fetchedVersion structs.Version
|
|
|
- for i := 0; i < retries; i++ {
|
|
|
- resp, err := http.Get(url)
|
|
|
- if err != nil {
|
|
|
- errmsg := fmt.Sprintf("Unable to connect to update server: %v", err)
|
|
|
- logger.Warn(errmsg)
|
|
|
- if i < retries-1 {
|
|
|
- time.Sleep(delay)
|
|
|
- continue
|
|
|
- } else {
|
|
|
- VersionServerReady = false
|
|
|
- return VersionInfo, false
|
|
|
- }
|
|
|
- }
|
|
|
- // read the body bytes
|
|
|
- body, err := ioutil.ReadAll(resp.Body)
|
|
|
- resp.Body.Close()
|
|
|
- if err != nil {
|
|
|
- errmsg := fmt.Sprintf("Error reading version info: %v", err)
|
|
|
- logger.Warn(errmsg)
|
|
|
- if i < retries-1 {
|
|
|
- time.Sleep(delay)
|
|
|
- continue
|
|
|
- } else {
|
|
|
- VersionServerReady = false
|
|
|
- return VersionInfo, false
|
|
|
- }
|
|
|
- }
|
|
|
- // unmarshal values into Version struct
|
|
|
- err = json.Unmarshal(body, &fetchedVersion)
|
|
|
- if err != nil {
|
|
|
- errmsg := fmt.Sprintf("Error unmarshalling JSON: %v", err)
|
|
|
- logger.Warn(errmsg)
|
|
|
- if i < retries-1 {
|
|
|
- time.Sleep(delay)
|
|
|
- continue
|
|
|
- } else {
|
|
|
- VersionServerReady = false
|
|
|
- return VersionInfo, false
|
|
|
- }
|
|
|
- }
|
|
|
- VersionInfo = fetchedVersion.Groundseg[releaseChannel]
|
|
|
- // debug: re-marshal and write the entire fetched version to disk
|
|
|
- confPath := filepath.Join(BasePath, "settings", "version_info.json")
|
|
|
- file, err := os.Create(confPath)
|
|
|
- if err != nil {
|
|
|
- errmsg := fmt.Sprintf("Failed to create file: %v", err)
|
|
|
- logger.Error(errmsg)
|
|
|
- VersionServerReady = false
|
|
|
- return VersionInfo, false
|
|
|
- }
|
|
|
- defer file.Close()
|
|
|
- encoder := json.NewEncoder(file)
|
|
|
- encoder.SetIndent("", " ")
|
|
|
- if err := encoder.Encode(&fetchedVersion); err != nil {
|
|
|
- errmsg := fmt.Sprintf("Failed to write JSON: %v", err)
|
|
|
- logger.Error(errmsg)
|
|
|
- }
|
|
|
- VersionServerReady = true
|
|
|
- return VersionInfo, true
|
|
|
- }
|
|
|
- VersionServerReady = false
|
|
|
- return VersionInfo, false
|
|
|
-}
|
|
|
-
|
|
|
-func CheckVersionLoop() {
|
|
|
- ticker := time.NewTicker(checkInterval)
|
|
|
- conf := Conf()
|
|
|
- releaseChannel := conf.UpdateBranch
|
|
|
- for {
|
|
|
- select {
|
|
|
- case <-ticker.C:
|
|
|
- latestVersion, _ := CheckVersion()
|
|
|
- currentChannelVersion := VersionInfo
|
|
|
- latestChannelVersion := latestVersion
|
|
|
- if latestChannelVersion != currentChannelVersion {
|
|
|
- fmt.Printf("New version available in %s channel! Current: %+v, Latest: %+v\n", releaseChannel, currentChannelVersion, latestChannelVersion)
|
|
|
- VersionInfo = latestVersion
|
|
|
- // Handle the update logic here
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
-}
|
|
|
+}
|