From 47b0d52c557b32928c55e65feac8074f1ed0dcc4 Mon Sep 17 00:00:00 2001 From: ofer Date: Fri, 16 Oct 2026 15:19:11 -0700 Subject: [PATCH] send a client name to the aviator graphql api --- internal/avgql/client.go | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/internal/avgql/client.go b/internal/avgql/client.go index d4eed638..13c1baa3 100644 --- a/internal/avgql/client.go +++ b/internal/avgql/client.go @@ -2,6 +2,7 @@ package avgql import ( "context" + "net/http" "net/url" "os" @@ -17,6 +18,7 @@ func NewClient(ctx context.Context) (*graphql.Client, error) { &oauth2.Token{AccessToken: config.Av.Aviator.APIToken}, ) httpClient := oauth2.NewClient(ctx, src) + httpClient.Transport = clientNameTransport{base: httpClient.Transport} apiURL := os.Getenv("AV_GRAPHQL_URL") if apiURL == "" { baseURL, err := url.Parse(config.Av.Aviator.APIHost) @@ -28,3 +30,15 @@ func NewClient(ctx context.Context) (*graphql.Client, error) { logrus.WithField("api_url", apiURL).Debug("creating GraphQL client") return graphql.NewClient(apiURL, httpClient), nil } + +// clientNameTransport identifies av to the Aviator API, which counts requests per client. +type clientNameTransport struct { + base http.RoundTripper +} + +func (t clientNameTransport) RoundTrip(req *http.Request) (*http.Response, error) { + req = req.Clone(req.Context()) + req.Header.Set("Apollographql-Client-Name", "av CLI") + req.Header.Set("Apollographql-Client-Version", config.Version) + return t.base.RoundTrip(req) +}