context.go 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. package models
  2. import (
  3. "strings"
  4. "github.com/grafana/grafana/pkg/infra/log"
  5. "github.com/grafana/grafana/pkg/setting"
  6. "github.com/prometheus/client_golang/prometheus"
  7. "gopkg.in/macaron.v1"
  8. )
  9. type ReqContext struct {
  10. *macaron.Context
  11. *SignedInUser
  12. UserToken *UserToken
  13. IsSignedIn bool
  14. IsRenderCall bool
  15. AllowAnonymous bool
  16. SkipCache 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, setting.ERR_TEMPLATE_NAME)
  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. }