Rendering: Check timeout error when the request failed (#57654)

* Check timeout error when the request failed

* Update error and check

* Uses errors.As to fix the lint
This commit is contained in:
Selene 2022-10-27 17:27:03 +02:00 committed by GitHub
parent 2a36301817
commit bff9671b81
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 11 additions and 3 deletions

View File

@ -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)
}

View File

@ -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