Datasources: Improve error handling for testing data sources (#35120)

* Improve error handling for error messages

The error message will be read from error object from the following properties in the following order:
- message
- data.message
- statusText

* Convert api/ds/query errors to TestingStatus

SQL datasources (mysql, mssql, postgres) and CloudWatch use api/ds/query to test the data source, but previously didn't handle errors returned by this endpoint. If the error cannot be handled it's re-thrown to be handled in public/app/features/datasources/state/actions.ts

* Use async/await instead of Promises

* Remove incorrect type import

TestingStatus is in app/types. Should be pulled down to grafana/data but it depends on HealthCheckResultDetails that is public and lives in grafana/runtime. Ideally TestingStatus should live in grafana/data but I'm not sure if HealthCheckResultDetails can be move there too (?)

* Update packages/grafana-data/src/types/datasource.ts

Co-authored-by: Erik Sundell <erik.sundell@grafana.com>

* Handle errors with no details in toTestingStatus instead of re-throwing

* Update packages/grafana-data/src/types/datasource.ts

Co-authored-by: Marcus Efraimsson <marcus.efraimsson@gmail.com>

Co-authored-by: Erik Sundell <erik.sundell@grafana.com>
Co-authored-by: Marcus Efraimsson <marcus.efraimsson@gmail.com>
This commit is contained in:
Piotr Jamróz
2021-07-08 14:32:27 +02:00
committed by GitHub
parent 9b2d7d6d69
commit 9ace8686a1
10 changed files with 170 additions and 32 deletions

View File

@@ -228,7 +228,11 @@ abstract class DataSourceApi<
abstract query(request: DataQueryRequest<TQuery>): Promise<DataQueryResponse> | Observable<DataQueryResponse>;
/**
* Test & verify datasource settings & connection details
* Test & verify datasource settings & connection details (returning TestingStatus)
*
* When verification fails - errors specific to the data source should be handled here and converted to
* a TestingStatus object. Unknown errors and HTTP errors can be re-thrown and will be handled here:
* public/app/features/datasources/state/actions.ts
*/
abstract testDatasource(): Promise<any>;
@@ -472,7 +476,13 @@ export enum DataQueryErrorType {
export interface DataQueryError {
data?: {
/**
* Short information about the error
*/
message?: string;
/**
* Detailed information about the error. Only returned when app_mode is development.
*/
error?: string;
};
message?: string;