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

51 lines
1.3 KiB

package limits
import (
"net/http"
"github.com/go-kit/log/level"
"github.com/gorilla/mux"
"github.com/grafana/loki/v3/pkg/util"
)
type httpTenantLimitsResponse struct {
Tenant string `json:"tenant"`
Streams uint64 `json:"streams"`
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
s.usage.IterTenant(tenant, func(_ string, _ int32, stream streamUsage) {
streams++
for _, bucket := range stream.rateBuckets {
sumBuckets += bucket.size
}
})
rate := float64(sumBuckets) / s.cfg.ActiveWindow.Seconds()
// Log the calculated values for debugging
level.Debug(s.logger).Log(
"msg", "HTTP endpoint calculated stream usage",
"tenant", tenant,
"streams", streams,
"sum_buckets", util.HumanizeBytes(sumBuckets),
"rate_window_seconds", s.cfg.RateWindow.Seconds(),
"rate", util.HumanizeBytes(uint64(rate)),
)
// Use util.WriteJSONResponse to write the JSON response
util.WriteJSONResponse(w, httpTenantLimitsResponse{
Tenant: tenant,
Streams: streams,
Rate: rate,
})
}