Skip to content
This repository was archived by the owner on Oct 6, 2025. It is now read-only.

Commit c181f44

Browse files
authored
Merge pull request #123 from doringeman/tracking
Add configurable User-Agent via USER_AGENT env var
2 parents 301126a + ee5e91d commit c181f44

File tree

1 file changed

+41
-1
lines changed

1 file changed

+41
-1
lines changed

desktop/context.go

Lines changed: 41 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ package desktop
33
import (
44
"context"
55
"fmt"
6-
"github.com/docker/model-cli/pkg/types"
76
"net/http"
87
"net/url"
98
"os"
@@ -16,6 +15,7 @@ import (
1615
"github.com/docker/cli/cli/context/docker"
1716
clientpkg "github.com/docker/docker/client"
1817
"github.com/docker/model-cli/pkg/standalone"
18+
"github.com/docker/model-cli/pkg/types"
1919
"github.com/docker/model-runner/pkg/inference"
2020
)
2121

@@ -155,6 +155,10 @@ func DetectContext(ctx context.Context, cli *command.DockerCli) (*ModelRunnerCon
155155
client = http.DefaultClient
156156
}
157157

158+
if userAgent := os.Getenv("USER_AGENT"); userAgent != "" {
159+
setUserAgent(client, userAgent)
160+
}
161+
158162
// Success.
159163
return &ModelRunnerContext{
160164
kind: kind,
@@ -183,3 +187,39 @@ func (c *ModelRunnerContext) URL(path string) string {
183187
func (c *ModelRunnerContext) Client() DockerHttpClient {
184188
return c.client
185189
}
190+
191+
func setUserAgent(client DockerHttpClient, userAgent string) {
192+
if httpClient, ok := client.(*http.Client); ok {
193+
transport := httpClient.Transport
194+
if transport == nil {
195+
transport = http.DefaultTransport
196+
}
197+
198+
httpClient.Transport = &userAgentTransport{
199+
userAgent: userAgent,
200+
transport: transport,
201+
}
202+
}
203+
}
204+
205+
type userAgentTransport struct {
206+
userAgent string
207+
transport http.RoundTripper
208+
}
209+
210+
func (u *userAgentTransport) RoundTrip(req *http.Request) (*http.Response, error) {
211+
reqClone := req.Clone(req.Context())
212+
213+
existingUA := reqClone.UserAgent()
214+
215+
var newUA string
216+
if existingUA != "" {
217+
newUA = existingUA + " " + u.userAgent
218+
} else {
219+
newUA = u.userAgent
220+
}
221+
222+
reqClone.Header.Set("User-Agent", newUA)
223+
224+
return u.transport.RoundTrip(reqClone)
225+
}

0 commit comments

Comments
 (0)