Skip to content

Commit 0bf4748

Browse files
author
amlmtl
committed
improve logging and error handling
1 parent fcf77c5 commit 0bf4748

File tree

3 files changed

+37
-9
lines changed

3 files changed

+37
-9
lines changed

internal/esp/client/espwsclient.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -204,7 +204,7 @@ func (espWsClient *EspWsClient) handleBulkMessage(encodedMessages *[]string) {
204204
var message messagedto.MessageDTO
205205
err = json.Unmarshal(*decodedMessage, &message)
206206
if err != nil {
207-
log.DefaultLogger.Error(fmt.Sprintf("Cannot unmarshal message: %v", message))
207+
log.DefaultLogger.Error(fmt.Sprintf("Cannot unmarshal message: %s", *decodedMessage))
208208
return
209209
}
210210

pkg/plugin/plugin.go

Lines changed: 28 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -337,6 +337,22 @@ func (d *SampleDatasource) PublishStream(_ context.Context, _ *backend.PublishSt
337337
}, nil
338338
}
339339

340+
type callResourceResponseBody struct {
341+
Error *string `json:"error,omitempty"`
342+
Data json.RawMessage `json:"data,omitempty"`
343+
}
344+
345+
func newSerializedCallResourceResponseErrorBody(errorMessage string) []byte {
346+
errorResponseBody, err := json.Marshal(callResourceResponseBody{
347+
Error: &errorMessage,
348+
})
349+
if err != nil {
350+
errorResponseBody = []byte(`{error:"Internal server error"}`)
351+
}
352+
353+
return errorResponseBody
354+
}
355+
340356
func (d *SampleDatasource) CallResource(ctx context.Context, req *backend.CallResourceRequest, sender backend.CallResourceResponseSender) error {
341357
var response = &backend.CallResourceResponse{
342358
Status: http.StatusNotFound,
@@ -354,25 +370,32 @@ func (d *SampleDatasource) CallResource(ctx context.Context, req *backend.CallRe
354370
discoveryResponse, err = callDiscoveryEndpoint(ctx, d.httpClient, *discoveryServiceUrl)
355371
if err != nil {
356372
errorMessage := "Unable to obtain ESP server schema information."
357-
response.Body = []byte(errorMessage)
373+
response.Body = newSerializedCallResourceResponseErrorBody(errorMessage)
358374
response.Status = http.StatusInternalServerError
359375
log.DefaultLogger.Error(errorMessage, "error", err)
360376
return sender.Send(response)
361377
}
362378

363-
responseBody, err := io.ReadAll(discoveryResponse.Body)
379+
servers, err := io.ReadAll(discoveryResponse.Body)
364380
if err != nil {
365381
errorMessage := "Unable to read discovery response."
366-
response.Body = []byte(errorMessage)
382+
response.Body = newSerializedCallResourceResponseErrorBody(errorMessage)
383+
response.Status = http.StatusInternalServerError
384+
log.DefaultLogger.Error(errorMessage, "error", err)
385+
return sender.Send(response)
386+
}
387+
388+
responseBody, err := json.Marshal(callResourceResponseBody{Data: servers})
389+
if err != nil {
390+
errorMessage := "Unable to serialize discovery response."
391+
response.Body = newSerializedCallResourceResponseErrorBody(errorMessage)
367392
response.Status = http.StatusInternalServerError
368393
log.DefaultLogger.Error(errorMessage, "error", err)
369394
return sender.Send(response)
370395
}
371396

372397
response.Status = http.StatusOK
373398
response.Body = responseBody
374-
response.Headers["Content-Encoding"] = []string{discoveryResponse.Header.Get("Content-Encoding")}
375-
response.Headers["Content-Type"] = []string{discoveryResponse.Header.Get("Content-Type")}
376399
default:
377400
break
378401
}

src/components/QueryEditor.tsx

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,10 @@ import {
2222

2323
type Props = QueryEditorProps<DataSource, EspQuery, EspDataSourceOptions>;
2424

25+
interface ServersResponse {
26+
data: Server[]
27+
}
28+
2529
interface State {
2630
isServerDataFetched: boolean;
2731
serverOptions: Array<SelectableEspObject<Server>>;
@@ -63,16 +67,17 @@ export class QueryEditor extends PureComponent<Props> {
6367
componentDidMount() {
6468
this.props.datasource
6569
.getResource('servers')
66-
.then(async (serversResponse: Server[]) => {
67-
const [server, project, cq, window, fields] = QueryEditor.deriveSelectionsFromQuery(serversResponse, this.props.query);
70+
.then(async (serversResponse: ServersResponse) => {
71+
const servers = serversResponse.data
72+
const [server, project, cq, window, fields] = QueryEditor.deriveSelectionsFromQuery(servers, this.props.query);
6873
await this.setStateWithPromise({
6974
selectedServer: server,
7075
selectedProject: project,
7176
selectedCq: cq,
7277
selectedWindow: window,
7378
selectedFields: fields
7479
});
75-
await this.updateServers(serversResponse);
80+
await this.updateServers(servers);
7681
await this.setStateWithPromise({ isServerDataFetched: true });
7782
})
7883
.catch(console.error);

0 commit comments

Comments
 (0)