Skip to content

Commit 05e8fc6

Browse files
committed
Merge branch 'main' into feat_datalinks
2 parents 1dc167b + 28ebe43 commit 05e8fc6

File tree

5 files changed

+57
-28
lines changed

5 files changed

+57
-28
lines changed

pkg/quickwit/client/client.go

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -167,10 +167,17 @@ func (c *baseClientImpl) ExecuteMultisearch(r *MultiSearchRequest) (*MultiSearch
167167
c.logger.Debug("Received multisearch response", "code", res.StatusCode, "status", res.Status, "content-length", res.ContentLength)
168168

169169
if res.StatusCode >= 400 {
170-
jsonResponseBody, _ := json.Marshal(res.Body)
171-
jsonQueryParam, _ := json.Marshal(queryParams)
172-
jsonRequestBody, _ := json.Marshal(r.Requests)
173-
c.logger.Error("Error on multisearch: statusCode = " + strconv.Itoa(res.StatusCode) + ", responseBody = " + string(jsonResponseBody) + ", queryParam = " + string(jsonQueryParam) + ", requestBody = " + string(jsonRequestBody))
170+
qe := QuickwitQueryError{
171+
Status: res.StatusCode,
172+
Message: "Error on multisearch",
173+
ResponseBody: res.Body,
174+
QueryParam: queryParams,
175+
RequestBody: r.Requests,
176+
}
177+
178+
errorPayload, _ := json.Marshal(qe)
179+
c.logger.Error(string(errorPayload))
180+
return nil, fmt.Errorf(string(errorPayload))
174181
}
175182

176183
start := time.Now()

pkg/quickwit/client/models.go

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package es
22

33
import (
44
"encoding/json"
5+
"io"
56
"time"
67
)
78

@@ -43,6 +44,14 @@ type SearchResponseHits struct {
4344
Hits []map[string]interface{}
4445
}
4546

47+
type QuickwitQueryError struct {
48+
Status int `json:"status"`
49+
Message string `json:"message"`
50+
ResponseBody io.ReadCloser `json:"response_body"`
51+
RequestBody []*SearchRequest `json:"request_body"`
52+
QueryParam string `json:"query_param"`
53+
}
54+
4655
// SearchResponse represents a search response
4756
type SearchResponse struct {
4857
Error map[string]interface{} `json:"error"`

pkg/quickwit/data_query.go

Lines changed: 25 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
package quickwit
22

33
import (
4+
"encoding/json"
45
"fmt"
56
"regexp"
67
"strconv"
78
"time"
89

910
"github.com/grafana/grafana-plugin-sdk-go/backend"
10-
1111
es "github.com/quickwit-oss/quickwit-datasource/pkg/quickwit/client"
1212
"github.com/quickwit-oss/quickwit-datasource/pkg/quickwit/simplejson"
1313
)
@@ -28,6 +28,26 @@ var newElasticsearchDataQuery = func(client es.Client, dataQuery []backend.DataQ
2828
}
2929
}
3030

31+
func handleQuickwitErrors(e *elasticsearchDataQuery, err error) (*backend.QueryDataResponse, error) {
32+
if nil == err {
33+
return nil, nil
34+
}
35+
36+
var payload = err.Error()
37+
var qe es.QuickwitQueryError
38+
unmarshall_err := json.Unmarshal([]byte(payload), &qe)
39+
if unmarshall_err == nil {
40+
return nil, err
41+
}
42+
43+
result := backend.QueryDataResponse{
44+
Responses: backend.Responses{},
45+
}
46+
47+
result.Responses[e.dataQueries[0].RefID] = backend.ErrDataResponse(backend.Status(qe.Status), payload)
48+
return &result, nil
49+
}
50+
3151
func (e *elasticsearchDataQuery) execute() (*backend.QueryDataResponse, error) {
3252
queries, err := parseQuery(e.dataQueries)
3353
if err != nil {
@@ -50,14 +70,13 @@ func (e *elasticsearchDataQuery) execute() (*backend.QueryDataResponse, error) {
5070
}
5171

5272
res, err := e.client.ExecuteMultisearch(req)
53-
if err != nil {
73+
result, err := handleQuickwitErrors(e, err)
74+
if result != nil {
75+
return result, nil
76+
} else if err != nil {
5477
return &backend.QueryDataResponse{}, err
5578
}
5679

57-
if res.Status == 404 {
58-
return &backend.QueryDataResponse{}, fmt.Errorf("/_msearch endpoint not found, please check your Quickwit version")
59-
}
60-
6180
return parseResponse(res.Responses, queries, e.client.GetConfiguredFields())
6281
}
6382

pkg/quickwit/error_handling_test.go

Lines changed: 10 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -44,11 +44,10 @@ func TestErrorAvgMissingField(t *testing.T) {
4444
LogMessageField: "line",
4545
LogLevelField: "lvl",
4646
}
47-
result, err := queryDataTestWithResponseCode(query, 400, response, configuredFields)
48-
require.NoError(t, err)
4947

50-
// FIXME: we should return the received error message
51-
require.Len(t, result.response.Responses, 0)
48+
result, err := queryDataTestWithResponseCode(query, 400, response, configuredFields)
49+
require.Nil(t, err)
50+
require.Contains(t, result.response.Responses["A"].Error.Error(), "\"status\":400")
5251
}
5352

5453
func TestErrorAvgMissingFieldNoDetailedErrors(t *testing.T) {
@@ -78,11 +77,10 @@ func TestErrorAvgMissingFieldNoDetailedErrors(t *testing.T) {
7877
LogMessageField: "line",
7978
LogLevelField: "lvl",
8079
}
81-
result, err := queryDataTestWithResponseCode(query, 400, response, configuredFields)
82-
require.NoError(t, err)
8380

84-
// FIXME: we should return the received error message
85-
require.Len(t, result.response.Responses, 0)
81+
result, err := queryDataTestWithResponseCode(query, 400, response, configuredFields)
82+
require.Nil(t, err)
83+
require.Contains(t, result.response.Responses["A"].Error.Error(), "\"status\":400")
8684
}
8785

8886
func TestErrorTooManyDateHistogramBuckets(t *testing.T) {
@@ -164,11 +162,8 @@ func TestNonElasticError(t *testing.T) {
164162
LogMessageField: "line",
165163
LogLevelField: "lvl",
166164
}
167-
_, err := queryDataTestWithResponseCode(query, 403, response, configuredFields)
168-
// FIXME: we should return something better.
169-
// currently it returns the error-message about being unable to decode JSON
170-
// it is not 100% clear what we should return to the browser
171-
// (and what to debug-log for example), we could return
172-
// at least something like "unknown response, http status code 403"
173-
require.ErrorContains(t, err, "invalid character")
165+
166+
result, err := queryDataTestWithResponseCode(query, 403, response, configuredFields)
167+
require.Nil(t, err)
168+
require.Contains(t, result.response.Responses["A"].Error.Error(), "\"status\":403")
174169
}

src/datasource.ts

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -130,8 +130,7 @@ export class QuickwitDataSource
130130
catchError((err) => {
131131
if (err.status === 404) {
132132
return of({ status: 'error', message: 'Index does not exists.' });
133-
}
134-
else if (err.message) {
133+
} else if (err.message) {
135134
return of({ status: 'error', message: err.message });
136135
} else {
137136
return of({ status: 'error', message: err.status });
@@ -492,7 +491,7 @@ export class QuickwitDataSource
492491
const error: DataQueryError = {
493492
message: 'Error during context query. Please check JS console logs.',
494493
status: err.status,
495-
statusText: err.statusText,
494+
statusText: err.message,
496495
};
497496
throw error;
498497
})

0 commit comments

Comments
 (0)