@@ -337,6 +337,22 @@ func (d *SampleDatasource) PublishStream(_ context.Context, _ *backend.PublishSt
337
337
}, nil
338
338
}
339
339
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
+
340
356
func (d * SampleDatasource ) CallResource (ctx context.Context , req * backend.CallResourceRequest , sender backend.CallResourceResponseSender ) error {
341
357
var response = & backend.CallResourceResponse {
342
358
Status : http .StatusNotFound ,
@@ -354,25 +370,32 @@ func (d *SampleDatasource) CallResource(ctx context.Context, req *backend.CallRe
354
370
discoveryResponse , err = callDiscoveryEndpoint (ctx , d .httpClient , * discoveryServiceUrl )
355
371
if err != nil {
356
372
errorMessage := "Unable to obtain ESP server schema information."
357
- response .Body = [] byte (errorMessage )
373
+ response .Body = newSerializedCallResourceResponseErrorBody (errorMessage )
358
374
response .Status = http .StatusInternalServerError
359
375
log .DefaultLogger .Error (errorMessage , "error" , err )
360
376
return sender .Send (response )
361
377
}
362
378
363
- responseBody , err := io .ReadAll (discoveryResponse .Body )
379
+ servers , err := io .ReadAll (discoveryResponse .Body )
364
380
if err != nil {
365
381
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 )
367
392
response .Status = http .StatusInternalServerError
368
393
log .DefaultLogger .Error (errorMessage , "error" , err )
369
394
return sender .Send (response )
370
395
}
371
396
372
397
response .Status = http .StatusOK
373
398
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" )}
376
399
default :
377
400
break
378
401
}
0 commit comments