feature(web): 增加flink job id和alias输入框的联动

This commit is contained in:
2023-12-01 15:47:09 +08:00
parent 7d6a4e2cce
commit a78ed8520d
8 changed files with 125 additions and 42 deletions

View File

@@ -0,0 +1,45 @@
package com.lanyuanxiaoyao.service.configuration.entity;
/**
* 常见Item封装
*
* @author lanyuanxiaoyao
* @date 2023-11-30
*/
public class Item {
private final String label;
private final String value;
public Item(String value) {
this(value, value);
}
public Item(Number value) {
this(value, value);
}
public Item(String label, String value) {
this.label = label;
this.value = value;
}
public Item(Number label, Number value) {
this(label.toString(), value.toString());
}
public String getLabel() {
return label;
}
public String getValue() {
return value;
}
@Override
public String toString() {
return "Item{" +
"label='" + label + '\'' +
", value='" + value + '\'' +
'}';
}
}

View File

@@ -115,6 +115,9 @@ public interface InfoService {
@Get("/info/all_flink_job_id") @Get("/info/all_flink_job_id")
ImmutableList<Long> allFlinkJobId(@Query("key") String key, @Query("alias") String alias); ImmutableList<Long> allFlinkJobId(@Query("key") String key, @Query("alias") String alias);
@Get("/info/all_flink_job_id")
ImmutableList<Long> allFlinkJobIdByAlias(@Query("alias") String alias);
@Get("/info/all_alias") @Get("/info/all_alias")
ImmutableList<String> allAlias(); ImmutableList<String> allAlias();
@@ -124,6 +127,9 @@ public interface InfoService {
@Get("/info/all_alias") @Get("/info/all_alias")
ImmutableList<String> allAlias(@Query("key") String key, @Query("flink_job_id") String flinkJobId); ImmutableList<String> allAlias(@Query("key") String key, @Query("flink_job_id") String flinkJobId);
@Get("/info/all_alias")
ImmutableList<String> allAliasByFlinkJobId(@Query("flink_job_id") String flinkJobId);
@Get("/info/all_hdfs") @Get("/info/all_hdfs")
ImmutableList<String> allHdfs(); ImmutableList<String> allHdfs();

View File

@@ -8,9 +8,8 @@ import com.eshore.odcp.hudi.connector.entity.SyncState;
import com.eshore.odcp.hudi.connector.entity.TableMeta; import com.eshore.odcp.hudi.connector.entity.TableMeta;
import com.eshore.odcp.hudi.connector.utils.NameHelper; import com.eshore.odcp.hudi.connector.utils.NameHelper;
import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectMapper;
import com.github.benmanes.caffeine.cache.Caffeine;
import com.github.benmanes.caffeine.cache.LoadingCache;
import com.lanyuanxiaoyao.service.configuration.ExecutorProvider; import com.lanyuanxiaoyao.service.configuration.ExecutorProvider;
import com.lanyuanxiaoyao.service.configuration.entity.Item;
import com.lanyuanxiaoyao.service.configuration.entity.PageResponse; import com.lanyuanxiaoyao.service.configuration.entity.PageResponse;
import com.lanyuanxiaoyao.service.configuration.entity.info.CompactionMetrics; import com.lanyuanxiaoyao.service.configuration.entity.info.CompactionMetrics;
import com.lanyuanxiaoyao.service.configuration.entity.info.JobIdAndAlias; import com.lanyuanxiaoyao.service.configuration.entity.info.JobIdAndAlias;
@@ -24,9 +23,7 @@ import com.lanyuanxiaoyao.service.web.entity.CompactionMetricsVO;
import com.lanyuanxiaoyao.service.web.entity.FlinkJobVO; import com.lanyuanxiaoyao.service.web.entity.FlinkJobVO;
import com.lanyuanxiaoyao.service.web.entity.SyncStateVO; import com.lanyuanxiaoyao.service.web.entity.SyncStateVO;
import com.lanyuanxiaoyao.service.web.entity.TableVO; import com.lanyuanxiaoyao.service.web.entity.TableVO;
import java.time.Duration;
import java.util.List; import java.util.List;
import java.util.Objects;
import java.util.Optional; import java.util.Optional;
import java.util.concurrent.CompletableFuture; import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutionException; import java.util.concurrent.ExecutionException;
@@ -197,42 +194,30 @@ public class TableController extends BaseController {
@SuppressWarnings("DataFlowIssue") @SuppressWarnings("DataFlowIssue")
@GetMapping("all_flink_job_id") @GetMapping("all_flink_job_id")
public AmisCrudResponse allFlinkJobId( public AmisResponse<ImmutableList<Item>> allFlinkJobId(@RequestParam(value = "alias", required = false) String alias) {
@RequestParam(value = "key", required = false) String key,
@RequestParam(value = "alias", required = false) String alias
) {
if (StrUtil.isBlank(key)) {
return AmisResponse.responseCrudData(Lists.immutable.empty());
}
if (StrUtil.isBlank(alias)) { if (StrUtil.isBlank(alias)) {
return AmisResponse.responseCrudData(infoService.allFlinkJobId(key).collect(Objects::toString)); return AmisResponse.responseSuccess(infoService.allFlinkJobId().collect(Item::new));
} else { } else {
return AmisResponse.responseCrudData(infoService.allFlinkJobId(key, alias).collect(Objects::toString)); return AmisResponse.responseSuccess(infoService.allFlinkJobIdByAlias(alias).collect(Item::new));
} }
} }
@SuppressWarnings("DataFlowIssue") @SuppressWarnings("DataFlowIssue")
@GetMapping("all_alias") @GetMapping("all_alias")
public AmisCrudResponse allAlias( public AmisResponse<ImmutableList<Item>> allAlias(@RequestParam(value = "flink_job_id", required = false) String flinkJobId) {
@RequestParam(value = "key", required = false) String key,
@RequestParam(value = "flink_job_id", required = false) String flinkJobId
) {
if (StrUtil.isBlank(key) && StrUtil.isBlank(flinkJobId)) {
return AmisResponse.responseCrudData(Lists.immutable.empty());
}
if (StrUtil.isBlank(flinkJobId)) { if (StrUtil.isBlank(flinkJobId)) {
return AmisResponse.responseCrudData(infoService.allAlias(key)); return AmisResponse.responseSuccess(infoService.allAlias().collect(Item::new));
} else { } else {
return AmisResponse.responseCrudData(infoService.allAlias(key, flinkJobId)); return AmisResponse.responseSuccess(infoService.allAliasByFlinkJobId(flinkJobId).collect(Item::new));
} }
} }
@SuppressWarnings("DataFlowIssue") @SuppressWarnings("DataFlowIssue")
@GetMapping("all_hdfs") @GetMapping("all_hdfs")
public AmisCrudResponse allHdfs(@RequestParam(value = "key", required = false) String key) { public AmisResponse<ImmutableList<Item>> allHdfs(@RequestParam(value = "key", required = false) String key) {
if (StrUtil.isBlank(key)) { if (StrUtil.isBlank(key)) {
return AmisResponse.responseCrudData(Lists.immutable.empty()); return AmisResponse.responseSuccess(infoService.allHdfs().collect(Item::new));
} }
return AmisResponse.responseCrudData(infoService.allHdfs(key)); return AmisResponse.responseSuccess(infoService.allHdfs(key).collect(Item::new));
} }
} }

View File

@@ -65,3 +65,6 @@ GET {{url}}/hudi_services/hudi_api/api/message_id?flink_job_id=15420979841327063
### ###
GET http://132.122.116.149:35680/api/message_id?flink_job_id=1542097984132706304&alias=crm_cfguse_mkt_cam_strategy_rel GET http://132.122.116.149:35680/api/message_id?flink_job_id=1542097984132706304&alias=crm_cfguse_mkt_cam_strategy_rel
### Deploy plan
GET {{web-url}}/cloud/deploy_plan

View File

@@ -1927,39 +1927,81 @@ function filterableField(mapping, multiple = false) {
} }
} }
function flinkJobIdTextInput(require = false) { function formReloadFlinkJobIdTextInputAndAliasTextInput(id) {
return { return {
type: 'input-text', onEvent: {
change: {
actions: [
{
actionType: 'reload',
componentId: `flink-job-id-input-select-${id}`
},
{
actionType: 'reload',
componentId: `alias-input-select-${id}`
}
]
}
}
}
}
function flinkJobIdTextInput(id, require = false) {
return {
id: `flink-job-id-input-select-${id}`,
type: 'select',
name: 'flinkJobId', name: 'flinkJobId',
label: 'Flink job id', label: 'Flink job id',
placeholder: '通过 ID 搜索', placeholder: '通过 ID 搜索',
clearable: true, clearable: true,
required: require, required: require,
autoComplete: { searchable: true,
source: {
method: 'get', method: 'get',
url: '${base}/table/all_flink_job_id?key=$term', url: '${base}/table/all_flink_job_id',
data: { data: {
alias: '${alias|default:undefined}' alias: '${alias|default:undefined}'
} }
}, },
/*onEvent: {
change: {
actions: [
{
actionType: 'reload',
componentId: `alias-input-select-${id}`,
},
]
}
}*/
} }
} }
function aliasTextInput(require = false) { function aliasTextInput(id, require = false) {
return { return {
type: 'input-text', id: `alias-input-select-${id}`,
type: 'select',
name: 'alias', name: 'alias',
label: '别名', label: '别名',
placeholder: '通过别名搜索', placeholder: '通过别名搜索',
clearable: true, clearable: true,
required: require, required: require,
creatable: false, searchable: true,
autoComplete: { source: {
method: 'get', method: 'get',
url: '${base}/table/all_alias?key=$term', url: '${base}/table/all_alias',
data: { data: {
flink_job_id: '${flinkJobId|default:undefined}' flink_job_id: '${flinkJobId|default:undefined}'
} }
}, },
/*onEvent: {
change: {
actions: [
{
actionType: 'reload',
componentId: `flink-job-id-input-select-${id}`
},
]
}
}*/
} }
} }

View File

@@ -28,17 +28,18 @@ function tableTab() {
// interval: 10000, // interval: 10000,
filter: { filter: {
title: '表筛选', title: '表筛选',
...formReloadFlinkJobIdTextInputAndAliasTextInput("58d0da94-1b3c-4234-948d-482ae3425e70"),
body: [ body: [
{ {
type: 'group', type: 'group',
body: [ body: [
{ {
...flinkJobIdTextInput(), ...flinkJobIdTextInput("58d0da94-1b3c-4234-948d-482ae3425e70"),
size: 'md', size: 'lg',
}, },
{ {
...aliasTextInput(), ...aliasTextInput("58d0da94-1b3c-4234-948d-482ae3425e70"),
size: 'md', size: 'lg',
}, },
] ]
}, },

View File

@@ -97,12 +97,13 @@ function toolTab() {
force: "${force === 'undefined' ? undefined : force|default:undefined}", force: "${force === 'undefined' ? undefined : force|default:undefined}",
} }
}, },
...formReloadFlinkJobIdTextInputAndAliasTextInput("0fe6a96c-6b6e-4346-b18e-c631c2389f48"),
body: [ body: [
{ {
type: 'group', type: 'group',
body: [ body: [
flinkJobIdTextInput(true), flinkJobIdTextInput("0fe6a96c-6b6e-4346-b18e-c631c2389f48", true),
aliasTextInput(true), aliasTextInput("0fe6a96c-6b6e-4346-b18e-c631c2389f48", true),
] ]
}, },
{ {

View File

@@ -64,6 +64,7 @@
tabs: [ tabs: [
// logTab(), // logTab(),
// runningTab(), // runningTab(),
toolTab(),
overviewTab(), overviewTab(),
tableTab(), tableTab(),
queueTab(), queueTab(),
@@ -72,11 +73,10 @@
yarnTab('b1,b5,a4', '压缩 b1 b5 a4', 'datalake,ten_iap.datalake', 'Compaction'), yarnTab('b1,b5,a4', '压缩 b1 b5 a4', 'datalake,ten_iap.datalake', 'Compaction'),
cloudTab(), cloudTab(),
yarnClusterTab(), yarnClusterTab(),
toolTab(),
] ]
} }
} }
let debug = false let debug = true
let server = amis.embed( let server = amis.embed(
'#root', '#root',
amisJSON, amisJSON,