Commit 05f9e5ee by Torkel Ödegaard

rendering

parent 4a73e2d0
......@@ -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);
});
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],
}
renderOpts.Url = "http://localhost:3000" + renderOpts.Url
log.Info("Rendering url %v", url)
pngPath, err := self.renderer.RenderToPng("http://localhost:3000" + url + "?render&accountId=" + strconv.Itoa(accountId))
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 {
......
......@@ -2,3 +2,4 @@
- OAuth and email, unique?
- Form authentication token
- Password hash
- Account security for png rendering
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment