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 }