Skip to content

Commit 08f8869

Browse files
David-KreinerHarness
authored andcommitted
feat: [ML-1270]: Add user-agent header for tracking (#189)
* feat: [ML-1270]: Add user-agent header for tracking
1 parent a9041ad commit 08f8869

File tree

3 files changed

+19
-5
lines changed

3 files changed

+19
-5
lines changed

client/client.go

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,9 @@ type Client struct {
4747

4848
// AuthProvider used for authentication
4949
AuthProvider auth.Provider
50+
51+
// UserAgent is the User-Agent header string sent with requests
52+
UserAgent string
5053
}
5154

5255
type service struct {
@@ -64,16 +67,25 @@ func defaultHTTPClient(timeout ...time.Duration) *http.Client {
6467
}
6568
}
6669

67-
// NewWithToken creates a new client with the specified base URL and API token
68-
func NewWithAuthProvider(uri string, authProvider auth.Provider, timeout ...time.Duration) (*Client, error) {
70+
// NewWithAuthProvider creates a new client with the specified base URL, auth provider, and optional version
71+
// If version is an empty string, "unknown" will be used in the User-Agent header
72+
func NewWithAuthProvider(uri string, authProvider auth.Provider, version string, timeout ...time.Duration) (*Client, error) {
6973
parsedURL, err := url.Parse(uri)
7074
if err != nil {
7175
return nil, err
7276
}
77+
78+
versionStr := "unknown"
79+
if version != "" {
80+
versionStr = version
81+
}
82+
userAgent := fmt.Sprintf("harness-mcp-client/%s", versionStr)
83+
7384
c := &Client{
7485
client: defaultHTTPClient(timeout...),
7586
BaseURL: parsedURL,
7687
AuthProvider: authProvider,
88+
UserAgent: userAgent,
7789
}
7890
return c, nil
7991
}
@@ -474,6 +486,8 @@ func (c *Client) Do(r *http.Request) (*http.Response, error) {
474486
}
475487
r.Header.Set(k, v)
476488

489+
r.Header.Set("User-Agent", c.UserAgent)
490+
477491
// Check for scope in context and add account ID to headers if present
478492
if scope, err := common.GetScopeFromContext(ctx); err == nil {
479493
if scope.AccountID != "" {

pkg/modules/har.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -80,10 +80,10 @@ func RegisterRegistries(config *config.Config, tsg *toolsets.ToolsetGroup) error
8080

8181
if config.Internal {
8282
authProvider := auth.NewJWTProvider(secret, "Basic", &utils.DefaultJWTLifetime)
83-
c, err = client.NewWithAuthProvider(baseURL, authProvider)
83+
c, err = client.NewWithAuthProvider(baseURL, authProvider, config.Version)
8484
} else {
8585
authProvider := auth.NewAPIKeyProvider(config.APIKey)
86-
c, err = client.NewWithAuthProvider(baseURL, authProvider)
86+
c, err = client.NewWithAuthProvider(baseURL, authProvider, config.Version)
8787
}
8888

8989
if err != nil {

pkg/modules/utils/clients.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ func CreateClientWithIdentity(baseURL string, config *config.Config, secret stri
5050
authProvider = auth.NewAPIKeyProvider(config.APIKey)
5151
}
5252

53-
client, err := client.NewWithAuthProvider(baseURL, authProvider, timeout...)
53+
client, err := client.NewWithAuthProvider(baseURL, authProvider, config.Version, timeout...)
5454
if err != nil {
5555
slog.Error("Failed to create client", "error", err)
5656
return nil, fmt.Errorf("failed to create client: %w", err)

0 commit comments

Comments
 (0)