func (n *RootNotifier) uploadImage(context *EvalContext) (err error) { uploader, err := imguploader.NewImageUploader() if err != nil { return err } renderOpts := &renderer.RenderOpts{ Width: "800", Height: "400", Timeout: "30", OrgId: context.Rule.OrgId, } if slug, err := context.GetDashboardSlug(); err != nil { return err } else { renderOpts.Path = fmt.Sprintf("dashboard-solo/db/%s?&panelId=%d", slug, context.Rule.PanelId) } if imagePath, err := renderer.RenderToPng(renderOpts); err != nil { return err } else { context.ImageOnDiskPath = imagePath } context.ImagePublicUrl, err = uploader.Upload(context.ImageOnDiskPath) if err != nil { return err } n.log.Info("uploaded", "url", context.ImagePublicUrl) return nil }
func RenderToPng(c *middleware.Context) { queryReader := util.NewUrlQueryReader(c.Req.URL) queryParams := fmt.Sprintf("?%s", c.Req.URL.RawQuery) sessionId := c.Session.ID() // Handle api calls authenticated without session if sessionId == "" && c.ApiKeyId != 0 { c.Session.Start(c) c.Session.Set(middleware.SESS_KEY_APIKEY, c.ApiKeyId) // release will make sure the new session is persisted before // we spin up phantomjs c.Session.Release() // cleanup session after render is complete defer func() { c.Session.Destory(c) }() } renderOpts := &renderer.RenderOpts{ Url: c.Params("*") + queryParams, Width: queryReader.Get("width", "800"), Height: queryReader.Get("height", "400"), SessionId: c.Session.ID(), } renderOpts.Url = setting.ToAbsUrl(renderOpts.Url) pngPath, err := renderer.RenderToPng(renderOpts) if err != nil { c.Handle(500, "Failed to render to png", err) return } c.Resp.Header().Set("Content-Type", "image/png") http.ServeFile(c.Resp, c.Req.Request, pngPath) }
func (n *RootNotifier) uploadImage(context *EvalContext) error { uploader, _ := imguploader.NewImageUploader() imageUrl, err := context.GetImageUrl() if err != nil { return err } renderOpts := &renderer.RenderOpts{ Url: imageUrl, Width: "800", Height: "400", SessionId: "cef0256d482b4293", Timeout: "30", } if imagePath, err := renderer.RenderToPng(renderOpts); err != nil { return err } else { context.ImageOnDiskPath = imagePath } context.ImagePublicUrl, err = uploader.Upload(context.ImageOnDiskPath) if err != nil { return err } n.log.Info("uploaded", "url", context.ImagePublicUrl) return nil }
func RenderToPng(c *middleware.Context) { queryReader := util.NewUrlQueryReader(c.Req.URL) queryParams := fmt.Sprintf("?%s", c.Req.URL.RawQuery) renderOpts := &renderer.RenderOpts{ Path: c.Params("*") + queryParams, Width: queryReader.Get("width", "800"), Height: queryReader.Get("height", "400"), OrgId: c.OrgId, Timeout: queryReader.Get("timeout", "30"), } pngPath, err := renderer.RenderToPng(renderOpts) if err != nil { c.Handle(500, "Failed to render to png", err) return } c.Resp.Header().Set("Content-Type", "image/png") http.ServeFile(c.Resp, c.Req.Request, pngPath) }