github.com/grafana/pyroscope@v1.18.0/pkg/frontend/frontend_label_names.go (about)

     1  package frontend
     2  
     3  import (
     4  	"context"
     5  
     6  	"connectrpc.com/connect"
     7  	"github.com/grafana/dskit/tenant"
     8  	"github.com/prometheus/common/model"
     9  
    10  	"github.com/grafana/pyroscope/api/gen/proto/go/querier/v1/querierv1connect"
    11  	typesv1 "github.com/grafana/pyroscope/api/gen/proto/go/types/v1"
    12  	phlaremodel "github.com/grafana/pyroscope/pkg/model"
    13  	"github.com/grafana/pyroscope/pkg/util/connectgrpc"
    14  	"github.com/grafana/pyroscope/pkg/validation"
    15  )
    16  
    17  func (f *Frontend) LabelNames(
    18  	ctx context.Context,
    19  	c *connect.Request[typesv1.LabelNamesRequest],
    20  ) (*connect.Response[typesv1.LabelNamesResponse], error) {
    21  	ctx = connectgrpc.WithProcedure(ctx, querierv1connect.QuerierServiceLabelNamesProcedure)
    22  
    23  	tenantIDs, err := tenant.TenantIDs(ctx)
    24  	if err != nil {
    25  		return nil, connect.NewError(connect.CodeInvalidArgument, err)
    26  	}
    27  
    28  	interval, ok := phlaremodel.GetTimeRange(c.Msg)
    29  	if ok {
    30  		validated, err := validation.ValidateRangeRequest(f.limits, tenantIDs, interval, model.Now())
    31  		if err != nil {
    32  			return nil, connect.NewError(connect.CodeInvalidArgument, err)
    33  		}
    34  		if validated.IsEmpty {
    35  			return connect.NewResponse(&typesv1.LabelNamesResponse{}), nil
    36  		}
    37  		c.Msg.Start = int64(validated.Start)
    38  		c.Msg.End = int64(validated.End)
    39  	}
    40  
    41  	return connectgrpc.RoundTripUnary[typesv1.LabelNamesRequest, typesv1.LabelNamesResponse](ctx, f, c)
    42  }