diff --git a/pkg/services/rendering/http_mode.go b/pkg/services/rendering/http_mode.go index 3617b3296bd..e8820b9e1f9 100644 --- a/pkg/services/rendering/http_mode.go +++ b/pkg/services/rendering/http_mode.go @@ -29,8 +29,9 @@ var netClient = &http.Client{ } var ( - remoteVersionFetchInterval time.Duration = time.Second * 15 - remoteVersionFetchRetries uint = 4 + remoteVersionFetchInterval time.Duration = time.Second * 15 + remoteVersionFetchRetries uint = 4 + remoteVersionRefreshInterval = time.Minute * 15 ) func (rs *RenderingService) renderViaHTTP(ctx context.Context, renderKey string, opts Opts) (*RenderResult, error) { @@ -251,3 +252,26 @@ func (rs *RenderingService) getRemotePluginVersion() (string, error) { } return info.Version, nil } + +func (rs *RenderingService) refreshRemotePluginVersion() { + newVersion, err := rs.getRemotePluginVersion() + if err != nil { + rs.log.Info("Failed to refresh remote plugin version", "err", err) + return + } + + if newVersion == "" { + // the image-renderer could have been temporary unavailable - skip updating the version + rs.log.Debug("Received empty version when trying to refresh remote plugin version") + return + } + + currentVersion := rs.Version() + if currentVersion != newVersion { + rs.versionMutex.Lock() + defer rs.versionMutex.Unlock() + + rs.log.Info("Updating remote plugin version", "currentVersion", currentVersion, "newVersion", newVersion) + rs.version = newVersion + } +} diff --git a/pkg/services/rendering/rendering.go b/pkg/services/rendering/rendering.go index d62a4447ed1..2de807cb5a4 100644 --- a/pkg/services/rendering/rendering.go +++ b/pkg/services/rendering/rendering.go @@ -120,8 +120,19 @@ func (rs *RenderingService) Run(ctx context.Context) error { }) rs.renderAction = rs.renderViaHTTP rs.renderCSVAction = rs.renderCSVViaHTTP - <-ctx.Done() - return nil + + refreshTicker := time.NewTicker(remoteVersionRefreshInterval) + + for { + select { + case <-refreshTicker.C: + go rs.refreshRemotePluginVersion() + case <-ctx.Done(): + rs.log.Debug("Grafana is shutting down - stopping image-renderer version refresh") + refreshTicker.Stop() + return nil + } + } } if rs.pluginAvailable() {