| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687 |
- package quota
- import (
- "github.com/grafana/grafana/pkg/bus"
- m "github.com/grafana/grafana/pkg/models"
- "github.com/grafana/grafana/pkg/services/session"
- "github.com/grafana/grafana/pkg/setting"
- )
- func QuotaReached(c *m.ReqContext, target string) (bool, error) {
- if !setting.Quota.Enabled {
- return false, nil
- }
- // get the list of scopes that this target is valid for. Org, User, Global
- scopes, err := m.GetQuotaScopes(target)
- if err != nil {
- return false, err
- }
- for _, scope := range scopes {
- c.Logger.Debug("Checking quota", "target", target, "scope", scope)
- switch scope.Name {
- case "global":
- if scope.DefaultLimit < 0 {
- continue
- }
- if scope.DefaultLimit == 0 {
- return true, nil
- }
- if target == "session" {
- usedSessions := session.GetSessionCount()
- if int64(usedSessions) > scope.DefaultLimit {
- c.Logger.Debug("Sessions limit reached", "active", usedSessions, "limit", scope.DefaultLimit)
- return true, nil
- }
- continue
- }
- query := m.GetGlobalQuotaByTargetQuery{Target: scope.Target}
- if err := bus.Dispatch(&query); err != nil {
- return true, err
- }
- if query.Result.Used >= scope.DefaultLimit {
- return true, nil
- }
- case "org":
- if !c.IsSignedIn {
- continue
- }
- query := m.GetOrgQuotaByTargetQuery{OrgId: c.OrgId, Target: scope.Target, Default: scope.DefaultLimit}
- if err := bus.Dispatch(&query); err != nil {
- return true, err
- }
- if query.Result.Limit < 0 {
- continue
- }
- if query.Result.Limit == 0 {
- return true, nil
- }
- if query.Result.Used >= query.Result.Limit {
- return true, nil
- }
- case "user":
- if !c.IsSignedIn || c.UserId == 0 {
- continue
- }
- query := m.GetUserQuotaByTargetQuery{UserId: c.UserId, Target: scope.Target, Default: scope.DefaultLimit}
- if err := bus.Dispatch(&query); err != nil {
- return true, err
- }
- if query.Result.Limit < 0 {
- continue
- }
- if query.Result.Limit == 0 {
- return true, nil
- }
- if query.Result.Used >= query.Result.Limit {
- return true, nil
- }
- }
- }
- return false, nil
- }
|