From 43073da7eb11444ae751ce34528117db4ccbc916 Mon Sep 17 00:00:00 2001 From: bergquist Date: Thu, 10 Mar 2016 16:02:10 +0100 Subject: [PATCH] feat(renderer): add timeout for the renderer api closes #4325 --- pkg/api/render.go | 1 + pkg/components/renderer/renderer.go | 9 ++++++++- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/pkg/api/render.go b/pkg/api/render.go index 728128acaab..9ed0c5ee6d7 100644 --- a/pkg/api/render.go +++ b/pkg/api/render.go @@ -31,6 +31,7 @@ func RenderToPng(c *middleware.Context) { Width: queryReader.Get("width", "800"), Height: queryReader.Get("height", "400"), SessionId: c.Session.ID(), + Timeout: queryReader.Get("timeout", "15"), } renderOpts.Url = setting.ToAbsUrl(renderOpts.Url) diff --git a/pkg/components/renderer/renderer.go b/pkg/components/renderer/renderer.go index d72ceca9c3d..f81da43c295 100644 --- a/pkg/components/renderer/renderer.go +++ b/pkg/components/renderer/renderer.go @@ -11,6 +11,7 @@ import ( "github.com/grafana/grafana/pkg/log" "github.com/grafana/grafana/pkg/setting" "github.com/grafana/grafana/pkg/util" + "strconv" ) type RenderOpts struct { @@ -18,6 +19,7 @@ type RenderOpts struct { Width string Height string SessionId string + Timeout string } func RenderToPng(params *RenderOpts) (string, error) { @@ -60,8 +62,13 @@ func RenderToPng(params *RenderOpts) (string, error) { close(done) }() + timeout, err := strconv.Atoi(params.Timeout) + if err != nil { + timeout = 15 + } + select { - case <-time.After(15 * time.Second): + case <-time.After(time.Duration(timeout) * time.Second): if err := cmd.Process.Kill(); err != nil { log.Error(4, "failed to kill: %v", err) }