context.go 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  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. SkipCache bool
  18. Logger log.Logger
  19. }
  20. // Handle handles and logs error by given status.
  21. func (ctx *ReqContext) Handle(status int, title string, err error) {
  22. if err != nil {
  23. ctx.Logger.Error(title, "error", err)
  24. if setting.Env != setting.PROD {
  25. ctx.Data["ErrorMsg"] = err
  26. }
  27. }
  28. ctx.Data["Title"] = title
  29. ctx.Data["AppSubUrl"] = setting.AppSubUrl
  30. ctx.Data["Theme"] = "dark"
  31. ctx.HTML(status, setting.ERR_TEMPLATE_NAME)
  32. }
  33. func (ctx *ReqContext) JsonOK(message string) {
  34. resp := make(map[string]interface{})
  35. resp["message"] = message
  36. ctx.JSON(200, resp)
  37. }
  38. func (ctx *ReqContext) IsApiRequest() bool {
  39. return strings.HasPrefix(ctx.Req.URL.Path, "/api")
  40. }
  41. func (ctx *ReqContext) JsonApiErr(status int, message string, err error) {
  42. resp := make(map[string]interface{})
  43. if err != nil {
  44. ctx.Logger.Error(message, "error", err)
  45. if setting.Env != setting.PROD {
  46. resp["error"] = err.Error()
  47. }
  48. }
  49. switch status {
  50. case 404:
  51. resp["message"] = "Not Found"
  52. case 500:
  53. resp["message"] = "Internal Server Error"
  54. }
  55. if message != "" {
  56. resp["message"] = message
  57. }
  58. ctx.JSON(status, resp)
  59. }
  60. func (ctx *ReqContext) HasUserRole(role RoleType) bool {
  61. return ctx.OrgRole.Includes(role)
  62. }
  63. func (ctx *ReqContext) HasHelpFlag(flag HelpFlags1) bool {
  64. return ctx.HelpFlags1.HasFlag(flag)
  65. }
  66. func (ctx *ReqContext) TimeRequest(timer prometheus.Summary) {
  67. ctx.Data["perfmon.timer"] = timer
  68. }