rendering

This commit is contained in:
Torkel Ödegaard 2014-10-01 21:07:58 +02:00
parent 4a73e2d0e9
commit 05f9e5eef1
5 changed files with 40 additions and 17 deletions

View File

@ -17,18 +17,27 @@ if (!params.url || !params.png) {
} }
page.viewportSize = { page.viewportSize = {
width: '800', width: params.width || '800',
height: '400' height: params.height || '400'
}; };
page.open(params.url, function (status) { page.open(params.url, function (status) {
console.log('Loading a web page: ' + params.url); console.log('Loading a web page: ' + params.url);
setTimeout(function() { function checkIsReady() {
console.log('rendering panel to ' + params.png); var canvas = page.evaluate(function() {
return $('canvas').length > 0;
});
page.render(params.png); if (canvas) {
phantom.exit(); page.render(params.png);
phantom.exit();
}
else {
setTimeout(checkIsReady, 10);
}
}
setTimeout(checkIsReady, 200);
}, 2000);
}); });

@ -1 +1 @@
Subproject commit de1de852fc130d6b5c75c28a93aab38bbbe726b8 Subproject commit eb28e63c08a43ada747fbcdae9612301c9c7a531

View File

@ -3,22 +3,29 @@ package api
import ( import (
"strconv" "strconv"
log "github.com/alecthomas/log4go"
"github.com/gin-gonic/gin" "github.com/gin-gonic/gin"
"github.com/torkelo/grafana-pro/pkg/components"
) )
func init() { func init() {
addRoutes(func(self *HttpServer) { 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) { func (self *HttpServer) renderToPng(c *gin.Context, auth *authContext) {
url := c.Params.ByName("url")
accountId := auth.getAccountId() 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) renderOpts.Url = "http://localhost:3000" + renderOpts.Url
pngPath, err := self.renderer.RenderToPng("http://localhost:3000" + url + "?render&accountId=" + strconv.Itoa(accountId))
pngPath, err := self.renderer.RenderToPng(renderOpts)
if err != nil { if err != nil {
c.HTML(500, "error.html", nil) c.HTML(500, "error.html", nil)
} }

View File

@ -17,14 +17,20 @@ type PhantomRenderer struct {
PhantomDir string PhantomDir string
} }
func (self *PhantomRenderer) RenderToPng(url string) (string, error) { type RenderOpts struct {
log.Info("PhantomRenderer::renderToPng url %v", url) 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")) binPath, _ := filepath.Abs(filepath.Join(self.PhantomDir, "phantomjs"))
scriptPath, _ := filepath.Abs(filepath.Join(self.PhantomDir, "render.js")) 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" 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() stdout, err := cmd.StdoutPipe()
if err != nil { if err != nil {

View File

@ -2,3 +2,4 @@
- OAuth and email, unique? - OAuth and email, unique?
- Form authentication token - Form authentication token
- Password hash - Password hash
- Account security for png rendering