Fix: Preserve Jaeger base path when constructing search request (#109045)

* fix url construction

* consistency

* update error response

* error source

* add test case
This commit is contained in:
Gareth
2025-08-01 13:56:31 +01:00
committed by GitHub
parent 491c74b688
commit 7b5288c28a
2 changed files with 26 additions and 4 deletions
+8 -4
View File
@@ -115,11 +115,15 @@ func (j *JaegerClient) Operations(s string) ([]string, error) {
}
func (j *JaegerClient) Search(query *JaegerQuery, start, end int64) ([]TraceResponse, error) {
jaegerURL, err := url.Parse(j.url)
u, err := url.JoinPath(j.url, "/api/traces")
if err != nil {
return []TraceResponse{}, fmt.Errorf("failed to parse Jaeger URL: %w", err)
return []TraceResponse{}, backend.DownstreamError(fmt.Errorf("failed to join url path: %w", err))
}
jaegerURL, err := url.Parse(u)
if err != nil {
return []TraceResponse{}, backend.DownstreamError(fmt.Errorf("failed to parse Jaeger URL: %w", err))
}
jaegerURL.Path = "/api/traces"
var queryTags string
if query.Tags != "" {
@@ -135,7 +139,7 @@ func (j *JaegerClient) Search(query *JaegerQuery, start, end int64) ([]TraceResp
marshaledTags, err := json.Marshal(tagMap)
if err != nil {
return []TraceResponse{}, fmt.Errorf("failed to convert tags to JSON: %w", err)
return []TraceResponse{}, backend.DownstreamError(fmt.Errorf("failed to convert tags to JSON: %w", err))
}
queryTags = string(marshaledTags)
+18
View File
@@ -186,6 +186,19 @@ func TestJaegerClient_Search(t *testing.T) {
expectError bool
expectedError error
}{
{
name: "Preserves base path in Jaeger URL",
query: &JaegerQuery{
Service: "test-service",
},
start: 1735689600000000,
end: 1738368000000000,
mockResponse: `{"data":[{"traceID":"test-trace-id"}]}`,
mockStatusCode: http.StatusOK,
expectedURL: "/abc/api/traces?end=1738368000000000&service=test-service&start=1735689600000000",
expectError: false,
expectedError: nil,
},
{
name: "Successful search with all parameters",
query: &JaegerQuery{
@@ -245,6 +258,11 @@ func TestJaegerClient_Search(t *testing.T) {
settings := backend.DataSourceInstanceSettings{
URL: server.URL,
}
if tt.name == "Preserves base path in Jaeger URL" {
settings.URL = server.URL + "/abc"
}
client, err := New(server.Client(), log.NewNullLogger(), settings)
assert.NoError(t, err)
traces, err := client.Search(tt.query, tt.start, tt.end)