mirror of
https://github.com/grafana/loki.git
synced 2026-03-13 09:33:58 +08:00
43 lines
1.2 KiB
Go
43 lines
1.2 KiB
Go
package limits
|
|
|
|
import (
|
|
"net/http"
|
|
|
|
"github.com/gorilla/mux"
|
|
|
|
"github.com/grafana/loki/v3/pkg/util"
|
|
)
|
|
|
|
type httpTenantLimitsResponse struct {
|
|
Tenant string `json:"tenant"`
|
|
StreamsTotal uint64 `json:"streams_total"`
|
|
StreamsByPolicy map[string]uint64 `json:"streams_by_policy"`
|
|
Rate float64 `json:"rate"`
|
|
}
|
|
|
|
// ServeHTTP implements the http.Handler interface.
|
|
// It returns the current stream counts and status per tenant as a JSON response.
|
|
func (s *Service) ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
|
tenant := mux.Vars(r)["tenant"]
|
|
if tenant == "" {
|
|
http.Error(w, "invalid tenant", http.StatusBadRequest)
|
|
return
|
|
}
|
|
var streams, sumBuckets uint64
|
|
streamsByPolicy := make(map[string]uint64)
|
|
for _, stream := range s.usage.TenantActiveStreams(tenant) {
|
|
streams++
|
|
for _, bucket := range stream.rateBuckets {
|
|
sumBuckets += bucket.size
|
|
}
|
|
streamsByPolicy[stream.policy]++
|
|
}
|
|
rate := float64(sumBuckets) / s.cfg.ActiveWindow.Seconds()
|
|
util.WriteJSONResponse(w, httpTenantLimitsResponse{
|
|
Tenant: tenant,
|
|
StreamsTotal: streams,
|
|
StreamsByPolicy: streamsByPolicy,
|
|
Rate: rate,
|
|
})
|
|
}
|