Like Prometheus, but for logs.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 
loki/pkg/limits/http.go

42 lines
1.2 KiB

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,
})
}