quota.go 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. package sqlstore
  2. import (
  3. "fmt"
  4. "github.com/grafana/grafana/pkg/bus"
  5. m "github.com/grafana/grafana/pkg/models"
  6. )
  7. func init() {
  8. bus.AddHandler("sql", GetQuotaByTarget)
  9. bus.AddHandler("sql", GetQuotas)
  10. bus.AddHandler("sql", UpdateQuota)
  11. }
  12. type targetCount struct {
  13. Count int64
  14. }
  15. func GetQuotaByTarget(query *m.GetQuotaByTargetQuery) error {
  16. quota := m.Quota{
  17. Target: query.Target,
  18. OrgId: query.OrgId,
  19. }
  20. has, err := x.Get(quota)
  21. if err != nil {
  22. return err
  23. } else if has == false {
  24. quota.Limit = m.DefaultQuotas[query.Target]
  25. }
  26. //get quota used.
  27. rawSql := fmt.Sprintf("SELECT COUNT(*) as count from %s where org_id=?", dialect.Quote(string(query.Target)))
  28. resp := make([]*targetCount, 0)
  29. if err := x.Sql(rawSql, query.OrgId).Find(&resp); err != nil {
  30. return err
  31. }
  32. query.Result = &m.QuotaDTO{
  33. Target: query.Target,
  34. Limit: quota.Limit,
  35. OrgId: query.OrgId,
  36. Used: resp[0].Count,
  37. }
  38. return nil
  39. }
  40. func GetQuotas(query *m.GetQuotasQuery) error {
  41. quotas := make([]*m.Quota, 0)
  42. sess := x.Table("quota")
  43. if err := sess.Where("org_id=?", query.OrgId).Find(&quotas); err != nil {
  44. return err
  45. }
  46. seenTargets := make(map[m.QuotaTarget]bool)
  47. for _, q := range quotas {
  48. seenTargets[q.Target] = true
  49. }
  50. for t, v := range m.DefaultQuotas {
  51. if _, ok := seenTargets[t]; !ok {
  52. quotas = append(quotas, &m.Quota{
  53. OrgId: query.OrgId,
  54. Target: t,
  55. Limit: v,
  56. })
  57. }
  58. }
  59. result := make([]*m.QuotaDTO, len(quotas))
  60. for i, q := range quotas {
  61. //get quota used.
  62. rawSql := fmt.Sprintf("SELECT COUNT(*) as count from %s where org_id=?", dialect.Quote(string(q.Target)))
  63. resp := make([]*targetCount, 0)
  64. if err := x.Sql(rawSql, q.OrgId).Find(&resp); err != nil {
  65. return err
  66. }
  67. result[i] = &m.QuotaDTO{
  68. Target: q.Target,
  69. Limit: q.Limit,
  70. OrgId: q.OrgId,
  71. Used: resp[0].Count,
  72. }
  73. }
  74. query.Result = result
  75. return nil
  76. }
  77. func UpdateQuota(cmd *m.UpdateQuotaCmd) error {
  78. return nil
  79. }