Merge pull request #9754 from dataease/pr@dev-v2@sysvariable

fix(数据源): API 数据源支持设置请求超时
This commit is contained in:
taojinlong 2024-05-21 15:59:17 +08:00 committed by GitHub
commit fa7b5c9a50
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 36 additions and 6 deletions

View File

@ -59,7 +59,7 @@ public class ApiUtils {
if (apiDefinition == null) {
DEException.throwException("未找到");
}
String response = execHttpRequest(apiDefinition, 10);
String response = execHttpRequest(apiDefinition, apiDefinition.getApiQueryTimeout() == null || apiDefinition.getApiQueryTimeout() <= 0 ? 10 : apiDefinition.getApiQueryTimeout());
fieldList = getTableFields(apiDefinition);
result.put("fieldList", fieldList);
dataList = fetchResult(response, apiDefinition);
@ -116,7 +116,7 @@ public class ApiUtils {
if (apiDefinition == null) {
DEException.throwException("未找到");
}
String response = execHttpRequest(apiDefinition, 10);
String response = execHttpRequest(apiDefinition, apiDefinition.getApiQueryTimeout() == null || apiDefinition.getApiQueryTimeout() <= 0 ? 10 : apiDefinition.getApiQueryTimeout());
return fetchResult(response, apiDefinition);
}

View File

@ -834,7 +834,7 @@ public class DatasourceServer implements DatasourceApi {
public ApiDefinition checkApiDatasource(Map<String, String> request) throws DEException {
ApiDefinition apiDefinition = JsonUtil.parseObject(new String(java.util.Base64.getDecoder().decode(request.get("data"))), ApiDefinition.class);
String response = ApiUtils.execHttpRequest(apiDefinition, 10);
String response = ApiUtils.execHttpRequest(apiDefinition, apiDefinition.getApiQueryTimeout() == null || apiDefinition.getApiQueryTimeout() <= 0 ? 10 : apiDefinition.getApiQueryTimeout());
if (request.keySet().contains("type") && request.get("type").equals("apiStructure")) {
apiDefinition.setShowApiStructure(true);
}

View File

@ -31,6 +31,7 @@ export interface ApiItem {
fields: Field[]
jsonFields: JsonField[]
useJsonPath: boolean
apiQueryTimeout: number
showApiStructure: boolean
jsonPath: string
serialNumber: number
@ -81,6 +82,7 @@ let apiItem = reactive<ApiItem>({
fields: [],
jsonFields: [],
useJsonPath: false,
apiQueryTimeout: 10,
showApiStructure: false,
jsonPath: '',
serialNumber: -1
@ -95,6 +97,24 @@ const loading = ref(false)
const columns = shallowRef([])
const tableData = shallowRef([])
const apiItemBasicInfo = ref<FormInstance>()
const isNumber = (rule, value, callback) => {
if (!value) {
callback(new Error(t('datasource.please_input_query_timeout')))
return
}
let isNumber = false
var reg = /^\d+$/
isNumber = reg.test(value)
if (!isNumber) {
callback(new Error(t('datasource.please_input_query_timeout')))
return
}
if (value <= 0 || value > 300) {
callback(new Error(t('datasource.please_input_query_timeout')))
return
}
callback()
}
const rule = reactive<FormRules>({
name: [
{
@ -109,6 +129,13 @@ const rule = reactive<FormRules>({
trigger: 'blur'
}
],
apiQueryTimeout: [
{
required: true,
validator: isNumber,
trigger: ['blur', 'change']
}
],
url: [
{
required: true,
@ -429,7 +456,11 @@ defineExpose({
/>
</el-form-item>
</div>
<el-form-item :label="$t('datasource.query_timeout')" prop="apiQueryTimeout">
<el-input v-model="apiItem.apiQueryTimeout" autocomplete="off" type="number" :min="0">
<template v-slot:append>{{ $t('panel.second') }}</template>
</el-input>
</el-form-item>
<div class="title-form_primary request-info">
<span>{{ t('datasource.isUseJsonPath') }}</span>
</div>

View File

@ -19,8 +19,7 @@ public class ApiDefinition {
private ApiDefinitionRequest request;
private String status;
private List<Map<String, Object>> data = new ArrayList<>();
private Integer apiQueryTimeout = 10;
private int previewNum = 10;
private int maxPreviewNum = 10;
private int serialNumber;