Merge pull request #9754 from dataease/pr@dev-v2@sysvariable
fix(数据源): API 数据源支持设置请求超时
This commit is contained in:
commit
fa7b5c9a50
@ -59,7 +59,7 @@ public class ApiUtils {
|
|||||||
if (apiDefinition == null) {
|
if (apiDefinition == null) {
|
||||||
DEException.throwException("未找到");
|
DEException.throwException("未找到");
|
||||||
}
|
}
|
||||||
String response = execHttpRequest(apiDefinition, 10);
|
String response = execHttpRequest(apiDefinition, apiDefinition.getApiQueryTimeout() == null || apiDefinition.getApiQueryTimeout() <= 0 ? 10 : apiDefinition.getApiQueryTimeout());
|
||||||
fieldList = getTableFields(apiDefinition);
|
fieldList = getTableFields(apiDefinition);
|
||||||
result.put("fieldList", fieldList);
|
result.put("fieldList", fieldList);
|
||||||
dataList = fetchResult(response, apiDefinition);
|
dataList = fetchResult(response, apiDefinition);
|
||||||
@ -116,7 +116,7 @@ public class ApiUtils {
|
|||||||
if (apiDefinition == null) {
|
if (apiDefinition == null) {
|
||||||
DEException.throwException("未找到");
|
DEException.throwException("未找到");
|
||||||
}
|
}
|
||||||
String response = execHttpRequest(apiDefinition, 10);
|
String response = execHttpRequest(apiDefinition, apiDefinition.getApiQueryTimeout() == null || apiDefinition.getApiQueryTimeout() <= 0 ? 10 : apiDefinition.getApiQueryTimeout());
|
||||||
return fetchResult(response, apiDefinition);
|
return fetchResult(response, apiDefinition);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -834,7 +834,7 @@ public class DatasourceServer implements DatasourceApi {
|
|||||||
|
|
||||||
public ApiDefinition checkApiDatasource(Map<String, String> request) throws DEException {
|
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);
|
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")) {
|
if (request.keySet().contains("type") && request.get("type").equals("apiStructure")) {
|
||||||
apiDefinition.setShowApiStructure(true);
|
apiDefinition.setShowApiStructure(true);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -31,6 +31,7 @@ export interface ApiItem {
|
|||||||
fields: Field[]
|
fields: Field[]
|
||||||
jsonFields: JsonField[]
|
jsonFields: JsonField[]
|
||||||
useJsonPath: boolean
|
useJsonPath: boolean
|
||||||
|
apiQueryTimeout: number
|
||||||
showApiStructure: boolean
|
showApiStructure: boolean
|
||||||
jsonPath: string
|
jsonPath: string
|
||||||
serialNumber: number
|
serialNumber: number
|
||||||
@ -81,6 +82,7 @@ let apiItem = reactive<ApiItem>({
|
|||||||
fields: [],
|
fields: [],
|
||||||
jsonFields: [],
|
jsonFields: [],
|
||||||
useJsonPath: false,
|
useJsonPath: false,
|
||||||
|
apiQueryTimeout: 10,
|
||||||
showApiStructure: false,
|
showApiStructure: false,
|
||||||
jsonPath: '',
|
jsonPath: '',
|
||||||
serialNumber: -1
|
serialNumber: -1
|
||||||
@ -95,6 +97,24 @@ const loading = ref(false)
|
|||||||
const columns = shallowRef([])
|
const columns = shallowRef([])
|
||||||
const tableData = shallowRef([])
|
const tableData = shallowRef([])
|
||||||
const apiItemBasicInfo = ref<FormInstance>()
|
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>({
|
const rule = reactive<FormRules>({
|
||||||
name: [
|
name: [
|
||||||
{
|
{
|
||||||
@ -109,6 +129,13 @@ const rule = reactive<FormRules>({
|
|||||||
trigger: 'blur'
|
trigger: 'blur'
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
apiQueryTimeout: [
|
||||||
|
{
|
||||||
|
required: true,
|
||||||
|
validator: isNumber,
|
||||||
|
trigger: ['blur', 'change']
|
||||||
|
}
|
||||||
|
],
|
||||||
url: [
|
url: [
|
||||||
{
|
{
|
||||||
required: true,
|
required: true,
|
||||||
@ -429,7 +456,11 @@ defineExpose({
|
|||||||
/>
|
/>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</div>
|
</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">
|
<div class="title-form_primary request-info">
|
||||||
<span>{{ t('datasource.isUseJsonPath') }}</span>
|
<span>{{ t('datasource.isUseJsonPath') }}</span>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@ -19,8 +19,7 @@ public class ApiDefinition {
|
|||||||
private ApiDefinitionRequest request;
|
private ApiDefinitionRequest request;
|
||||||
private String status;
|
private String status;
|
||||||
private List<Map<String, Object>> data = new ArrayList<>();
|
private List<Map<String, Object>> data = new ArrayList<>();
|
||||||
|
private Integer apiQueryTimeout = 10;
|
||||||
|
|
||||||
private int previewNum = 10;
|
private int previewNum = 10;
|
||||||
private int maxPreviewNum = 10;
|
private int maxPreviewNum = 10;
|
||||||
private int serialNumber;
|
private int serialNumber;
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user