Enable image rendering to use browser time offset

This commit is contained in:
Ryuichi Sakai
2017-01-15 18:15:20 +09:00
parent e5a6c523d7
commit 1bc55a2d38
4 changed files with 62 additions and 11 deletions

View File

@@ -6,6 +6,7 @@ import (
"os"
"os/exec"
"path/filepath"
"regexp"
"runtime"
"time"
@@ -15,18 +16,44 @@ import (
"github.com/grafana/grafana/pkg/middleware"
"github.com/grafana/grafana/pkg/setting"
"github.com/grafana/grafana/pkg/util"
"strings"
)
type RenderOpts struct {
Path string
Width string
Height string
Timeout string
OrgId int64
Path string
Width string
Height string
Timeout string
OrgId int64
TimeOffset string
}
var rendererLog log.Logger = log.New("png-renderer")
func isoTimeOffsetToPosixTz(isoOffset string) string {
re := regexp.MustCompile(`^([+-])([0-1][0-9]|2[0-4])([0-5][0-9])$`)
results := re.FindStringSubmatch(isoOffset)
if results == nil {
return ""
}
sign := "+"
if results[1] == "+" {
sign = "-" // "+" is west and "-" is east in POSIX TZ
}
return fmt.Sprintf("SOMEWHERE%s%s:%s", sign, results[2], results[3])
}
func appendEnviron(baseEnviron []string, name string, value string) []string {
results := make([]string, 0)
prefix := fmt.Sprintf("%s=", name)
for _, v := range baseEnviron {
if !strings.HasPrefix(v, prefix) {
results = append(results, v)
}
}
return append(results, fmt.Sprintf("%s=%s", name, value))
}
func RenderToPng(params *RenderOpts) (string, error) {
rendererLog.Info("Rendering", "path", params.Path)
@@ -73,6 +100,12 @@ func RenderToPng(params *RenderOpts) (string, error) {
return "", err
}
tz := isoTimeOffsetToPosixTz(params.TimeOffset)
if tz != "" {
baseEnviron := os.Environ()
cmd.Env = appendEnviron(baseEnviron, "TZ", tz)
}
err = cmd.Start()
if err != nil {
return "", err