Zipkin: Improve error source (#99099)

* Zipkin: Improve error source

* Revert file name change
This commit is contained in:
Ivana Huckova
2025-01-17 10:04:33 +01:00
committed by GitHub
parent f9a61e2eb2
commit 5e23b2c07f
3 changed files with 25 additions and 2 deletions
+13 -1
View File
@@ -118,7 +118,7 @@ func (z *ZipkinClient) Traces(serviceName string, spanName string) ([][]model.Sp
func (z *ZipkinClient) Trace(traceId string) ([]model.SpanModel, error) {
trace := []model.SpanModel{}
if traceId == "" {
return trace, errors.New("invalid/empty traceId")
return trace, backend.DownstreamError(errors.New("invalid/empty traceId"))
}
traceUrl, err := url.JoinPath(z.url, "/api/v2/trace", url.QueryEscape(traceId))
@@ -128,6 +128,9 @@ func (z *ZipkinClient) Trace(traceId string) ([]model.SpanModel, error) {
res, err := z.httpClient.Get(traceUrl)
if err != nil {
if backend.IsDownstreamHTTPError(err) {
return trace, backend.DownstreamError(err)
}
return trace, err
}
@@ -138,6 +141,15 @@ func (z *ZipkinClient) Trace(traceId string) ([]model.SpanModel, error) {
}
}
}()
if res != nil && res.StatusCode/100 != 2 {
err := backend.DownstreamError(fmt.Errorf("request failed: %s", res.Status))
if backend.ErrorSourceFromHTTPStatus(res.StatusCode) == backend.ErrorSourceDownstream {
return trace, backend.DownstreamError(err)
}
return trace, err
}
if err := json.NewDecoder(res.Body).Decode(&trace); err != nil {
return trace, err
}
+11
View File
@@ -2,11 +2,14 @@ package zipkin
import (
"encoding/json"
"errors"
"fmt"
"net/http"
"net/http/httptest"
"net/url"
"testing"
"github.com/grafana/grafana-plugin-sdk-go/backend"
"github.com/grafana/grafana-plugin-sdk-go/backend/log"
"github.com/openzipkin/zipkin-go/model"
"github.com/stretchr/testify/assert"
@@ -17,29 +20,37 @@ func TestZipkinClient_Services(t *testing.T) {
name string
mockResponse string
mockStatusCode int
mockStatus string
expectedResult []string
expectError bool
expectedError error
}{
{
name: "Successful response",
mockResponse: `["service1", "service2"]`,
mockStatusCode: http.StatusOK,
mockStatus: "OK",
expectedResult: []string{"service1", "service2"},
expectError: false,
expectedError: nil,
},
{
name: "Non-200 response",
mockResponse: "",
mockStatusCode: http.StatusInternalServerError,
mockStatus: "Internal Server Error",
expectedResult: []string{},
expectError: true,
expectedError: backend.DownstreamError(fmt.Errorf("request failed: Internal Server Error")),
},
{
name: "Invalid JSON response",
mockResponse: `{invalid json`,
mockStatusCode: http.StatusOK,
mockStatus: "OK",
expectedResult: []string{},
expectError: true,
expectedError: errors.New("invalid character 'i' looking for beginning of value"),
},
}
+1 -1
View File
@@ -39,7 +39,7 @@ func queryData(ctx context.Context, dsInfo *datasourceInfo, req *backend.QueryDa
traces, err := dsInfo.ZipkinClient.Trace(query.Query)
if err != nil {
es := backend.ErrorSourcePlugin
if backend.IsDownstreamHTTPError(err) {
if backend.IsDownstreamError(err) {
es = backend.ErrorSourceDownstream
}
response.Responses[q.RefID] = backend.DataResponse{