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:
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user