Cosmos-Server/src/CRON.go

113 lines
2.1 KiB
Go
Raw Normal View History

2023-03-31 19:19:38 +00:00
package main
import (
"io/ioutil"
"net/http"
"github.com/azukaar/cosmos-server/src/utils"
2023-05-15 19:23:06 +00:00
"github.com/azukaar/cosmos-server/src/docker"
2023-03-31 19:19:38 +00:00
"os"
"path/filepath"
"encoding/json"
2023-05-01 11:59:46 +00:00
"github.com/jasonlvhit/gocron"
"github.com/Masterminds/semver"
2023-03-31 19:19:38 +00:00
)
type Version struct {
Version string `json:"version"`
}
2023-05-01 11:59:46 +00:00
// compareSemver compares two semantic version strings.
// Returns:
// 0 if v1 == v2
// 1 if v1 > v2
// -1 if v1 < v2
// error if there's a problem parsing either version string
func compareSemver(v1, v2 string) (int, error) {
ver1, err := semver.NewVersion(v1)
if err != nil {
utils.Error("compareSemver 1 " + v1, err)
return 0, err
}
ver2, err := semver.NewVersion(v2)
if err != nil {
utils.Error("compareSemver 2 " + v2, err)
return 0, err
}
return ver1.Compare(ver2), nil
}
2023-03-31 19:19:38 +00:00
func checkVersion() {
2023-05-01 11:59:46 +00:00
utils.NewVersionAvailable = false
2023-03-31 19:19:38 +00:00
ex, err := os.Executable()
if err != nil {
panic(err)
}
exPath := filepath.Dir(ex)
pjs, errPR := os.Open(exPath + "/meta.json")
if errPR != nil {
utils.Error("checkVersion", errPR)
return
}
packageJson, _ := ioutil.ReadAll(pjs)
utils.Debug("checkVersion" + string(packageJson))
var version Version
errJ := json.Unmarshal(packageJson, &version)
if errJ != nil {
utils.Error("checkVersion", errJ)
return
}
myVersion := version.Version
2023-04-01 13:36:40 +00:00
response, err := http.Get("https://cosmos-cloud.io/versions/" + myVersion)
2023-03-31 19:19:38 +00:00
if err != nil {
utils.Error("checkVersion", err)
return
}
defer response.Body.Close()
body, err := ioutil.ReadAll(response.Body)
if err != nil {
utils.Error("checkVersion", err)
return
}
2023-05-01 11:59:46 +00:00
cp, errc := compareSemver(myVersion, string(body))
if errc != nil {
utils.Error("checkVersion", errc)
return
}
if cp == -1 {
2023-03-31 19:19:38 +00:00
utils.Log("New version available: " + string(body))
2023-05-01 11:59:46 +00:00
utils.NewVersionAvailable = true
2023-03-31 19:19:38 +00:00
} else {
utils.Log("No new version available")
}
}
2023-05-15 19:23:06 +00:00
func checkUpdatesAvailable() {
utils.UpdateAvailable = docker.CheckUpdatesAvailable()
}
2023-03-31 19:19:38 +00:00
func CRON() {
go func() {
gocron.Every(1).Day().At("00:00").Do(checkVersion)
<-gocron.Start()
}()
2023-05-15 19:23:06 +00:00
go func() {
gocron.Every(6).Hours().Do(checkUpdatesAvailable)
<-gocron.Start()
}()
2023-03-31 19:19:38 +00:00
}