context.go 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. package models
  2. import (
  3. "strings"
  4. "github.com/prometheus/client_golang/prometheus"
  5. "gopkg.in/macaron.v1"
  6. "github.com/grafana/grafana/pkg/log"
  7. "github.com/grafana/grafana/pkg/services/session"
  8. "github.com/grafana/grafana/pkg/setting"
  9. )
  10. type ReqContext struct {
  11. *macaron.Context
  12. *SignedInUser
  13. Session session.SessionStore
  14. IsSignedIn bool
  15. IsRenderCall bool
  16. AllowAnonymous bool
  17. Logger log.Logger
  18. }
  19. // Handle handles and logs error by given status.
  20. func (ctx *ReqContext) Handle(status int, title string, err error) {
  21. if err != nil {
  22. ctx.Logger.Error(title, "error", err)
  23. if setting.Env != setting.PROD {
  24. ctx.Data["ErrorMsg"] = err
  25. }
  26. }
  27. ctx.Data["Title"] = title
  28. ctx.Data["AppSubUrl"] = setting.AppSubUrl
  29. ctx.Data["Theme"] = "dark"
  30. ctx.HTML(status, "error")
  31. }
  32. func (ctx *ReqContext) JsonOK(message string) {
  33. resp := make(map[string]interface{})
  34. resp["message"] = message
  35. ctx.JSON(200, resp)
  36. }
  37. func (ctx *ReqContext) IsApiRequest() bool {
  38. return strings.HasPrefix(ctx.Req.URL.Path, "/api")
  39. }
  40. func (ctx *ReqContext) JsonApiErr(status int, message string, err error) {
  41. resp := make(map[string]interface{})
  42. if err != nil {
  43. ctx.Logger.Error(message, "error", err)
  44. if setting.Env != setting.PROD {
  45. resp["error"] = err.Error()
  46. }
  47. }
  48. switch status {
  49. case 404:
  50. resp["message"] = "Not Found"
  51. case 500:
  52. resp["message"] = "Internal Server Error"
  53. }
  54. if message != "" {
  55. resp["message"] = message
  56. }
  57. ctx.JSON(status, resp)
  58. }
  59. func (ctx *ReqContext) HasUserRole(role RoleType) bool {
  60. return ctx.OrgRole.Includes(role)
  61. }
  62. func (ctx *ReqContext) HasHelpFlag(flag HelpFlags1) bool {
  63. return ctx.HelpFlags1.HasFlag(flag)
  64. }
  65. func (ctx *ReqContext) TimeRequest(timer prometheus.Summary) {
  66. ctx.Data["perfmon.timer"] = timer
  67. }