Renderer: add version information (#34964)

* Renderer: add version information

* fix alerting test
pull/35254/head
Agnès Toulet 4 years ago committed by GitHub
parent b46715ee4a
commit 5f6c172b5a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 1
      packages/grafana-runtime/src/config.ts
  2. 1
      pkg/api/frontendsettings.go
  3. 4
      pkg/services/alerting/notifier_test.go
  4. 33
      pkg/services/rendering/http_mode.go
  5. 1
      pkg/services/rendering/interface.go
  6. 15
      pkg/services/rendering/rendering.go

@ -67,6 +67,7 @@ export class GrafanaBootConfig implements GrafanaConfig {
};
licenseInfo: LicenseInfo = {} as LicenseInfo;
rendererAvailable = false;
rendererVersion = '';
http2Enabled = false;
dateFormats?: SystemDateFormatSettings;
sentry = {

@ -241,6 +241,7 @@ func (hs *HTTPServer) getFrontendSettingsMap(c *models.ReqContext) (map[string]i
},
"featureToggles": hs.Cfg.FeatureToggles,
"rendererAvailable": hs.RenderService.IsAvailable(),
"rendererVersion": hs.RenderService.Version(),
"http2Enabled": hs.Cfg.Protocol == setting.HTTP2Scheme,
"sentry": hs.Cfg.Sentry,
"pluginCatalogURL": hs.Cfg.PluginCatalogURL,

@ -377,6 +377,10 @@ func (s *testRenderService) GetRenderUser(key string) (*rendering.RenderUser, bo
return nil, false
}
func (s *testRenderService) Version() string {
return ""
}
var _ rendering.Service = &testRenderService{}
type testImageUploader struct {

@ -2,6 +2,7 @@ package rendering
import (
"context"
"encoding/json"
"errors"
"fmt"
"io"
@ -192,3 +193,35 @@ func (rs *RenderingService) readFileResponse(ctx context.Context, resp *http.Res
return nil
}
func (rs *RenderingService) getRemotePluginVersion() (string, error) {
rendererURL, err := url.Parse(rs.Cfg.RendererUrl + "/version")
if err != nil {
return "", err
}
headers := make(map[string][]string)
resp, err := rs.doRequest(context.Background(), rendererURL, headers)
if err != nil {
return "", err
}
defer func() {
if err := resp.Body.Close(); err != nil {
rs.log.Warn("Failed to close response body", "err", err)
}
}()
if resp.StatusCode != http.StatusOK {
return "", fmt.Errorf("remote rendering request to get version failed, status code: %d, status: %s", resp.StatusCode,
resp.Status)
}
var info struct {
Version string
}
if err := json.NewDecoder(resp.Body).Decode(&info); err != nil {
return "", err
}
return info.Version, nil
}

@ -60,6 +60,7 @@ type renderCSVFunc func(ctx context.Context, renderKey string, options CSVOpts)
type Service interface {
IsAvailable() bool
Version() string
Render(ctx context.Context, opts Opts) (*RenderResult, error)
RenderCSV(ctx context.Context, opts CSVOpts) (*RenderCSVResult, error)
RenderErrorImage(error error) (*RenderResult, error)

@ -47,6 +47,7 @@ type RenderingService struct {
renderCSVAction renderCSVFunc
domain string
inProgressCount int
version string
Cfg *setting.Cfg `inject:""`
RemoteCacheService *remotecache.RemoteCache `inject:""`
@ -86,7 +87,14 @@ func (rs *RenderingService) Init() error {
func (rs *RenderingService) Run(ctx context.Context) error {
if rs.remoteAvailable() {
rs.log = rs.log.New("renderer", "http")
rs.log.Info("Backend rendering via external http server")
version, err := rs.getRemotePluginVersion()
if err != nil {
rs.log.Info("Couldn't get remote renderer version", "err", err)
}
rs.log.Info("Backend rendering via external http server", "version", version)
rs.version = version
rs.renderAction = rs.renderViaHTTP
rs.renderCSVAction = rs.renderCSVViaHTTP
<-ctx.Done()
@ -101,6 +109,7 @@ func (rs *RenderingService) Run(ctx context.Context) error {
return err
}
rs.version = rs.pluginInfo.Info.Version
rs.renderAction = rs.renderViaPlugin
rs.renderCSVAction = rs.renderCSVViaPlugin
<-ctx.Done()
@ -127,6 +136,10 @@ func (rs *RenderingService) IsAvailable() bool {
return rs.remoteAvailable() || rs.pluginAvailable()
}
func (rs *RenderingService) Version() string {
return rs.version
}
func (rs *RenderingService) RenderErrorImage(err error) (*RenderResult, error) {
imgUrl := "public/img/rendering_error.png"

Loading…
Cancel
Save