mirror of
https://github.com/netbirdio/netbird.git
synced 2025-06-24 19:51:33 +02:00
[management] check and log on new management version (#4029)
This PR enhances the version checker to send a custom User-Agent header when polling for updates, and configures both the management CLI and client UI to use distinct agents. - NewUpdate now takes an `httpAgent` string to set the User-Agent header. - `fetchVersion` builds a custom HTTP request (instead of `http.Get`) and sets the User-Agent. - Management CLI and client UI now pass `"nb/management"` and `"nb/client-ui"` respectively to NewUpdate. - Tests updated to supply an `httpAgent` constant. - Logs if there is a new version available for management
This commit is contained in:
parent
870e29db63
commit
5343bee7b2
@ -280,7 +280,7 @@ func newServiceClient(addr string, logFile string, a fyne.App, showSettings bool
|
|||||||
|
|
||||||
showAdvancedSettings: showSettings,
|
showAdvancedSettings: showSettings,
|
||||||
showNetworks: showNetworks,
|
showNetworks: showNetworks,
|
||||||
update: version.NewUpdate(),
|
update: version.NewUpdate("nb/client-ui"),
|
||||||
}
|
}
|
||||||
|
|
||||||
s.eventHandler = newEventHandler(s)
|
s.eventHandler = newEventHandler(s)
|
||||||
|
@ -357,6 +357,13 @@ var (
|
|||||||
log.WithContext(ctx).Infof("running HTTP server and gRPC server on the same port: %s", listener.Addr().String())
|
log.WithContext(ctx).Infof("running HTTP server and gRPC server on the same port: %s", listener.Addr().String())
|
||||||
serveGRPCWithHTTP(ctx, listener, rootHandler, tlsEnabled)
|
serveGRPCWithHTTP(ctx, listener, rootHandler, tlsEnabled)
|
||||||
|
|
||||||
|
update := version.NewUpdate("nb/management")
|
||||||
|
update.SetDaemonVersion(version.NetbirdVersion())
|
||||||
|
update.SetOnUpdateListener(func() {
|
||||||
|
log.WithContext(ctx).Infof("your management version, \"%s\", is outdated, a new management version is available. Learn more here: https://github.com/netbirdio/netbird/releases", version.NetbirdVersion())
|
||||||
|
})
|
||||||
|
defer update.StopWatch()
|
||||||
|
|
||||||
SetupCloseHandler()
|
SetupCloseHandler()
|
||||||
|
|
||||||
<-stopCh
|
<-stopCh
|
||||||
|
@ -21,6 +21,7 @@ var (
|
|||||||
// Update fetch the version info periodically and notify the onUpdateListener in case the UI version or the
|
// Update fetch the version info periodically and notify the onUpdateListener in case the UI version or the
|
||||||
// daemon version are deprecated
|
// daemon version are deprecated
|
||||||
type Update struct {
|
type Update struct {
|
||||||
|
httpAgent string
|
||||||
uiVersion *goversion.Version
|
uiVersion *goversion.Version
|
||||||
daemonVersion *goversion.Version
|
daemonVersion *goversion.Version
|
||||||
latestAvailable *goversion.Version
|
latestAvailable *goversion.Version
|
||||||
@ -34,7 +35,7 @@ type Update struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// NewUpdate instantiate Update and start to fetch the new version information
|
// NewUpdate instantiate Update and start to fetch the new version information
|
||||||
func NewUpdate() *Update {
|
func NewUpdate(httpAgent string) *Update {
|
||||||
currentVersion, err := goversion.NewVersion(version)
|
currentVersion, err := goversion.NewVersion(version)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
currentVersion, _ = goversion.NewVersion("0.0.0")
|
currentVersion, _ = goversion.NewVersion("0.0.0")
|
||||||
@ -43,6 +44,7 @@ func NewUpdate() *Update {
|
|||||||
latestAvailable, _ := goversion.NewVersion("0.0.0")
|
latestAvailable, _ := goversion.NewVersion("0.0.0")
|
||||||
|
|
||||||
u := &Update{
|
u := &Update{
|
||||||
|
httpAgent: httpAgent,
|
||||||
latestAvailable: latestAvailable,
|
latestAvailable: latestAvailable,
|
||||||
uiVersion: currentVersion,
|
uiVersion: currentVersion,
|
||||||
fetchTicker: time.NewTicker(fetchPeriod),
|
fetchTicker: time.NewTicker(fetchPeriod),
|
||||||
@ -112,7 +114,15 @@ func (u *Update) startFetcher() {
|
|||||||
func (u *Update) fetchVersion() bool {
|
func (u *Update) fetchVersion() bool {
|
||||||
log.Debugf("fetching version info from %s", versionURL)
|
log.Debugf("fetching version info from %s", versionURL)
|
||||||
|
|
||||||
resp, err := http.Get(versionURL)
|
req, err := http.NewRequest("GET", versionURL, nil)
|
||||||
|
if err != nil {
|
||||||
|
log.Errorf("failed to create request for version info: %s", err)
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
req.Header.Set("User-Agent", u.httpAgent)
|
||||||
|
|
||||||
|
resp, err := http.DefaultClient.Do(req)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Errorf("failed to fetch version info: %s", err)
|
log.Errorf("failed to fetch version info: %s", err)
|
||||||
return false
|
return false
|
||||||
|
@ -9,6 +9,8 @@ import (
|
|||||||
"time"
|
"time"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
const httpAgent = "pkg/test"
|
||||||
|
|
||||||
func TestNewUpdate(t *testing.T) {
|
func TestNewUpdate(t *testing.T) {
|
||||||
version = "1.0.0"
|
version = "1.0.0"
|
||||||
svr := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
svr := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
||||||
@ -21,7 +23,7 @@ func TestNewUpdate(t *testing.T) {
|
|||||||
wg.Add(1)
|
wg.Add(1)
|
||||||
|
|
||||||
onUpdate := false
|
onUpdate := false
|
||||||
u := NewUpdate()
|
u := NewUpdate(httpAgent)
|
||||||
defer u.StopWatch()
|
defer u.StopWatch()
|
||||||
u.SetOnUpdateListener(func() {
|
u.SetOnUpdateListener(func() {
|
||||||
onUpdate = true
|
onUpdate = true
|
||||||
@ -46,7 +48,7 @@ func TestDoNotUpdate(t *testing.T) {
|
|||||||
wg.Add(1)
|
wg.Add(1)
|
||||||
|
|
||||||
onUpdate := false
|
onUpdate := false
|
||||||
u := NewUpdate()
|
u := NewUpdate(httpAgent)
|
||||||
defer u.StopWatch()
|
defer u.StopWatch()
|
||||||
u.SetOnUpdateListener(func() {
|
u.SetOnUpdateListener(func() {
|
||||||
onUpdate = true
|
onUpdate = true
|
||||||
@ -71,7 +73,7 @@ func TestDaemonUpdate(t *testing.T) {
|
|||||||
wg.Add(1)
|
wg.Add(1)
|
||||||
|
|
||||||
onUpdate := false
|
onUpdate := false
|
||||||
u := NewUpdate()
|
u := NewUpdate(httpAgent)
|
||||||
defer u.StopWatch()
|
defer u.StopWatch()
|
||||||
u.SetOnUpdateListener(func() {
|
u.SetOnUpdateListener(func() {
|
||||||
onUpdate = true
|
onUpdate = true
|
||||||
|
Loading…
x
Reference in New Issue
Block a user