Ver código fonte

Issue#634 clean up policy in topic list (#665)

* adding cleanup policy to InternalTopic

* adding CleanupPolicy enum

Co-authored-by: marselakhmetov <makhmetov@provectus.com>
Marsel 4 anos atrás
pai
commit
cac9069774

+ 29 - 0
kafka-ui-api/src/main/java/com/provectus/kafka/ui/model/CleanupPolicy.java

@@ -0,0 +1,29 @@
+package com.provectus.kafka.ui.model;
+
+import com.provectus.kafka.ui.exception.IllegalEntityStateException;
+import java.util.Arrays;
+
+public enum CleanupPolicy {
+  DELETE("delete"),
+  COMPACT("compact"),
+  COMPACT_DELETE("compact, delete"),
+  UNKNOWN("unknown");
+
+  private final String cleanUpPolicy;
+
+  CleanupPolicy(String cleanUpPolicy) {
+    this.cleanUpPolicy = cleanUpPolicy;
+  }
+
+  public String getCleanUpPolicy() {
+    return cleanUpPolicy;
+  }
+
+  public static CleanupPolicy fromString(String string) {
+    return Arrays.stream(CleanupPolicy.values())
+        .filter(v -> v.cleanUpPolicy.equals(string))
+        .findFirst()
+        .orElseThrow(() ->
+            new IllegalEntityStateException("Unknown cleanup policy value: " + string));
+  }
+}

+ 1 - 0
kafka-ui-api/src/main/java/com/provectus/kafka/ui/model/InternalTopic.java

@@ -14,6 +14,7 @@ public class InternalTopic {
   private final Map<Integer, InternalPartition> partitions;
   private final List<InternalTopicConfig> topicConfigs;
 
+  private final CleanupPolicy cleanUpPolicy;
   private final int replicas;
   private final int partitionCount;
   private final int inSyncReplicas;

+ 19 - 11
kafka-ui-api/src/main/java/com/provectus/kafka/ui/service/KafkaService.java

@@ -2,6 +2,7 @@ package com.provectus.kafka.ui.service;
 
 import com.provectus.kafka.ui.exception.TopicMetadataException;
 import com.provectus.kafka.ui.exception.ValidationException;
+import com.provectus.kafka.ui.model.CleanupPolicy;
 import com.provectus.kafka.ui.model.CreateTopicMessage;
 import com.provectus.kafka.ui.model.ExtendedAdminClient;
 import com.provectus.kafka.ui.model.InternalBrokerDiskUsage;
@@ -207,12 +208,18 @@ public class KafkaService {
 
   private Map<String, InternalTopic> mergeWithConfigs(
       List<InternalTopic> topics, Map<String, List<InternalTopicConfig>> configs) {
-    return topics.stream().map(
-        t -> t.toBuilder().topicConfigs(configs.get(t.getName())).build()
-    ).collect(Collectors.toMap(
-        InternalTopic::getName,
-        e -> e
-    ));
+    return topics.stream()
+        .map(t -> t.toBuilder().topicConfigs(configs.get(t.getName())).build())
+        .map(t -> t.toBuilder().cleanUpPolicy(
+            CleanupPolicy.fromString(t.getTopicConfigs().stream()
+                .filter(config -> config.getName().equals("cleanup.policy"))
+                .findFirst()
+                .orElseGet(() -> InternalTopicConfig.builder().value("unknown").build())
+                .getValue())).build())
+        .collect(Collectors.toMap(
+            InternalTopic::getName,
+            e -> e
+        ));
   }
 
   @SneakyThrows
@@ -225,11 +232,12 @@ public class KafkaService {
     final Mono<Map<String, List<InternalTopicConfig>>> configsMono =
         loadTopicsConfig(adminClient, topics);
 
-    return ClusterUtil.toMono(adminClient.describeTopics(topics).all()).map(
-        m -> m.values().stream().map(ClusterUtil::mapToInternalTopic).collect(Collectors.toList())
-    ).flatMap(internalTopics -> configsMono.map(configs ->
-        mergeWithConfigs(internalTopics, configs).values()
-    )).flatMapMany(Flux::fromIterable);
+    return ClusterUtil.toMono(adminClient.describeTopics(topics).all())
+        .map(m -> m.values().stream()
+            .map(ClusterUtil::mapToInternalTopic).collect(Collectors.toList()))
+        .flatMap(internalTopics -> configsMono
+            .map(configs -> mergeWithConfigs(internalTopics, configs).values()))
+        .flatMapMany(Flux::fromIterable);
   }
 
 

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

@@ -1486,6 +1486,13 @@ components:
           type: integer
         underReplicatedPartitions:
           type: integer
+        cleanUpPolicy:
+          type: string
+          enum:
+            - DELETE
+            - COMPACT
+            - COMPACT_DELETE
+            - UNKNOWN
         partitions:
           type: array
           items: