diff --git a/pom.xml b/pom.xml index c66e164..d19b5e3 100644 --- a/pom.xml +++ b/pom.xml @@ -83,6 +83,12 @@ 3.12.0 + + commons-collections + commons-collections + 3.2.2 + + com.google.guava guava diff --git a/src/main/java/com/xuxd/kafka/console/beans/dto/QueryConsumerGroupDTO.java b/src/main/java/com/xuxd/kafka/console/beans/dto/QueryConsumerGroupDTO.java new file mode 100644 index 0000000..2d4180f --- /dev/null +++ b/src/main/java/com/xuxd/kafka/console/beans/dto/QueryConsumerGroupDTO.java @@ -0,0 +1,18 @@ +package com.xuxd.kafka.console.beans.dto; + +import java.util.List; +import lombok.Data; + +/** + * kafka-console-ui. + * + * @author xuxd + * @date 2021-09-11 11:26:47 + **/ +@Data +public class QueryConsumerGroupDTO { + + private String groupId; + + private List State; +} diff --git a/src/main/java/com/xuxd/kafka/console/controller/ConsumerController.java b/src/main/java/com/xuxd/kafka/console/controller/ConsumerController.java new file mode 100644 index 0000000..1103c3f --- /dev/null +++ b/src/main/java/com/xuxd/kafka/console/controller/ConsumerController.java @@ -0,0 +1,45 @@ +package com.xuxd.kafka.console.controller; + +import com.xuxd.kafka.console.beans.dto.QueryConsumerGroupDTO; +import com.xuxd.kafka.console.service.ConsumerService; +import java.util.Collections; +import java.util.HashSet; +import java.util.List; +import java.util.Objects; +import java.util.Set; +import org.apache.commons.collections.CollectionUtils; +import org.apache.commons.lang3.StringUtils; +import org.apache.kafka.common.ConsumerGroupState; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * kafka-console-ui. + * + * @author xuxd + * @date 2021-09-11 11:16:09 + **/ +@RestController +@RequestMapping("/consumer") +public class ConsumerController { + + @Autowired + private ConsumerService consumerService; + + @GetMapping("/group/list") + public Object getGroupList(@RequestBody(required = false) QueryConsumerGroupDTO dto) { + if (Objects.isNull(dto)) { + return consumerService.getConsumerGroupList(null, null); + } + List groupIdList = StringUtils.isNotBlank(dto.getGroupId()) ? Collections.singletonList(dto.getGroupId()) : Collections.emptyList(); + + Set stateSet = new HashSet<>(); + if (CollectionUtils.isNotEmpty(dto.getState())) { + dto.getState().stream().forEach(s -> stateSet.add(ConsumerGroupState.valueOf(s))); + } + return consumerService.getConsumerGroupList(groupIdList, stateSet); + } +} diff --git a/ui/src/utils/api.js b/ui/src/utils/api.js index a356f86..ad0f25f 100644 --- a/ui/src/utils/api.js +++ b/ui/src/utils/api.js @@ -66,3 +66,10 @@ export const KafkaTopicApi = { method: "delete", }, }; + +export const KafkaConsumerApi = { + getConsumerGroupList: { + url: "/consumer/group/list", + method: "get", + }, +}; diff --git a/ui/src/views/group/Group.vue b/ui/src/views/group/Group.vue index aa5366b..14233d9 100644 --- a/ui/src/views/group/Group.vue +++ b/ui/src/views/group/Group.vue @@ -1,17 +1,227 @@ - +