diff --git a/pkg/services/rendering/http_mode.go b/pkg/services/rendering/http_mode.go index c08921c7c92..6e5677f48e4 100644 --- a/pkg/services/rendering/http_mode.go +++ b/pkg/services/rendering/http_mode.go @@ -137,8 +137,8 @@ func (rs *RenderingService) renderCSVViaHTTP(ctx context.Context, renderKey stri return &RenderCSVResult{FilePath: filePath, FileName: downloadFileName}, nil } -func (rs *RenderingService) doRequest(ctx context.Context, url *url.URL, headers map[string][]string) (*http.Response, error) { - req, err := http.NewRequestWithContext(ctx, "GET", url.String(), nil) +func (rs *RenderingService) doRequest(ctx context.Context, u *url.URL, headers map[string][]string) (*http.Response, error) { + req, err := http.NewRequestWithContext(ctx, "GET", u.String(), nil) if err != nil { return nil, err } @@ -149,12 +149,18 @@ func (rs *RenderingService) doRequest(ctx context.Context, url *url.URL, headers req.Header[k] = v } - rs.log.Debug("calling remote rendering service", "url", url) + rs.log.Debug("calling remote rendering service", "url", u) // make request to renderer server resp, err := netClient.Do(req) if err != nil { rs.log.Error("Failed to send request to remote rendering service", "error", err) + var urlErr *url.Error + if errors.As(err, &urlErr) { + if urlErr.Timeout() { + return nil, ErrServerTimeout + } + } return nil, fmt.Errorf("failed to send request to remote rendering service: %w", err) } diff --git a/pkg/services/rendering/interface.go b/pkg/services/rendering/interface.go index 859ebf112f7..1748a37248e 100644 --- a/pkg/services/rendering/interface.go +++ b/pkg/services/rendering/interface.go @@ -7,11 +7,13 @@ import ( "github.com/grafana/grafana/pkg/models" "github.com/grafana/grafana/pkg/services/org" + "github.com/grafana/grafana/pkg/util/errutil" ) var ErrTimeout = errors.New("timeout error - you can set timeout in seconds with &timeout url parameter") var ErrConcurrentLimitReached = errors.New("rendering concurrent limit reached") var ErrRenderUnavailable = errors.New("rendering plugin not available") +var ErrServerTimeout = errutil.NewBase(errutil.StatusUnknown, "rendering.serverTimeout", errutil.WithPublicMessage("error trying to connect to image-renderer service")) type RenderType string