@@ -2,13 +2,16 @@ package dashboard
22
33import (
44 "context"
5+ "encoding/json"
56 "github.com/gin-gonic/gin"
7+ "github.com/hashicorp/go-version"
68 "github.com/komodorio/helm-dashboard/pkg/dashboard/scanners"
79 "github.com/komodorio/helm-dashboard/pkg/dashboard/subproc"
810 "github.com/komodorio/helm-dashboard/pkg/dashboard/utils"
911 log "github.com/sirupsen/logrus"
1012 "net/http"
1113 "os"
14+ "time"
1215)
1316
1417func StartServer (version string ) (string , utils.ControlChan ) {
@@ -19,6 +22,9 @@ func StartServer(version string) (string, utils.ControlChan) {
1922 os .Exit (1 ) // TODO: propagate error instead?
2023 }
2124
25+ data .VersionInfo = & subproc.VersionInfo {CurVer : version }
26+ go checkUpgrade (data .VersionInfo )
27+
2228 discoverScanners (& data )
2329
2430 address := os .Getenv ("HD_BIND" )
@@ -33,7 +39,7 @@ func StartServer(version string) (string, utils.ControlChan) {
3339 }
3440
3541 abort := make (utils.ControlChan )
36- api := NewRouter (abort , & data , version )
42+ api := NewRouter (abort , & data )
3743 done := startBackgroundServer (address , api , abort )
3844
3945 return "http://" + address , done
@@ -75,3 +81,44 @@ func discoverScanners(data *subproc.DataLayer) {
7581 }
7682 }
7783}
84+
85+ func checkUpgrade (d * subproc.VersionInfo ) {
86+ url := "https://api.github.com/repos/komodorio/helm-dashboard/releases/latest"
87+ type GHRelease struct {
88+ Name string `json:"name"`
89+ }
90+
91+ var myClient = & http.Client {Timeout : 5 * time .Second }
92+ r , err := myClient .Get (url )
93+ if err != nil {
94+ log .Warnf ("Failed to check for new version: %s" , err )
95+ return
96+ }
97+ defer r .Body .Close ()
98+
99+ target := new (GHRelease )
100+ err = json .NewDecoder (r .Body ).Decode (target )
101+ if err != nil {
102+ log .Warnf ("Failed to decode new release version: %s" , err )
103+ return
104+ }
105+ d .LatestVer = target .Name
106+
107+ v1 , err := version .NewVersion (d .CurVer )
108+ if err != nil {
109+ log .Warnf ("Failed to parse version: %s" , err )
110+ v1 = & version.Version {}
111+ }
112+
113+ v2 , err := version .NewVersion (d .LatestVer )
114+ if err != nil {
115+ log .Warnf ("Failed to parse version: %s" , err )
116+ } else {
117+ if v1 .LessThan (v2 ) {
118+ log .Warnf ("Newer Helm Dashboard version is available: %s" , d .LatestVer )
119+ log .Warnf ("Upgrade instructions: https://github.com/komodorio/helm-dashboard#installing" )
120+ } else {
121+ log .Debugf ("Got latest version from GH: %s" , d .LatestVer )
122+ }
123+ }
124+ }
0 commit comments