Skip to content

Commit 5334219

Browse files
authored
feat(datasource): Improve datasource connection test error messages (#559)
1 parent b1431f9 commit 5334219

17 files changed

Lines changed: 146 additions & 70 deletions

File tree

datavines-connector/datavines-connector-plugins/datavines-connector-databend/src/main/java/io/datavines/connector/plugin/DatabendConnector.java

Lines changed: 13 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -59,22 +59,20 @@ public ConnectorResponse testConnect(TestConnectionRequestParam param) {
5959
dataSourceInfo.loadClass();
6060
try (Connection con = DriverManager.getConnection(dataSourceInfo.getJdbcUrl(),
6161
dataSourceInfo.getUser(), StringUtils.isEmpty(dataSourceInfo.getPassword()) ? null : dataSourceInfo.getPassword())) {
62-
boolean result = (con!=null);
63-
if (result) {
64-
try {
65-
getMetadataDatabases(con);
66-
} catch (Exception e) {
67-
logger.error("create connection error", e);
68-
return ConnectorResponse.builder().status(ConnectorResponse.Status.SUCCESS).result(false).build();
69-
}
70-
71-
con.close();
62+
if (con != null) {
63+
getMetadataDatabases(con);
7264
}
73-
74-
return ConnectorResponse.builder().status(ConnectorResponse.Status.SUCCESS).result(true).build();
75-
} catch (SQLException e) {
76-
logger.error("create connection error", e);
77-
return ConnectorResponse.builder().status(ConnectorResponse.Status.SUCCESS).result(false).build();
65+
return ConnectorResponse.builder()
66+
.status(ConnectorResponse.Status.SUCCESS)
67+
.result(true)
68+
.build();
69+
} catch (Exception e) {
70+
logger.error("test connect error", e);
71+
return ConnectorResponse.builder()
72+
.status(ConnectorResponse.Status.ERROR)
73+
.result(false)
74+
.errorMsg(e.getMessage())
75+
.build();
7876
}
7977
}
8078

datavines-connector/datavines-connector-plugins/datavines-connector-doris/src/main/java/io/datavines/connector/plugin/DorisConnector.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -64,9 +64,12 @@ public ConnectorResponse testConnect(TestConnectionRequestParam param) {
6464
return ConnectorResponse.builder().status(ConnectorResponse.Status.SUCCESS).result(result).build();
6565
} catch (SQLException e) {
6666
logger.error("test connect error, param is {} :", JSONUtils.toJsonString(param), e);
67+
return ConnectorResponse.builder()
68+
.status(ConnectorResponse.Status.ERROR)
69+
.result(false)
70+
.errorMsg(e.getMessage())
71+
.build();
6772
}
68-
69-
return ConnectorResponse.builder().status(ConnectorResponse.Status.SUCCESS).result(false).build();
7073
}
7174

7275
@Override

datavines-connector/datavines-connector-plugins/datavines-connector-hive/src/main/java/io/datavines/connector/plugin/HiveConnector.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -67,9 +67,12 @@ public ConnectorResponse testConnect(TestConnectionRequestParam param) {
6767
return ConnectorResponse.builder().status(ConnectorResponse.Status.SUCCESS).result(result).build();
6868
} catch (SQLException e) {
6969
logger.error("test connect error, param is {} :", JSONUtils.toJsonString(param), e);
70+
return ConnectorResponse.builder()
71+
.status(ConnectorResponse.Status.ERROR)
72+
.result(false)
73+
.errorMsg(e.getMessage())
74+
.build();
7075
}
71-
72-
return ConnectorResponse.builder().status(ConnectorResponse.Status.SUCCESS).result(false).build();
7376
}
7477

7578
}

datavines-connector/datavines-connector-plugins/datavines-connector-jdbc/src/main/java/io/datavines/connector/plugin/JdbcConnector.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -206,9 +206,12 @@ public ConnectorResponse testConnect(TestConnectionRequestParam param) {
206206
return ConnectorResponse.builder().status(ConnectorResponse.Status.SUCCESS).result(result).build();
207207
} catch (SQLException e) {
208208
logger.error("test connect error, param is {} :", JSONUtils.toJsonString(param), e);
209+
return ConnectorResponse.builder()
210+
.status(ConnectorResponse.Status.ERROR)
211+
.result(false)
212+
.errorMsg(e.getMessage())
213+
.build();
209214
}
210-
211-
return ConnectorResponse.builder().status(ConnectorResponse.Status.SUCCESS).result(false).build();
212215
}
213216

214217
private List<String> getPrimaryKeys(String catalog, String schema, String tableName, DatabaseMetaData metaData) {

datavines-connector/datavines-connector-plugins/datavines-connector-mongodb/src/main/java/io/datavines/connector/plugin/MongodbConnector.java

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -199,14 +199,21 @@ public ConnectorResponse testConnect(TestConnectionRequestParam param) {
199199
try {
200200
MongoClient mongoClient = getMongoClient(paramMap);
201201
if (mongoClient == null) {
202-
return ConnectorResponse.builder().status(ConnectorResponse.Status.SUCCESS).result(false).build();
202+
return ConnectorResponse.builder()
203+
.status(ConnectorResponse.Status.ERROR)
204+
.result(false)
205+
.errorMsg("Failed to create MongoDB client")
206+
.build();
203207
}
204208
return ConnectorResponse.builder().status(ConnectorResponse.Status.SUCCESS).result(true).build();
205209
} catch (Exception e) {
206210
logger.error(e.toString(), e);
211+
return ConnectorResponse.builder()
212+
.status(ConnectorResponse.Status.ERROR)
213+
.result(false)
214+
.errorMsg(e.getMessage())
215+
.build();
207216
}
208-
209-
return ConnectorResponse.builder().status(ConnectorResponse.Status.SUCCESS).result(false).build();
210217
}
211218

212219
@Override

datavines-connector/datavines-connector-plugins/datavines-connector-presto/src/main/java/io/datavines/connector/plugin/PrestoConnector.java

Lines changed: 13 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -78,22 +78,20 @@ public ConnectorResponse testConnect(TestConnectionRequestParam param) {
7878
}
7979

8080
try (Connection con = DriverManager.getConnection(url, properties)) {
81-
boolean result = (con!=null);
82-
if (result) {
83-
try {
84-
getMetadataDatabases(con);
85-
} catch (Exception e) {
86-
logger.error("create connection error", e);
87-
return ConnectorResponse.builder().status(ConnectorResponse.Status.SUCCESS).result(false).build();
88-
}
89-
90-
con.close();
81+
if (con != null) {
82+
getMetadataDatabases(con);
9183
}
92-
93-
return ConnectorResponse.builder().status(ConnectorResponse.Status.SUCCESS).result(true).build();
94-
} catch (SQLException e) {
95-
logger.error("create connection error", e);
96-
return ConnectorResponse.builder().status(ConnectorResponse.Status.SUCCESS).result(false).build();
84+
return ConnectorResponse.builder()
85+
.status(ConnectorResponse.Status.SUCCESS)
86+
.result(true)
87+
.build();
88+
} catch (Exception e) {
89+
logger.error("test connect error", e);
90+
return ConnectorResponse.builder()
91+
.status(ConnectorResponse.Status.ERROR)
92+
.result(false)
93+
.errorMsg(e.getMessage())
94+
.build();
9795
}
9896
}
9997

datavines-connector/datavines-connector-plugins/datavines-connector-trino/src/main/java/io/datavines/connector/plugin/TrinoConnector.java

Lines changed: 13 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -77,22 +77,20 @@ public ConnectorResponse testConnect(TestConnectionRequestParam param) {
7777
}
7878

7979
try (Connection con = DriverManager.getConnection(url, properties)) {
80-
boolean result = (con!=null);
81-
if (result) {
82-
try {
83-
getMetadataDatabases(con);
84-
} catch (Exception e) {
85-
logger.error("create connection error", e);
86-
return ConnectorResponse.builder().status(ConnectorResponse.Status.SUCCESS).result(false).build();
87-
}
88-
89-
con.close();
80+
if (con != null) {
81+
getMetadataDatabases(con);
9082
}
91-
92-
return ConnectorResponse.builder().status(ConnectorResponse.Status.SUCCESS).result(true).build();
93-
} catch (SQLException e) {
94-
logger.error("create connection error", e);
95-
return ConnectorResponse.builder().status(ConnectorResponse.Status.SUCCESS).result(false).build();
83+
return ConnectorResponse.builder()
84+
.status(ConnectorResponse.Status.SUCCESS)
85+
.result(true)
86+
.build();
87+
} catch (Exception e) {
88+
logger.error("test connect error", e);
89+
return ConnectorResponse.builder()
90+
.status(ConnectorResponse.Status.ERROR)
91+
.result(false)
92+
.errorMsg(e.getMessage())
93+
.build();
9694
}
9795
}
9896

datavines-server/src/main/java/io/datavines/server/api/controller/DataSourceController.java

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,12 @@
1616
*/
1717
package io.datavines.server.api.controller;
1818

19+
import io.datavines.common.param.ConnectorResponse;
1920
import io.datavines.connector.api.ConnectorFactory;
21+
import io.datavines.core.entity.ResultMap;
2022
import io.datavines.server.api.dto.vo.Item;
2123
import io.datavines.common.param.TestConnectionRequestParam;
24+
import io.datavines.common.utils.StringUtils;
2225
import io.datavines.core.constant.DataVinesConstants;
2326
import io.datavines.core.aop.RefreshToken;
2427
import io.datavines.server.api.dto.bo.datasource.DataSourceCreate;
@@ -56,7 +59,30 @@ public class DataSourceController {
5659
@ApiOperation(value = "test connection")
5760
@PostMapping(value = "/test", consumes = MediaType.APPLICATION_JSON_VALUE)
5861
public Object testConnection(@Valid @RequestBody TestConnectionRequestParam param) {
59-
return dataSourceService.testConnect(param);
62+
ConnectorResponse response = dataSourceService.testConnect(param);
63+
64+
ResultMap resultMap = new ResultMap();
65+
66+
if (response == null) {
67+
return resultMap.fail().message("Connector response is null");
68+
}
69+
70+
boolean isSuccess = response.getStatus() != null
71+
&& response.getStatus().isSuccess()
72+
&& Boolean.TRUE.equals(response.getResult());
73+
74+
if (isSuccess) {
75+
return resultMap.success()
76+
.message("Connection test succeeded")
77+
.payload(true);
78+
} else {
79+
String errorMsg = StringUtils.isEmpty(response.getErrorMsg())
80+
? "Connection failed"
81+
: response.getErrorMsg();
82+
return resultMap.fail()
83+
.message(errorMsg)
84+
.payload(false);
85+
}
6086
}
6187

6288
@ApiOperation(value = "create datasource")

datavines-server/src/main/java/io/datavines/server/api/controller/ErrorDataStorageController.java

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,13 @@
1616
*/
1717
package io.datavines.server.api.controller;
1818

19+
import io.datavines.common.param.ConnectorResponse;
1920
import io.datavines.common.param.TestConnectionRequestParam;
21+
import io.datavines.common.utils.StringUtils;
2022
import io.datavines.connector.api.ConnectorFactory;
2123
import io.datavines.core.aop.RefreshToken;
2224
import io.datavines.core.constant.DataVinesConstants;
25+
import io.datavines.core.entity.ResultMap;
2326
import io.datavines.server.api.dto.bo.storage.ErrorDataStorageCreate;
2427
import io.datavines.server.api.dto.bo.storage.ErrorDataStoragePageParam;
2528
import io.datavines.server.api.dto.bo.storage.ErrorDataStorageUpdate;
@@ -52,7 +55,30 @@ public class ErrorDataStorageController {
5255
@ApiOperation(value = "test error data storage")
5356
@PostMapping(value = "/test", consumes = MediaType.APPLICATION_JSON_VALUE)
5457
public Object testConnection(@Valid @RequestBody TestConnectionRequestParam param) {
55-
return errorDataStorageService.testConnect(param);
58+
ConnectorResponse response = errorDataStorageService.testConnect(param);
59+
60+
ResultMap resultMap = new ResultMap();
61+
62+
if (response == null) {
63+
return resultMap.fail().message("Connector response is null");
64+
}
65+
66+
boolean isSuccess = response.getStatus() != null
67+
&& response.getStatus().isSuccess()
68+
&& Boolean.TRUE.equals(response.getResult());
69+
70+
if (isSuccess) {
71+
return resultMap.success()
72+
.message("Connection test succeeded")
73+
.payload(true);
74+
} else {
75+
String errorMsg = StringUtils.isEmpty(response.getErrorMsg())
76+
? "Connection failed"
77+
: response.getErrorMsg();
78+
return resultMap.fail()
79+
.message(errorMsg)
80+
.payload(false);
81+
}
5682
}
5783

5884
@ApiOperation(value = "create error data storage")

datavines-server/src/main/java/io/datavines/server/repository/service/DataSourceService.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
import com.baomidou.mybatisplus.extension.service.IService;
2121
import io.datavines.server.api.dto.bo.datasource.ExecuteRequest;
2222
import io.datavines.common.exception.DataVinesException;
23+
import io.datavines.common.param.ConnectorResponse;
2324
import io.datavines.common.param.TestConnectionRequestParam;
2425
import io.datavines.server.api.dto.bo.datasource.DataSourceCreate;
2526
import io.datavines.server.api.dto.bo.datasource.DataSourceUpdate;
@@ -31,7 +32,7 @@
3132

3233
public interface DataSourceService extends IService<DataSource> {
3334

34-
boolean testConnect(TestConnectionRequestParam connectionParam);
35+
ConnectorResponse testConnect(TestConnectionRequestParam connectionParam);
3536

3637
long insert(DataSourceCreate dataSource);
3738

0 commit comments

Comments
 (0)