mirror of
https://github.com/grafana/grafana.git
synced 2025-01-26 16:27:02 -06:00
rendering
This commit is contained in:
parent
4a73e2d0e9
commit
05f9e5eef1
@ -17,18 +17,27 @@ if (!params.url || !params.png) {
|
||||
}
|
||||
|
||||
page.viewportSize = {
|
||||
width: '800',
|
||||
height: '400'
|
||||
width: params.width || '800',
|
||||
height: params.height || '400'
|
||||
};
|
||||
|
||||
page.open(params.url, function (status) {
|
||||
console.log('Loading a web page: ' + params.url);
|
||||
|
||||
setTimeout(function() {
|
||||
console.log('rendering panel to ' + params.png);
|
||||
function checkIsReady() {
|
||||
var canvas = page.evaluate(function() {
|
||||
return $('canvas').length > 0;
|
||||
});
|
||||
|
||||
page.render(params.png);
|
||||
phantom.exit();
|
||||
if (canvas) {
|
||||
page.render(params.png);
|
||||
phantom.exit();
|
||||
}
|
||||
else {
|
||||
setTimeout(checkIsReady, 10);
|
||||
}
|
||||
}
|
||||
|
||||
setTimeout(checkIsReady, 200);
|
||||
|
||||
}, 2000);
|
||||
});
|
||||
|
2
grafana
2
grafana
@ -1 +1 @@
|
||||
Subproject commit de1de852fc130d6b5c75c28a93aab38bbbe726b8
|
||||
Subproject commit eb28e63c08a43ada747fbcdae9612301c9c7a531
|
@ -3,22 +3,29 @@ package api
|
||||
import (
|
||||
"strconv"
|
||||
|
||||
log "github.com/alecthomas/log4go"
|
||||
"github.com/gin-gonic/gin"
|
||||
"github.com/torkelo/grafana-pro/pkg/components"
|
||||
)
|
||||
|
||||
func init() {
|
||||
addRoutes(func(self *HttpServer) {
|
||||
self.addRoute("GET", "/api/render/*url", self.renderToPng)
|
||||
self.addRoute("GET", "/render/*url", self.renderToPng)
|
||||
})
|
||||
}
|
||||
|
||||
func (self *HttpServer) renderToPng(c *gin.Context, auth *authContext) {
|
||||
url := c.Params.ByName("url")
|
||||
accountId := auth.getAccountId()
|
||||
query := c.Request.URL.Query()
|
||||
queryParams := "?render&accountId=" + strconv.Itoa(accountId) + "&" + c.Request.URL.RawQuery
|
||||
renderOpts := &components.RenderOpts{
|
||||
Url: c.Params.ByName("url") + queryParams,
|
||||
Width: query["width"][0],
|
||||
Height: query["height"][0],
|
||||
}
|
||||
|
||||
log.Info("Rendering url %v", url)
|
||||
pngPath, err := self.renderer.RenderToPng("http://localhost:3000" + url + "?render&accountId=" + strconv.Itoa(accountId))
|
||||
renderOpts.Url = "http://localhost:3000" + renderOpts.Url
|
||||
|
||||
pngPath, err := self.renderer.RenderToPng(renderOpts)
|
||||
if err != nil {
|
||||
c.HTML(500, "error.html", nil)
|
||||
}
|
||||
|
@ -17,14 +17,20 @@ type PhantomRenderer struct {
|
||||
PhantomDir string
|
||||
}
|
||||
|
||||
func (self *PhantomRenderer) RenderToPng(url string) (string, error) {
|
||||
log.Info("PhantomRenderer::renderToPng url %v", url)
|
||||
type RenderOpts struct {
|
||||
Url string
|
||||
Width string
|
||||
Height string
|
||||
}
|
||||
|
||||
func (self *PhantomRenderer) RenderToPng(params *RenderOpts) (string, error) {
|
||||
log.Info("PhantomRenderer::renderToPng url %v", params.Url)
|
||||
binPath, _ := filepath.Abs(filepath.Join(self.PhantomDir, "phantomjs"))
|
||||
scriptPath, _ := filepath.Abs(filepath.Join(self.PhantomDir, "render.js"))
|
||||
pngPath, _ := filepath.Abs(filepath.Join(self.ImagesDir, getHash(url)))
|
||||
pngPath, _ := filepath.Abs(filepath.Join(self.ImagesDir, getHash(params.Url)))
|
||||
pngPath = pngPath + ".png"
|
||||
|
||||
cmd := exec.Command(binPath, scriptPath, "url="+url, "width=100", "height=100", "png="+pngPath)
|
||||
cmd := exec.Command(binPath, scriptPath, "url="+params.Url, "width="+params.Width, "height="+params.Height, "png="+pngPath)
|
||||
stdout, err := cmd.StdoutPipe()
|
||||
|
||||
if err != nil {
|
||||
|
Loading…
Reference in New Issue
Block a user