added features field to kafka cluster

This commit is contained in:
Ramazan Yapparov 2021-03-17 12:59:06 +03:00
parent bbdd60b7a5
commit 087a01074c
5 changed files with 44 additions and 1 deletions

View file

@ -37,6 +37,7 @@ public interface ClusterMapper {
TopicConfig toTopicConfig(InternalTopicConfig topic);
Replica toReplica(InternalReplica replica);
Connect toKafkaConnect(KafkaConnectCluster connect);
List<Cluster.FeaturesEnum> toFeaturesEnum(List<Feature> features);
@Mapping(target = "isCompatible", source = "compatible")
CompatibilityCheckResponse toCompatibilityCheckResponse(InternalCompatibilityCheck dto);

View file

@ -0,0 +1,27 @@
package com.provectus.kafka.ui.model;
import java.util.Arrays;
import java.util.List;
import java.util.Optional;
import java.util.function.Predicate;
import java.util.stream.Collectors;
public enum Feature {
KAFKA_CONNECT(cluster -> Optional.ofNullable(cluster.getKafkaConnect())
.filter(Predicate.not(List::isEmpty))
.isPresent()
),
SCHEMA_REGISTRY(cluster -> cluster.getSchemaRegistry() != null);
private final Predicate<KafkaCluster> isEnabled;
Feature(Predicate<KafkaCluster> isEnabled) {
this.isEnabled = isEnabled;
}
public static List<Feature> getEnabledFeatures(KafkaCluster cluster) {
return Arrays.stream(values())
.filter(feature -> feature.isEnabled.test(cluster))
.collect(Collectors.toList());
}
}

View file

@ -28,4 +28,5 @@ public class KafkaCluster {
private final String protobufMessageName;
private final Properties properties;
private final Boolean readOnly;
private final List<Feature> features;
}

View file

@ -2,6 +2,7 @@ package com.provectus.kafka.ui.service;
import com.provectus.kafka.ui.config.ClustersProperties;
import com.provectus.kafka.ui.mapper.ClusterMapper;
import com.provectus.kafka.ui.model.Feature;
import com.provectus.kafka.ui.model.KafkaCluster;
import lombok.RequiredArgsConstructor;
import org.mapstruct.factory.Mappers;
@ -29,7 +30,13 @@ public class ClustersStorage {
if (kafkaClusters.get(clusterProperties.getName()) != null) {
throw new IllegalStateException("Application config isn't correct. Two clusters can't have the same name");
}
kafkaClusters.put(clusterProperties.getName(), clusterMapper.toKafkaCluster(clusterProperties));
KafkaCluster cluster = clusterMapper.toKafkaCluster(clusterProperties);
kafkaClusters.put(
clusterProperties.getName(),
cluster.toBuilder()
.features(Feature.getEnabledFeatures(cluster))
.build()
);
}
}

View file

@ -1079,6 +1079,13 @@ components:
type: number
readOnly:
type: boolean
features:
type: array
items:
type: string
enum:
- SCHEMA_REGISTRY
- KAFKA_CONNECT
required:
- id
- name