Skip to content

Commit

Permalink
fix: (metrics) nsure that generic connector metrics are consistent wi…
Browse files Browse the repository at this point in the history
…th other connectors
  • Loading branch information
laouji committed Jan 2, 2025
1 parent 0f61586 commit c83444f
Show file tree
Hide file tree
Showing 5 changed files with 14 additions and 37 deletions.
6 changes: 2 additions & 4 deletions internal/connectors/plugins/public/generic/client/accounts.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,14 +5,12 @@ import (
"time"

"github.com/formancehq/payments/genericclient"
"github.com/formancehq/payments/internal/connectors/metrics"
)

func (c *client) ListAccounts(ctx context.Context, page, pageSize int64, createdAtFrom time.Time) ([]genericclient.Account, error) {
start := time.Now()
defer c.recordMetrics(ctx, start, "list_accounts")

req := c.apiClient.DefaultApi.
GetAccounts(ctx).
GetAccounts(metrics.OperationContext(ctx, "list_accounts")).
Page(page).
PageSize(pageSize)

Expand Down
7 changes: 2 additions & 5 deletions internal/connectors/plugins/public/generic/client/balances.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,16 +2,13 @@ package client

import (
"context"
"time"

"github.com/formancehq/payments/genericclient"
"github.com/formancehq/payments/internal/connectors/metrics"
)

func (c *client) GetBalances(ctx context.Context, accountID string) (*genericclient.Balances, error) {
start := time.Now()
defer c.recordMetrics(ctx, start, "list_balances")

req := c.apiClient.DefaultApi.GetAccountBalances(ctx, accountID)
req := c.apiClient.DefaultApi.GetAccountBalances(metrics.OperationContext(ctx, "list_balances"), accountID)

balances, _, err := req.Execute()
if err != nil {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,14 +5,12 @@ import (
"time"

"github.com/formancehq/payments/genericclient"
"github.com/formancehq/payments/internal/connectors/metrics"
)

func (c *client) ListBeneficiaries(ctx context.Context, page, pageSize int64, createdAtFrom time.Time) ([]genericclient.Beneficiary, error) {
start := time.Now()
defer c.recordMetrics(ctx, start, "list_beneficiaries")

req := c.apiClient.DefaultApi.
GetBeneficiaries(ctx).
GetBeneficiaries(metrics.OperationContext(ctx, "list_beneficiaries")).
Page(page).
PageSize(pageSize)

Expand Down
26 changes: 6 additions & 20 deletions internal/connectors/plugins/public/generic/client/client.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@ import (
"github.com/formancehq/payments/internal/connectors/metrics"
"go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp"
"go.opentelemetry.io/otel/attribute"
"go.opentelemetry.io/otel/metric"
)

//go:generate mockgen -source client.go -destination client_generated.go -package client . Client
Expand All @@ -33,42 +32,29 @@ func (t *apiTransport) RoundTrip(req *http.Request) (*http.Response, error) {
}

type client struct {
apiClient *genericclient.APIClient
commonMetricAttributes []attribute.KeyValue
apiClient *genericclient.APIClient
}

func New(apiKey, baseURL string) Client {
httpClient := &http.Client{
transport := metrics.NewTransport(metrics.TransportOpts{
Transport: &apiTransport{
APIKey: apiKey,
underlying: otelhttp.NewTransport(http.DefaultTransport),
},
}
CommonMetricAttributesFn: CommonMetricsAttributes,
})

configuration := genericclient.NewConfiguration()
configuration.HTTPClient = httpClient
configuration.HTTPClient = &http.Client{Timeout: 5 * time.Second, Transport: transport}
configuration.Servers[0].URL = baseURL

genericClient := genericclient.NewAPIClient(configuration)

return &client{
apiClient: genericClient,
commonMetricAttributes: CommonMetricsAttributes(),
apiClient: genericClient,
}
}

// recordMetrics is meant to be called in a defer
func (c *client) recordMetrics(ctx context.Context, start time.Time, operation string) {
registry := metrics.GetMetricsRegistry()

attrs := c.commonMetricAttributes
attrs = append(attrs, attribute.String("operation", operation))
opts := metric.WithAttributes(attrs...)

registry.ConnectorPSPCalls().Add(ctx, 1, opts)
registry.ConnectorPSPCallLatencies().Record(ctx, time.Since(start).Milliseconds(), opts)
}

func CommonMetricsAttributes() []attribute.KeyValue {
metricsAttributes := []attribute.KeyValue{
attribute.String("connector", "generic"),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,11 @@ import (
"time"

"github.com/formancehq/payments/genericclient"
"github.com/formancehq/payments/internal/connectors/metrics"
)

func (c *client) ListTransactions(ctx context.Context, page, pageSize int64, updatedAtFrom time.Time) ([]genericclient.Transaction, error) {
start := time.Now()
defer c.recordMetrics(ctx, start, "list_transactions")

req := c.apiClient.DefaultApi.GetTransactions(ctx).
req := c.apiClient.DefaultApi.GetTransactions(metrics.OperationContext(ctx, "list_transactions")).
Page(page).
PageSize(pageSize)

Expand Down

0 comments on commit c83444f

Please sign in to comment.