github.com/grafana/pyroscope@v1.18.0/pkg/settings/recording/client/client.go (about)

     1  package recording
     2  
     3  import (
     4  	"context"
     5  
     6  	"connectrpc.com/connect"
     7  	"github.com/go-kit/log"
     8  	"github.com/go-kit/log/level"
     9  	"github.com/grafana/dskit/services"
    10  
    11  	settingsv1 "github.com/grafana/pyroscope/api/gen/proto/go/settings/v1"
    12  	"github.com/grafana/pyroscope/api/gen/proto/go/settings/v1/settingsv1connect"
    13  	connectapi "github.com/grafana/pyroscope/pkg/api/connect"
    14  	phlaremodel "github.com/grafana/pyroscope/pkg/model"
    15  	"github.com/grafana/pyroscope/pkg/tenant"
    16  	"github.com/grafana/pyroscope/pkg/util"
    17  )
    18  
    19  type Client struct {
    20  	service services.Service
    21  	client  settingsv1connect.RecordingRulesServiceClient
    22  	logger  log.Logger
    23  }
    24  
    25  func NewClient(address string, logger log.Logger, auth connect.Option) (*Client, error) {
    26  	httpClient := util.InstrumentedDefaultHTTPClient()
    27  	opts := connectapi.DefaultClientOptions()
    28  	opts = append(opts, auth)
    29  	c := Client{
    30  		client: settingsv1connect.NewRecordingRulesServiceClient(httpClient, address, opts...),
    31  		logger: logger,
    32  	}
    33  	c.service = services.NewIdleService(c.starting, c.stopping)
    34  	return &c, nil
    35  }
    36  
    37  func (b *Client) RecordingRules(tenantId string) ([]*phlaremodel.RecordingRule, error) {
    38  	ctx := tenant.InjectTenantID(context.Background(), tenantId)
    39  	resp, err := b.client.ListRecordingRules(ctx, connect.NewRequest(&settingsv1.ListRecordingRulesRequest{}))
    40  	if err != nil {
    41  		return nil, err
    42  	}
    43  	rules := make([]*phlaremodel.RecordingRule, 0, len(resp.Msg.Rules))
    44  	for _, rule := range resp.Msg.Rules {
    45  		r, err := phlaremodel.NewRecordingRule(rule)
    46  		if err == nil {
    47  			rules = append(rules, r)
    48  		} else {
    49  			level.Error(b.logger).Log("msg", "failed to parse recording rule", "rule", rule, "err", err)
    50  		}
    51  	}
    52  	return rules, nil
    53  }
    54  
    55  func (b *Client) Service() services.Service      { return b.service }
    56  func (b *Client) starting(context.Context) error { return nil }
    57  func (b *Client) stopping(error) error           { return nil }