67 lines
1.3 KiB
Go
67 lines
1.3 KiB
Go
package main
|
|
|
|
import (
|
|
"sync/atomic"
|
|
"syscall"
|
|
"time"
|
|
|
|
"github.com/weaveworks/go-checkpoint"
|
|
)
|
|
|
|
var checker *checkpoint.Checker
|
|
var newVersion atomic.Value
|
|
var success atomic.Value
|
|
|
|
const (
|
|
updateCheckPeriod = 6 * time.Hour
|
|
)
|
|
|
|
func checkForUpdates(dockerVersion string, network string) {
|
|
newVersion.Store("")
|
|
success.Store(true)
|
|
|
|
handleResponse := func(r *checkpoint.CheckResponse, err error) {
|
|
if err != nil {
|
|
success.Store(false)
|
|
Log.Printf("Error checking version: %v", err)
|
|
return
|
|
}
|
|
if r.Outdated {
|
|
newVersion.Store(r.CurrentVersion)
|
|
Log.Printf("Weave version %s is available; please update at %s",
|
|
r.CurrentVersion, r.CurrentDownloadURL)
|
|
}
|
|
}
|
|
|
|
var uts syscall.Utsname
|
|
syscall.Uname(&uts)
|
|
|
|
release := uts.Release[:]
|
|
releaseBytes := make([]byte, len(release))
|
|
i := 0
|
|
for ; i < len(release); i++ {
|
|
if release[i] == 0 {
|
|
break
|
|
}
|
|
releaseBytes[i] = uint8(release[i])
|
|
}
|
|
kernelVersion := string(releaseBytes[:i])
|
|
|
|
flags := map[string]string{
|
|
"docker-version": dockerVersion,
|
|
"kernel-version": kernelVersion,
|
|
}
|
|
if network != "" {
|
|
flags["network"] = network
|
|
}
|
|
|
|
// Start background version checking
|
|
params := checkpoint.CheckParams{
|
|
Product: "weave-net",
|
|
Version: version,
|
|
SignatureFile: "",
|
|
Flags: flags,
|
|
}
|
|
checker = checkpoint.CheckInterval(¶ms, updateCheckPeriod, handleResponse)
|
|
}
|