Просмотр исходного кода

Implement sorting order for consumers page (#1526)

* [ISSUE-1383]Create parameters of request for sorting topics. (backend)

* [ISSUE-1383]Create parameters of request for sorting topics. (backend)

* Create parameters of request for sorting consumer groups. (backend)
ValentinPrischepa 3 лет назад
Родитель
Сommit
42a004af1c

+ 4 - 1
kafka-ui-api/src/main/java/com/provectus/kafka/ui/controller/ConsumerGroupsController.java

@@ -11,6 +11,7 @@ import com.provectus.kafka.ui.model.ConsumerGroupOffsetsResetDTO;
 import com.provectus.kafka.ui.model.ConsumerGroupOrderingDTO;
 import com.provectus.kafka.ui.model.ConsumerGroupsPageResponseDTO;
 import com.provectus.kafka.ui.model.PartitionOffsetDTO;
+import com.provectus.kafka.ui.model.SortOrderDTO;
 import com.provectus.kafka.ui.service.ConsumerGroupService;
 import com.provectus.kafka.ui.service.OffsetsResetService;
 import java.util.Map;
@@ -80,13 +81,15 @@ public class ConsumerGroupsController extends AbstractController implements Cons
       Integer perPage,
       String search,
       ConsumerGroupOrderingDTO orderBy,
+      SortOrderDTO sortOrderDto,
       ServerWebExchange exchange) {
     return consumerGroupService.getConsumerGroupsPage(
             getCluster(clusterName),
             Optional.ofNullable(page).filter(i -> i > 0).orElse(1),
             Optional.ofNullable(perPage).filter(i -> i > 0).orElse(defaultConsumerGroupsPageSize),
             search,
-            Optional.ofNullable(orderBy).orElse(ConsumerGroupOrderingDTO.NAME)
+            Optional.ofNullable(orderBy).orElse(ConsumerGroupOrderingDTO.NAME),
+            Optional.ofNullable(sortOrderDto).orElse(SortOrderDTO.ASC)
         )
         .map(this::convertPage)
         .map(ResponseEntity::ok);

+ 8 - 2
kafka-ui-api/src/main/java/com/provectus/kafka/ui/service/ConsumerGroupService.java

@@ -3,6 +3,7 @@ package com.provectus.kafka.ui.service;
 import com.provectus.kafka.ui.model.ConsumerGroupOrderingDTO;
 import com.provectus.kafka.ui.model.InternalConsumerGroup;
 import com.provectus.kafka.ui.model.KafkaCluster;
+import com.provectus.kafka.ui.model.SortOrderDTO;
 import java.util.ArrayList;
 import java.util.Comparator;
 import java.util.HashMap;
@@ -113,13 +114,18 @@ public class ConsumerGroupService {
       int page,
       int perPage,
       @Nullable String search,
-      ConsumerGroupOrderingDTO orderBy) {
+      ConsumerGroupOrderingDTO orderBy,
+      SortOrderDTO sortOrderDto
+  ) {
+    var comparator = sortOrderDto.equals(SortOrderDTO.ASC)
+        ? getPaginationComparator(orderBy)
+        : getPaginationComparator(orderBy).reversed();
     return adminClientService.get(cluster).flatMap(ac ->
         describeConsumerGroups(ac, search).flatMap(descriptions ->
             getConsumerGroups(
                 ac,
                 descriptions.stream()
-                    .sorted(getPaginationComparator(orderBy))
+                    .sorted(comparator)
                     .skip((long) (page - 1) * perPage)
                     .limit(perPage)
                     .collect(Collectors.toList())

+ 15 - 1
kafka-ui-api/src/test/java/com/provectus/kafka/ui/KafkaConsumerGroupTests.java

@@ -86,7 +86,6 @@ public class KafkaConsumerGroupTests extends AbstractBaseTest {
         .isBadRequest();
   }
 
-
   @Test
   void shouldReturnConsumerGroupsWithPagination() throws Exception {
     try (var groups1 = startConsumerGroups(3, "cgPageTest1");
@@ -116,6 +115,21 @@ public class KafkaConsumerGroupTests extends AbstractBaseTest {
             assertThat(page.getConsumerGroups())
                 .isSortedAccordingTo(Comparator.comparing(ConsumerGroupDTO::getGroupId));
           });
+
+      webTestClient
+            .get()
+            .uri("/api/clusters/{clusterName}/consumer-groups/paged?perPage=10&&search"
+                + "=cgPageTest&orderBy=NAME&sortOrder=DESC", LOCAL)
+            .exchange()
+            .expectStatus()
+            .isOk()
+            .expectBody(ConsumerGroupsPageResponseDTO.class)
+            .value(page -> {
+              assertThat(page.getPageCount()).isEqualTo(1);
+              assertThat(page.getConsumerGroups().size()).isEqualTo(5);
+              assertThat(page.getConsumerGroups())
+                  .isSortedAccordingTo(Comparator.comparing(ConsumerGroupDTO::getGroupId).reversed());
+            });
     }
   }
 

+ 5 - 0
kafka-ui-contract/src/main/resources/swagger/kafka-ui-api.yaml

@@ -652,6 +652,11 @@ paths:
           required: false
           schema:
             $ref: '#/components/schemas/ConsumerGroupOrdering'
+        - name: sortOrder
+          in: query
+          required: false
+          schema:
+            $ref: '#/components/schemas/SortOrder'
       responses:
         200:
           description: OK