From 83c8217d734a73c836be6782878690f1ba60055a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=AE=B8=E6=99=93=E4=B8=9C?= <763795151@qq.com> Date: Tue, 19 Oct 2021 14:40:17 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E5=88=86=E5=8C=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../console/beans/dto/AddPartitionDTO.java | 4 +- .../console/controller/TopicController.java | 18 +++++++- .../interceptor/GlobalExceptionHandler.java | 27 +++++++++++ ui/src/utils/api.js | 4 ++ ui/src/views/topic/AddPartition.vue | 46 +++++++++---------- ui/src/views/topic/Topic.vue | 6 ++- 6 files changed, 77 insertions(+), 28 deletions(-) create mode 100644 src/main/java/com/xuxd/kafka/console/interceptor/GlobalExceptionHandler.java diff --git a/src/main/java/com/xuxd/kafka/console/beans/dto/AddPartitionDTO.java b/src/main/java/com/xuxd/kafka/console/beans/dto/AddPartitionDTO.java index 94cee6b..30ad5d4 100644 --- a/src/main/java/com/xuxd/kafka/console/beans/dto/AddPartitionDTO.java +++ b/src/main/java/com/xuxd/kafka/console/beans/dto/AddPartitionDTO.java @@ -1,7 +1,9 @@ package com.xuxd.kafka.console.beans.dto; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; +import java.util.Map; import lombok.Data; /** @@ -17,5 +19,5 @@ public class AddPartitionDTO { private int addNum; - private List> assignment = new ArrayList<>(); + private Map> assignment = new HashMap<>(); } diff --git a/src/main/java/com/xuxd/kafka/console/controller/TopicController.java b/src/main/java/com/xuxd/kafka/console/controller/TopicController.java index b027f82..60cde4a 100644 --- a/src/main/java/com/xuxd/kafka/console/controller/TopicController.java +++ b/src/main/java/com/xuxd/kafka/console/controller/TopicController.java @@ -4,6 +4,10 @@ import com.xuxd.kafka.console.beans.dto.AddPartitionDTO; import com.xuxd.kafka.console.beans.dto.NewTopicDTO; import com.xuxd.kafka.console.beans.enums.TopicType; import com.xuxd.kafka.console.service.TopicService; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.Map; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.DeleteMapping; import org.springframework.web.bind.annotation.GetMapping; @@ -48,6 +52,18 @@ public class TopicController { @PostMapping("/partition/new") public Object addPartition(@RequestBody AddPartitionDTO partitionDTO) { - return topicService.addPartitions(partitionDTO.getTopic().trim(), partitionDTO.getAddNum(), partitionDTO.getAssignment()); + String topic = partitionDTO.getTopic().trim(); + int addNum = partitionDTO.getAddNum(); + Map> assignmentMap = partitionDTO.getAssignment(); + List> assignment = Collections.emptyList(); + + if (!assignmentMap.isEmpty()) { + assignment = new ArrayList<>(addNum); + for (int i = 1; i <= addNum; i++) { + assignment.add(assignmentMap.containsKey(i) ? assignmentMap.get(i) : Collections.emptyList()); + } + } + + return topicService.addPartitions(topic, addNum, assignment); } } diff --git a/src/main/java/com/xuxd/kafka/console/interceptor/GlobalExceptionHandler.java b/src/main/java/com/xuxd/kafka/console/interceptor/GlobalExceptionHandler.java new file mode 100644 index 0000000..7715f45 --- /dev/null +++ b/src/main/java/com/xuxd/kafka/console/interceptor/GlobalExceptionHandler.java @@ -0,0 +1,27 @@ +package com.xuxd.kafka.console.interceptor; + +import com.xuxd.kafka.console.beans.ResponseData; +import javax.servlet.http.HttpServletRequest; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.ControllerAdvice; +import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.bind.annotation.ResponseBody; + +/** + * kafka-console-ui. + * + * @author xuxd + * @date 2021-10-19 14:32:18 + **/ +@Slf4j +@ControllerAdvice(basePackages = "com.xuxd.kafka.console.controller") +public class GlobalExceptionHandler { + + @ExceptionHandler(value = Exception.class) + @ResponseBody + public Object exceptionHandler(HttpServletRequest req, Exception ex) throws Exception { + + log.error("exception handle: ", ex); + return ResponseData.create().failed(ex.getMessage()); + } +} diff --git a/ui/src/utils/api.js b/ui/src/utils/api.js index 77622a1..5a1ea79 100644 --- a/ui/src/utils/api.js +++ b/ui/src/utils/api.js @@ -73,6 +73,10 @@ export const KafkaTopicApi = { url: "/topic/new", method: "post", }, + addPartition: { + url: "/topic/partition/new", + method: "post", + }, }; export const KafkaConsumerApi = { diff --git a/ui/src/views/topic/AddPartition.vue b/ui/src/views/topic/AddPartition.vue index f123e62..e5370c9 100644 --- a/ui/src/views/topic/AddPartition.vue +++ b/ui/src/views/topic/AddPartition.vue @@ -18,20 +18,18 @@ @submit="handleSubmit" > - - + 个分区 - + @@ -99,24 +96,25 @@ export default { e.preventDefault(); this.form.validateFields((err, values) => { if (!err) { - if (values.configs) { - const config = {}; - values.configs.split("\n").forEach((e) => { + if (values.assignment) { + const assignment = {}; + values.assignment.split("\n").forEach((e) => { const c = e.split("="); if (c.length > 1) { - let k = c[0].trim(), - v = c[1].trim(); - if (k && v) { - config[k] = v; + let k = c[0]; + let v = c[1]; + let arr = v.split(","); + if (arr.length > 0) { + assignment[k] = arr; } } }); - values.configs = config; + values.assignment = assignment; } this.loading = true; request({ - url: KafkaTopicApi.creatTopic.url, - method: KafkaTopicApi.creatTopic.method, + url: KafkaTopicApi.addPartition.url, + method: KafkaTopicApi.addPartition.method, data: values, }).then((res) => { this.loading = false; diff --git a/ui/src/views/topic/Topic.vue b/ui/src/views/topic/Topic.vue index aa5c49a..a233aa4 100644 --- a/ui/src/views/topic/Topic.vue +++ b/ui/src/views/topic/Topic.vue @@ -74,7 +74,7 @@ size="small" href="javascript:;" class="operation-btn" - @click="openAddPartitionDialog" + @click="openAddPartitionDialog(record.name)" >增加分区 @@ -91,6 +91,7 @@ @@ -183,7 +184,8 @@ export default { this.getTopicList(); } }, - openAddPartitionDialog() { + openAddPartitionDialog(topic) { + this.selectDetail.resourceName = topic; this.showAddPartition = true; }, closeAddPartitionDialog(res) {