github.com/grafana/pyroscope@v1.18.0/pkg/validation/user_limits_handler.go (about) 1 // SPDX-License-Identifier: AGPL-3.0-only 2 3 package validation 4 5 import ( 6 "net/http" 7 8 "github.com/grafana/dskit/tenant" 9 10 "github.com/grafana/pyroscope/pkg/util" 11 httputil "github.com/grafana/pyroscope/pkg/util/http" 12 ) 13 14 type TenantLimitsResponse struct { 15 // Write path limits 16 IngestionRate float64 `json:"ingestion_rate"` 17 IngestionBurstSize int `json:"ingestion_burst_size"` 18 MaxGlobalSeriesPerTenant int `json:"max_global_series_per_user"` 19 20 // todo 21 } 22 23 // TenantLimitsHandler handles user limits. 24 func TenantLimitsHandler(defaultLimits Limits, tenantLimits TenantLimits) http.HandlerFunc { 25 return func(w http.ResponseWriter, r *http.Request) { 26 userID, err := tenant.TenantID(r.Context()) 27 if err != nil { 28 httputil.ErrorWithStatus(w, err, http.StatusUnauthorized) 29 return 30 } 31 32 userLimits := tenantLimits.TenantLimits(userID) 33 if userLimits == nil { 34 userLimits = &defaultLimits 35 } 36 37 limits := TenantLimitsResponse{ 38 // Write path limits 39 IngestionRate: userLimits.IngestionRateMB, 40 IngestionBurstSize: int(userLimits.IngestionBurstSizeMB), 41 MaxGlobalSeriesPerTenant: userLimits.MaxGlobalSeriesPerTenant, 42 } 43 44 util.WriteJSONResponse(w, limits) 45 } 46 }