Browse Source

Implement Connectors sorting / backend (#2291)

Co-authored-by: Artem Kazlanzhy <akazlanzhy@provectus.com>
Roman Zabaluev 2 years ago
parent
commit
2b5dd270e2

+ 28 - 1
kafka-ui-api/src/main/java/com/provectus/kafka/ui/controller/KafkaConnectController.java

@@ -3,13 +3,16 @@ package com.provectus.kafka.ui.controller;
 import com.provectus.kafka.ui.api.KafkaConnectApi;
 import com.provectus.kafka.ui.api.KafkaConnectApi;
 import com.provectus.kafka.ui.model.ConnectDTO;
 import com.provectus.kafka.ui.model.ConnectDTO;
 import com.provectus.kafka.ui.model.ConnectorActionDTO;
 import com.provectus.kafka.ui.model.ConnectorActionDTO;
+import com.provectus.kafka.ui.model.ConnectorColumnsToSortDTO;
 import com.provectus.kafka.ui.model.ConnectorDTO;
 import com.provectus.kafka.ui.model.ConnectorDTO;
 import com.provectus.kafka.ui.model.ConnectorPluginConfigValidationResponseDTO;
 import com.provectus.kafka.ui.model.ConnectorPluginConfigValidationResponseDTO;
 import com.provectus.kafka.ui.model.ConnectorPluginDTO;
 import com.provectus.kafka.ui.model.ConnectorPluginDTO;
 import com.provectus.kafka.ui.model.FullConnectorInfoDTO;
 import com.provectus.kafka.ui.model.FullConnectorInfoDTO;
 import com.provectus.kafka.ui.model.NewConnectorDTO;
 import com.provectus.kafka.ui.model.NewConnectorDTO;
+import com.provectus.kafka.ui.model.SortOrderDTO;
 import com.provectus.kafka.ui.model.TaskDTO;
 import com.provectus.kafka.ui.model.TaskDTO;
 import com.provectus.kafka.ui.service.KafkaConnectService;
 import com.provectus.kafka.ui.service.KafkaConnectService;
+import java.util.Comparator;
 import java.util.Map;
 import java.util.Map;
 import javax.validation.Valid;
 import javax.validation.Valid;
 import lombok.RequiredArgsConstructor;
 import lombok.RequiredArgsConstructor;
@@ -68,10 +71,16 @@ public class KafkaConnectController extends AbstractController implements KafkaC
   public Mono<ResponseEntity<Flux<FullConnectorInfoDTO>>> getAllConnectors(
   public Mono<ResponseEntity<Flux<FullConnectorInfoDTO>>> getAllConnectors(
       String clusterName,
       String clusterName,
       String search,
       String search,
+      ConnectorColumnsToSortDTO orderBy,
+      SortOrderDTO sortOrder,
       ServerWebExchange exchange
       ServerWebExchange exchange
   ) {
   ) {
+    var comparator = sortOrder == null || sortOrder.equals(SortOrderDTO.ASC)
+            ? getConnectorsComparator(orderBy)
+            : getConnectorsComparator(orderBy).reversed();
     return Mono.just(ResponseEntity.ok(
     return Mono.just(ResponseEntity.ok(
-        kafkaConnectService.getAllConnectors(getCluster(clusterName), search)));
+        kafkaConnectService.getAllConnectors(getCluster(clusterName), search).sort(comparator))
+    );
   }
   }
 
 
   @Override
   @Override
@@ -142,4 +151,22 @@ public class KafkaConnectController extends AbstractController implements KafkaC
             getCluster(clusterName), connectName, pluginName, requestBody)
             getCluster(clusterName), connectName, pluginName, requestBody)
         .map(ResponseEntity::ok);
         .map(ResponseEntity::ok);
   }
   }
+
+  private Comparator<FullConnectorInfoDTO> getConnectorsComparator(ConnectorColumnsToSortDTO orderBy) {
+    var defaultComparator = Comparator.comparing(FullConnectorInfoDTO::getName);
+    if (orderBy == null) {
+      return defaultComparator;
+    }
+    switch (orderBy) {
+      case CONNECT:
+        return Comparator.comparing(FullConnectorInfoDTO::getConnect);
+      case TYPE:
+        return Comparator.comparing(FullConnectorInfoDTO::getType);
+      case STATUS:
+        return Comparator.comparing(fullConnectorInfoDTO -> fullConnectorInfoDTO.getStatus().getState());
+      case NAME:
+      default:
+        return defaultComparator;
+    }
+  }
 }
 }

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

@@ -1267,6 +1267,16 @@ paths:
           required: false
           required: false
           schema:
           schema:
             type: string
             type: string
+        - name: orderBy
+          in: query
+          required: false
+          schema:
+            $ref: '#/components/schemas/ConnectorColumnsToSort'
+        - name: sortOrder
+          in: query
+          required: false
+          schema:
+            $ref: '#/components/schemas/SortOrder'
       responses:
       responses:
         200:
         200:
           description: OK
           description: OK
@@ -2009,6 +2019,14 @@ components:
         - REPLICATION_FACTOR
         - REPLICATION_FACTOR
         - SIZE
         - SIZE
 
 
+    ConnectorColumnsToSort:
+      type: string
+      enum:
+        - NAME
+        - CONNECT
+        - TYPE
+        - STATUS
+
     SortOrder:
     SortOrder:
       type: string
       type: string
       enum:
       enum: