diff --git a/kafka-ui-api/src/main/java/com/provectus/kafka/ui/client/KafkaConnectClients.java b/kafka-ui-api/src/main/java/com/provectus/kafka/ui/client/KafkaConnectClients.java new file mode 100644 index 00000000000..53985e4899d --- /dev/null +++ b/kafka-ui-api/src/main/java/com/provectus/kafka/ui/client/KafkaConnectClients.java @@ -0,0 +1,15 @@ +package com.provectus.kafka.ui.client; + +import com.provectus.kafka.ui.connect.api.KafkaConnectClientApi; + +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + +public final class KafkaConnectClients { + + private static final Map CACHE = new ConcurrentHashMap<>(); + + public static KafkaConnectClientApi withBaseUrl(String basePath) { + return CACHE.computeIfAbsent(basePath, RetryingKafkaConnectClient::new); + } +} diff --git a/kafka-ui-api/src/main/java/com/provectus/kafka/ui/cluster/client/RetryingKafkaConnectClient.java b/kafka-ui-api/src/main/java/com/provectus/kafka/ui/client/RetryingKafkaConnectClient.java similarity index 93% rename from kafka-ui-api/src/main/java/com/provectus/kafka/ui/cluster/client/RetryingKafkaConnectClient.java rename to kafka-ui-api/src/main/java/com/provectus/kafka/ui/client/RetryingKafkaConnectClient.java index a11564e84a1..f97334e291c 100644 --- a/kafka-ui-api/src/main/java/com/provectus/kafka/ui/cluster/client/RetryingKafkaConnectClient.java +++ b/kafka-ui-api/src/main/java/com/provectus/kafka/ui/client/RetryingKafkaConnectClient.java @@ -1,9 +1,9 @@ -package com.provectus.kafka.ui.cluster.client; +package com.provectus.kafka.ui.client; -import com.provectus.kafka.ui.cluster.exception.RebalanceInProgressException; -import com.provectus.kafka.ui.cluster.exception.ValidationException; +import com.provectus.kafka.ui.exception.RebalanceInProgressException; +import com.provectus.kafka.ui.exception.ValidationException; import com.provectus.kafka.ui.connect.ApiClient; -import com.provectus.kafka.ui.connect.api.ConnectApi; +import com.provectus.kafka.ui.connect.api.KafkaConnectClientApi; import com.provectus.kafka.ui.connect.model.Connector; import com.provectus.kafka.ui.connect.model.NewConnector; import lombok.extern.log4j.Log4j2; @@ -22,7 +22,7 @@ import java.util.Map; @Log4j2 -public class RetryingKafkaConnectClient extends ConnectApi { +public class RetryingKafkaConnectClient extends KafkaConnectClientApi { private static final int MAX_RETRIES = 5; public RetryingKafkaConnectClient(String basePath) { diff --git a/kafka-ui-api/src/main/java/com/provectus/kafka/ui/cluster/client/KafkaConnectClients.java b/kafka-ui-api/src/main/java/com/provectus/kafka/ui/cluster/client/KafkaConnectClients.java deleted file mode 100644 index 5c9ed969694..00000000000 --- a/kafka-ui-api/src/main/java/com/provectus/kafka/ui/cluster/client/KafkaConnectClients.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.provectus.kafka.ui.cluster.client; - -import com.provectus.kafka.ui.connect.api.ConnectApi; - -import java.util.Map; -import java.util.concurrent.ConcurrentHashMap; - -public final class KafkaConnectClients { - - private static final Map CACHE = new ConcurrentHashMap<>(); - - public static ConnectApi withBaseUrl(String basePath) { - return CACHE.computeIfAbsent(basePath, RetryingKafkaConnectClient::new); - } -} diff --git a/kafka-ui-api/src/main/java/com/provectus/kafka/ui/cluster/config/ClustersProperties.java b/kafka-ui-api/src/main/java/com/provectus/kafka/ui/config/ClustersProperties.java similarity index 94% rename from kafka-ui-api/src/main/java/com/provectus/kafka/ui/cluster/config/ClustersProperties.java rename to kafka-ui-api/src/main/java/com/provectus/kafka/ui/config/ClustersProperties.java index 38c968cb236..b04f7a0b2bd 100644 --- a/kafka-ui-api/src/main/java/com/provectus/kafka/ui/cluster/config/ClustersProperties.java +++ b/kafka-ui-api/src/main/java/com/provectus/kafka/ui/config/ClustersProperties.java @@ -1,4 +1,4 @@ -package com.provectus.kafka.ui.cluster.config; +package com.provectus.kafka.ui.config; import java.util.Properties; import lombok.Data; diff --git a/kafka-ui-api/src/main/java/com/provectus/kafka/ui/cluster/config/Config.java b/kafka-ui-api/src/main/java/com/provectus/kafka/ui/config/Config.java similarity index 92% rename from kafka-ui-api/src/main/java/com/provectus/kafka/ui/cluster/config/Config.java rename to kafka-ui-api/src/main/java/com/provectus/kafka/ui/config/Config.java index 6af3739700f..8e4125b7a38 100644 --- a/kafka-ui-api/src/main/java/com/provectus/kafka/ui/cluster/config/Config.java +++ b/kafka-ui-api/src/main/java/com/provectus/kafka/ui/config/Config.java @@ -1,6 +1,6 @@ -package com.provectus.kafka.ui.cluster.config; +package com.provectus.kafka.ui.config; -import com.provectus.kafka.ui.cluster.util.JmxPoolFactory; +import com.provectus.kafka.ui.util.JmxPoolFactory; import org.apache.commons.pool2.KeyedObjectPool; import org.apache.commons.pool2.impl.GenericKeyedObjectPool; import org.apache.commons.pool2.impl.GenericKeyedObjectPoolConfig; diff --git a/kafka-ui-api/src/main/java/com/provectus/kafka/ui/rest/config/CorsGlobalConfiguration.java b/kafka-ui-api/src/main/java/com/provectus/kafka/ui/config/CorsGlobalConfiguration.java similarity index 96% rename from kafka-ui-api/src/main/java/com/provectus/kafka/ui/rest/config/CorsGlobalConfiguration.java rename to kafka-ui-api/src/main/java/com/provectus/kafka/ui/config/CorsGlobalConfiguration.java index 72cf97c05d2..751fd551022 100644 --- a/kafka-ui-api/src/main/java/com/provectus/kafka/ui/rest/config/CorsGlobalConfiguration.java +++ b/kafka-ui-api/src/main/java/com/provectus/kafka/ui/config/CorsGlobalConfiguration.java @@ -1,4 +1,4 @@ -package com.provectus.kafka.ui.rest.config; +package com.provectus.kafka.ui.config; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Profile; diff --git a/kafka-ui-api/src/main/java/com/provectus/kafka/ui/rest/config/CustomWebFilter.java b/kafka-ui-api/src/main/java/com/provectus/kafka/ui/config/CustomWebFilter.java similarity index 94% rename from kafka-ui-api/src/main/java/com/provectus/kafka/ui/rest/config/CustomWebFilter.java rename to kafka-ui-api/src/main/java/com/provectus/kafka/ui/config/CustomWebFilter.java index e117a43b6c1..b2cbce7a765 100644 --- a/kafka-ui-api/src/main/java/com/provectus/kafka/ui/rest/config/CustomWebFilter.java +++ b/kafka-ui-api/src/main/java/com/provectus/kafka/ui/config/CustomWebFilter.java @@ -1,4 +1,4 @@ -package com.provectus.kafka.ui.rest.config; +package com.provectus.kafka.ui.config; import org.springframework.stereotype.Component; import org.springframework.web.server.ServerWebExchange; diff --git a/kafka-ui-api/src/main/java/com/provectus/kafka/ui/rest/config/ReadOnlyModeFilter.java b/kafka-ui-api/src/main/java/com/provectus/kafka/ui/config/ReadOnlyModeFilter.java similarity index 86% rename from kafka-ui-api/src/main/java/com/provectus/kafka/ui/rest/config/ReadOnlyModeFilter.java rename to kafka-ui-api/src/main/java/com/provectus/kafka/ui/config/ReadOnlyModeFilter.java index cac985f36d3..ce0fa7743ee 100644 --- a/kafka-ui-api/src/main/java/com/provectus/kafka/ui/rest/config/ReadOnlyModeFilter.java +++ b/kafka-ui-api/src/main/java/com/provectus/kafka/ui/config/ReadOnlyModeFilter.java @@ -1,8 +1,8 @@ -package com.provectus.kafka.ui.rest.config; +package com.provectus.kafka.ui.config; -import com.provectus.kafka.ui.cluster.exception.NotFoundException; -import com.provectus.kafka.ui.cluster.exception.ReadOnlyException; -import com.provectus.kafka.ui.cluster.model.ClustersStorage; +import com.provectus.kafka.ui.exception.NotFoundException; +import com.provectus.kafka.ui.exception.ReadOnlyException; +import com.provectus.kafka.ui.service.ClustersStorage; import lombok.RequiredArgsConstructor; import org.jetbrains.annotations.NotNull; import org.springframework.core.annotation.Order; diff --git a/kafka-ui-api/src/main/java/com/provectus/kafka/ui/cluster/config/SecurityConfig.java b/kafka-ui-api/src/main/java/com/provectus/kafka/ui/config/SecurityConfig.java similarity index 94% rename from kafka-ui-api/src/main/java/com/provectus/kafka/ui/cluster/config/SecurityConfig.java rename to kafka-ui-api/src/main/java/com/provectus/kafka/ui/config/SecurityConfig.java index 0276be9ad73..9456d346d59 100644 --- a/kafka-ui-api/src/main/java/com/provectus/kafka/ui/cluster/config/SecurityConfig.java +++ b/kafka-ui-api/src/main/java/com/provectus/kafka/ui/config/SecurityConfig.java @@ -1,4 +1,4 @@ -package com.provectus.kafka.ui.cluster.config; +package com.provectus.kafka.ui.config; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.context.annotation.Bean; diff --git a/kafka-ui-api/src/main/java/com/provectus/kafka/ui/controller/BrokersController.java b/kafka-ui-api/src/main/java/com/provectus/kafka/ui/controller/BrokersController.java new file mode 100644 index 00000000000..4660ffbcda7 --- /dev/null +++ b/kafka-ui-api/src/main/java/com/provectus/kafka/ui/controller/BrokersController.java @@ -0,0 +1,32 @@ +package com.provectus.kafka.ui.controller; + +import com.provectus.kafka.ui.api.BrokersApi; +import com.provectus.kafka.ui.service.ClusterService; +import com.provectus.kafka.ui.model.Broker; +import com.provectus.kafka.ui.model.BrokerMetrics; +import lombok.RequiredArgsConstructor; +import lombok.extern.log4j.Log4j2; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.server.ServerWebExchange; +import reactor.core.publisher.Flux; +import reactor.core.publisher.Mono; + +@RestController +@RequiredArgsConstructor +@Log4j2 +public class BrokersController implements BrokersApi { + private final ClusterService clusterService; + + @Override + public Mono> getBrokersMetrics(String clusterName, Integer id, ServerWebExchange exchange) { + return clusterService.getBrokerMetrics(clusterName, id) + .map(ResponseEntity::ok) + .onErrorReturn(ResponseEntity.notFound().build()); + } + + @Override + public Mono>> getBrokers(String clusterName, ServerWebExchange exchange) { + return Mono.just(ResponseEntity.ok(clusterService.getBrokers(clusterName))); + } +} diff --git a/kafka-ui-api/src/main/java/com/provectus/kafka/ui/controller/ClustersController.java b/kafka-ui-api/src/main/java/com/provectus/kafka/ui/controller/ClustersController.java new file mode 100644 index 00000000000..3c0910daaae --- /dev/null +++ b/kafka-ui-api/src/main/java/com/provectus/kafka/ui/controller/ClustersController.java @@ -0,0 +1,40 @@ +package com.provectus.kafka.ui.controller; + +import com.provectus.kafka.ui.api.ClustersApi; +import com.provectus.kafka.ui.service.ClusterService; +import com.provectus.kafka.ui.model.Cluster; +import com.provectus.kafka.ui.model.ClusterMetrics; +import com.provectus.kafka.ui.model.ClusterStats; +import lombok.RequiredArgsConstructor; +import lombok.extern.log4j.Log4j2; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.server.ServerWebExchange; +import reactor.core.publisher.Flux; +import reactor.core.publisher.Mono; + +@RestController +@RequiredArgsConstructor +@Log4j2 +public class ClustersController implements ClustersApi { + private final ClusterService clusterService; + + @Override + public Mono> getClusterMetrics(String clusterName, ServerWebExchange exchange) { + return clusterService.getClusterMetrics(clusterName) + .map(ResponseEntity::ok) + .onErrorReturn(ResponseEntity.notFound().build()); + } + + @Override + public Mono> getClusterStats(String clusterName, ServerWebExchange exchange) { + return clusterService.getClusterStats(clusterName) + .map(ResponseEntity::ok) + .onErrorReturn(ResponseEntity.notFound().build()); + } + + @Override + public Mono>> getClusters(ServerWebExchange exchange) { + return Mono.just(ResponseEntity.ok(Flux.fromIterable(clusterService.getClusters()))); + } +} diff --git a/kafka-ui-api/src/main/java/com/provectus/kafka/ui/controller/ConsumerGroupsController.java b/kafka-ui-api/src/main/java/com/provectus/kafka/ui/controller/ConsumerGroupsController.java new file mode 100644 index 00000000000..46f273eb63f --- /dev/null +++ b/kafka-ui-api/src/main/java/com/provectus/kafka/ui/controller/ConsumerGroupsController.java @@ -0,0 +1,35 @@ +package com.provectus.kafka.ui.controller; + +import com.provectus.kafka.ui.api.ConsumerGroupsApi; +import com.provectus.kafka.ui.service.ClusterService; +import com.provectus.kafka.ui.model.ConsumerGroup; +import com.provectus.kafka.ui.model.ConsumerGroupDetails; +import lombok.RequiredArgsConstructor; +import lombok.extern.log4j.Log4j2; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.server.ServerWebExchange; +import reactor.core.publisher.Flux; +import reactor.core.publisher.Mono; + +@RestController +@RequiredArgsConstructor +@Log4j2 +public class ConsumerGroupsController implements ConsumerGroupsApi { + private final ClusterService clusterService; + + @Override + public Mono> getConsumerGroup( + String clusterName, String consumerGroupId, ServerWebExchange exchange) { + return clusterService.getConsumerGroupDetail(clusterName, consumerGroupId).map(ResponseEntity::ok); + } + + + @Override + public Mono>> getConsumerGroups(String clusterName, ServerWebExchange exchange) { + return clusterService.getConsumerGroups(clusterName) + .map(Flux::fromIterable) + .map(ResponseEntity::ok) + .switchIfEmpty(Mono.just(ResponseEntity.notFound().build())); // TODO: check behaviour on cluster not found and empty groups list + } +} diff --git a/kafka-ui-api/src/main/java/com/provectus/kafka/ui/rest/KafkaConnectRestController.java b/kafka-ui-api/src/main/java/com/provectus/kafka/ui/controller/KafkaConnectController.java similarity index 94% rename from kafka-ui-api/src/main/java/com/provectus/kafka/ui/rest/KafkaConnectRestController.java rename to kafka-ui-api/src/main/java/com/provectus/kafka/ui/controller/KafkaConnectController.java index 5024e4aeae5..2e99986a0f2 100644 --- a/kafka-ui-api/src/main/java/com/provectus/kafka/ui/rest/KafkaConnectRestController.java +++ b/kafka-ui-api/src/main/java/com/provectus/kafka/ui/controller/KafkaConnectController.java @@ -1,7 +1,7 @@ -package com.provectus.kafka.ui.rest; +package com.provectus.kafka.ui.controller; -import com.provectus.kafka.ui.api.ApiClustersConnectsApi; -import com.provectus.kafka.ui.cluster.service.KafkaConnectService; +import com.provectus.kafka.ui.api.KafkaConnectApi; +import com.provectus.kafka.ui.service.KafkaConnectService; import com.provectus.kafka.ui.model.*; import lombok.RequiredArgsConstructor; import lombok.extern.log4j.Log4j2; @@ -17,7 +17,7 @@ @RestController @RequiredArgsConstructor @Log4j2 -public class KafkaConnectRestController implements ApiClustersConnectsApi { +public class KafkaConnectController implements KafkaConnectApi { private final KafkaConnectService kafkaConnectService; @Override diff --git a/kafka-ui-api/src/main/java/com/provectus/kafka/ui/controller/MessagesController.java b/kafka-ui-api/src/main/java/com/provectus/kafka/ui/controller/MessagesController.java new file mode 100644 index 00000000000..177cd6ce62a --- /dev/null +++ b/kafka-ui-api/src/main/java/com/provectus/kafka/ui/controller/MessagesController.java @@ -0,0 +1,63 @@ +package com.provectus.kafka.ui.controller; + +import com.provectus.kafka.ui.api.MessagesApi; +import com.provectus.kafka.ui.model.ConsumerPosition; +import com.provectus.kafka.ui.service.ClusterService; +import com.provectus.kafka.ui.model.SeekType; +import com.provectus.kafka.ui.model.TopicMessage; +import java.util.Collections; +import java.util.List; +import java.util.Optional; +import java.util.function.Function; +import javax.validation.Valid; +import lombok.RequiredArgsConstructor; +import lombok.extern.log4j.Log4j2; +import org.apache.commons.lang3.tuple.Pair; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.server.ServerWebExchange; +import reactor.core.publisher.Flux; +import reactor.core.publisher.Mono; + +@RestController +@RequiredArgsConstructor +@Log4j2 +public class MessagesController implements MessagesApi { + private final ClusterService clusterService; + + @Override + public Mono> deleteTopicMessages( + String clusterName, String topicName, @Valid List partitions, ServerWebExchange exchange) { + return clusterService.deleteTopicMessages( + clusterName, + topicName, + Optional.ofNullable(partitions).orElse(List.of()) + ).map(ResponseEntity::ok); + } + + + @Override + public Mono>> getTopicMessages( + String clusterName, String topicName, @Valid SeekType seekType, @Valid List seekTo, + @Valid Integer limit, @Valid String q, ServerWebExchange exchange) { + return parseConsumerPosition(seekType, seekTo) + .map(consumerPosition -> ResponseEntity.ok(clusterService.getMessages(clusterName, topicName, consumerPosition, q, limit))); + } + + private Mono parseConsumerPosition(SeekType seekType, List seekTo) { + return Mono.justOrEmpty(seekTo) + .defaultIfEmpty(Collections.emptyList()) + .flatMapIterable(Function.identity()) + .map(p -> { + String[] splited = p.split("::"); + if (splited.length != 2) { + throw new IllegalArgumentException("Wrong seekTo argument format. See API docs for details"); + } + + return Pair.of(Integer.parseInt(splited[0]), Long.parseLong(splited[1])); + }) + .collectMap(Pair::getKey, Pair::getValue) + .map(positions -> new ConsumerPosition(seekType != null ? seekType : SeekType.BEGINNING, positions)); + } + +} diff --git a/kafka-ui-api/src/main/java/com/provectus/kafka/ui/controller/SchemasController.java b/kafka-ui-api/src/main/java/com/provectus/kafka/ui/controller/SchemasController.java new file mode 100644 index 00000000000..9edb76b2cd5 --- /dev/null +++ b/kafka-ui-api/src/main/java/com/provectus/kafka/ui/controller/SchemasController.java @@ -0,0 +1,106 @@ +package com.provectus.kafka.ui.controller; + +import com.provectus.kafka.ui.api.SchemasApi; +import com.provectus.kafka.ui.service.SchemaRegistryService; +import com.provectus.kafka.ui.model.CompatibilityCheckResponse; +import com.provectus.kafka.ui.model.CompatibilityLevel; +import com.provectus.kafka.ui.model.NewSchemaSubject; +import com.provectus.kafka.ui.model.SchemaSubject; +import javax.validation.Valid; +import lombok.RequiredArgsConstructor; +import lombok.extern.log4j.Log4j2; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.server.ServerWebExchange; +import reactor.core.publisher.Flux; +import reactor.core.publisher.Mono; + +@RestController +@RequiredArgsConstructor +@Log4j2 +public class SchemasController implements SchemasApi { + + private final SchemaRegistryService schemaRegistryService; + + @Override + public Mono> checkSchemaCompatibility( + String clusterName, String subject, @Valid Mono newSchemaSubject, ServerWebExchange exchange) { + return schemaRegistryService.checksSchemaCompatibility(clusterName, subject, newSchemaSubject) + .map(ResponseEntity::ok); + } + + @Override + public Mono> createNewSchema(String clusterName, + @Valid Mono newSchemaSubject, + ServerWebExchange exchange) { + return schemaRegistryService + .registerNewSchema(clusterName, newSchemaSubject) + .map(ResponseEntity::ok); + } + + @Override + public Mono> deleteLatestSchema( + String clusterName, String subject, ServerWebExchange exchange) { + return schemaRegistryService.deleteLatestSchemaSubject(clusterName, subject); + } + + @Override + public Mono> deleteSchema( + String clusterName, String subjectName, ServerWebExchange exchange) { + return schemaRegistryService.deleteSchemaSubjectEntirely(clusterName, subjectName); + } + + @Override + public Mono> deleteSchemaByVersion( + String clusterName, String subjectName, Integer version, ServerWebExchange exchange) { + return schemaRegistryService.deleteSchemaSubjectByVersion(clusterName, subjectName, version); + } + + @Override + public Mono>> getAllVersionsBySubject( + String clusterName, String subjectName, ServerWebExchange exchange) { + Flux schemas = schemaRegistryService.getAllVersionsBySubject(clusterName, subjectName); + return Mono.just(ResponseEntity.ok(schemas)); + } + + @Override + public Mono> getGlobalSchemaCompatibilityLevel( + String clusterName, ServerWebExchange exchange) { + return schemaRegistryService.getGlobalSchemaCompatibilityLevel(clusterName) + .map(ResponseEntity::ok) + .defaultIfEmpty(ResponseEntity.notFound().build()); + } + + @Override + public Mono> getLatestSchema(String clusterName, String subject, ServerWebExchange exchange) { + return schemaRegistryService.getLatestSchemaVersionBySubject(clusterName, subject).map(ResponseEntity::ok); + } + + @Override + public Mono> getSchemaByVersion( + String clusterName, String subject, Integer version, ServerWebExchange exchange) { + return schemaRegistryService.getSchemaSubjectByVersion(clusterName, subject, version).map(ResponseEntity::ok); + } + + @Override + public Mono>> getSchemas(String clusterName, ServerWebExchange exchange) { + Flux subjects = schemaRegistryService.getAllLatestVersionSchemas(clusterName); + return Mono.just(ResponseEntity.ok(subjects)); + } + + @Override + public Mono> updateGlobalSchemaCompatibilityLevel( + String clusterName, @Valid Mono compatibilityLevel, ServerWebExchange exchange) { + log.info("Updating schema compatibility globally"); + return schemaRegistryService.updateSchemaCompatibility(clusterName, compatibilityLevel) + .map(ResponseEntity::ok); + } + + @Override + public Mono> updateSchemaCompatibilityLevel( + String clusterName, String subject, @Valid Mono compatibilityLevel, ServerWebExchange exchange) { + log.info("Updating schema compatibility for subject: {}", subject); + return schemaRegistryService.updateSchemaCompatibility(clusterName, subject, compatibilityLevel) + .map(ResponseEntity::ok); + } +} diff --git a/kafka-ui-api/src/main/java/com/provectus/kafka/ui/controller/TopicsController.java b/kafka-ui-api/src/main/java/com/provectus/kafka/ui/controller/TopicsController.java new file mode 100644 index 00000000000..f4a05fa1db7 --- /dev/null +++ b/kafka-ui-api/src/main/java/com/provectus/kafka/ui/controller/TopicsController.java @@ -0,0 +1,71 @@ +package com.provectus.kafka.ui.controller; + +import com.provectus.kafka.ui.api.TopicsApi; +import com.provectus.kafka.ui.service.ClusterService; +import com.provectus.kafka.ui.model.Topic; +import com.provectus.kafka.ui.model.TopicConfig; +import com.provectus.kafka.ui.model.TopicDetails; +import com.provectus.kafka.ui.model.TopicFormData; +import javax.validation.Valid; +import lombok.RequiredArgsConstructor; +import lombok.extern.log4j.Log4j2; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.server.ServerWebExchange; +import reactor.core.publisher.Flux; +import reactor.core.publisher.Mono; + +@RestController +@RequiredArgsConstructor +@Log4j2 +public class TopicsController implements TopicsApi { + private final ClusterService clusterService; + + @Override + public Mono> createTopic( + String clusterName, @Valid Mono topicFormData, ServerWebExchange exchange) { + return clusterService.createTopic(clusterName, topicFormData) + .map(s -> new ResponseEntity<>(s, HttpStatus.OK)) + .switchIfEmpty(Mono.just(ResponseEntity.notFound().build())); + } + + @Override + public Mono> deleteTopic( + String clusterName, String topicName, ServerWebExchange exchange) { + return clusterService.deleteTopic(clusterName, topicName).map(ResponseEntity::ok); + } + + + @Override + public Mono>> getTopicConfigs( + String clusterName, String topicName, ServerWebExchange exchange) { + return Mono.just( + clusterService.getTopicConfigs(clusterName, topicName) + .map(Flux::fromIterable) + .map(ResponseEntity::ok) + .orElse(ResponseEntity.notFound().build()) + ); + } + + @Override + public Mono> getTopicDetails( + String clusterName, String topicName, ServerWebExchange exchange) { + return Mono.just( + clusterService.getTopicDetails(clusterName, topicName) + .map(ResponseEntity::ok) + .orElse(ResponseEntity.notFound().build()) + ); + } + + @Override + public Mono>> getTopics(String clusterName, ServerWebExchange exchange) { + return Mono.just(ResponseEntity.ok(Flux.fromIterable(clusterService.getTopics(clusterName)))); + } + + @Override + public Mono> updateTopic( + String clusterId, String topicName, @Valid Mono topicFormData, ServerWebExchange exchange) { + return clusterService.updateTopic(clusterId, topicName, topicFormData).map(ResponseEntity::ok); + } +} diff --git a/kafka-ui-api/src/main/java/com/provectus/kafka/ui/cluster/deserialization/DeserializationService.java b/kafka-ui-api/src/main/java/com/provectus/kafka/ui/deserialization/DeserializationService.java similarity index 88% rename from kafka-ui-api/src/main/java/com/provectus/kafka/ui/cluster/deserialization/DeserializationService.java rename to kafka-ui-api/src/main/java/com/provectus/kafka/ui/deserialization/DeserializationService.java index 4ebf5dca39c..824ef72709e 100644 --- a/kafka-ui-api/src/main/java/com/provectus/kafka/ui/cluster/deserialization/DeserializationService.java +++ b/kafka-ui-api/src/main/java/com/provectus/kafka/ui/deserialization/DeserializationService.java @@ -1,8 +1,8 @@ -package com.provectus.kafka.ui.cluster.deserialization; +package com.provectus.kafka.ui.deserialization; import com.fasterxml.jackson.databind.ObjectMapper; -import com.provectus.kafka.ui.cluster.model.ClustersStorage; -import com.provectus.kafka.ui.cluster.model.KafkaCluster; +import com.provectus.kafka.ui.service.ClustersStorage; +import com.provectus.kafka.ui.model.KafkaCluster; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Component; diff --git a/kafka-ui-api/src/main/java/com/provectus/kafka/ui/cluster/deserialization/ProtobufFileRecordDeserializer.java b/kafka-ui-api/src/main/java/com/provectus/kafka/ui/deserialization/ProtobufFileRecordDeserializer.java similarity index 97% rename from kafka-ui-api/src/main/java/com/provectus/kafka/ui/cluster/deserialization/ProtobufFileRecordDeserializer.java rename to kafka-ui-api/src/main/java/com/provectus/kafka/ui/deserialization/ProtobufFileRecordDeserializer.java index 60a2f177886..af958d7c1a4 100644 --- a/kafka-ui-api/src/main/java/com/provectus/kafka/ui/cluster/deserialization/ProtobufFileRecordDeserializer.java +++ b/kafka-ui-api/src/main/java/com/provectus/kafka/ui/deserialization/ProtobufFileRecordDeserializer.java @@ -1,4 +1,4 @@ -package com.provectus.kafka.ui.cluster.deserialization; +package com.provectus.kafka.ui.deserialization; import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.ObjectMapper; diff --git a/kafka-ui-api/src/main/java/com/provectus/kafka/ui/cluster/deserialization/RecordDeserializer.java b/kafka-ui-api/src/main/java/com/provectus/kafka/ui/deserialization/RecordDeserializer.java similarity index 78% rename from kafka-ui-api/src/main/java/com/provectus/kafka/ui/cluster/deserialization/RecordDeserializer.java rename to kafka-ui-api/src/main/java/com/provectus/kafka/ui/deserialization/RecordDeserializer.java index e79896e878e..3226f65f050 100644 --- a/kafka-ui-api/src/main/java/com/provectus/kafka/ui/cluster/deserialization/RecordDeserializer.java +++ b/kafka-ui-api/src/main/java/com/provectus/kafka/ui/deserialization/RecordDeserializer.java @@ -1,4 +1,4 @@ -package com.provectus.kafka.ui.cluster.deserialization; +package com.provectus.kafka.ui.deserialization; import org.apache.kafka.clients.consumer.ConsumerRecord; import org.apache.kafka.common.utils.Bytes; diff --git a/kafka-ui-api/src/main/java/com/provectus/kafka/ui/cluster/deserialization/SchemaRegistryRecordDeserializer.java b/kafka-ui-api/src/main/java/com/provectus/kafka/ui/deserialization/SchemaRegistryRecordDeserializer.java similarity index 98% rename from kafka-ui-api/src/main/java/com/provectus/kafka/ui/cluster/deserialization/SchemaRegistryRecordDeserializer.java rename to kafka-ui-api/src/main/java/com/provectus/kafka/ui/deserialization/SchemaRegistryRecordDeserializer.java index a9e3887dbbf..ea89f050325 100644 --- a/kafka-ui-api/src/main/java/com/provectus/kafka/ui/cluster/deserialization/SchemaRegistryRecordDeserializer.java +++ b/kafka-ui-api/src/main/java/com/provectus/kafka/ui/deserialization/SchemaRegistryRecordDeserializer.java @@ -1,9 +1,9 @@ -package com.provectus.kafka.ui.cluster.deserialization; +package com.provectus.kafka.ui.deserialization; import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.ObjectMapper; import com.google.protobuf.Message; -import com.provectus.kafka.ui.cluster.model.KafkaCluster; +import com.provectus.kafka.ui.model.KafkaCluster; import io.confluent.kafka.schemaregistry.SchemaProvider; import io.confluent.kafka.schemaregistry.avro.AvroSchemaProvider; import io.confluent.kafka.schemaregistry.avro.AvroSchemaUtils; diff --git a/kafka-ui-api/src/main/java/com/provectus/kafka/ui/cluster/deserialization/SimpleRecordDeserializer.java b/kafka-ui-api/src/main/java/com/provectus/kafka/ui/deserialization/SimpleRecordDeserializer.java similarity index 90% rename from kafka-ui-api/src/main/java/com/provectus/kafka/ui/cluster/deserialization/SimpleRecordDeserializer.java rename to kafka-ui-api/src/main/java/com/provectus/kafka/ui/deserialization/SimpleRecordDeserializer.java index 1a4eacc7f3e..612f548cb4a 100644 --- a/kafka-ui-api/src/main/java/com/provectus/kafka/ui/cluster/deserialization/SimpleRecordDeserializer.java +++ b/kafka-ui-api/src/main/java/com/provectus/kafka/ui/deserialization/SimpleRecordDeserializer.java @@ -1,4 +1,4 @@ -package com.provectus.kafka.ui.cluster.deserialization; +package com.provectus.kafka.ui.deserialization; import org.apache.kafka.clients.consumer.ConsumerRecord; import org.apache.kafka.common.serialization.StringDeserializer; diff --git a/kafka-ui-api/src/main/java/com/provectus/kafka/ui/cluster/exception/CustomBaseException.java b/kafka-ui-api/src/main/java/com/provectus/kafka/ui/exception/CustomBaseException.java similarity index 93% rename from kafka-ui-api/src/main/java/com/provectus/kafka/ui/cluster/exception/CustomBaseException.java rename to kafka-ui-api/src/main/java/com/provectus/kafka/ui/exception/CustomBaseException.java index 89f7594e49a..0d7e65f43c9 100644 --- a/kafka-ui-api/src/main/java/com/provectus/kafka/ui/cluster/exception/CustomBaseException.java +++ b/kafka-ui-api/src/main/java/com/provectus/kafka/ui/exception/CustomBaseException.java @@ -1,4 +1,4 @@ -package com.provectus.kafka.ui.cluster.exception; +package com.provectus.kafka.ui.exception; import org.springframework.http.HttpStatus; diff --git a/kafka-ui-api/src/main/java/com/provectus/kafka/ui/cluster/exception/DuplicateEntityException.java b/kafka-ui-api/src/main/java/com/provectus/kafka/ui/exception/DuplicateEntityException.java similarity index 85% rename from kafka-ui-api/src/main/java/com/provectus/kafka/ui/cluster/exception/DuplicateEntityException.java rename to kafka-ui-api/src/main/java/com/provectus/kafka/ui/exception/DuplicateEntityException.java index 04c6be1590c..4aaf1ade7d5 100644 --- a/kafka-ui-api/src/main/java/com/provectus/kafka/ui/cluster/exception/DuplicateEntityException.java +++ b/kafka-ui-api/src/main/java/com/provectus/kafka/ui/exception/DuplicateEntityException.java @@ -1,4 +1,4 @@ -package com.provectus.kafka.ui.cluster.exception; +package com.provectus.kafka.ui.exception; import org.springframework.http.HttpStatus; diff --git a/kafka-ui-api/src/main/java/com/provectus/kafka/ui/cluster/exception/GlobalErrorAttributes.java b/kafka-ui-api/src/main/java/com/provectus/kafka/ui/exception/GlobalErrorAttributes.java similarity index 96% rename from kafka-ui-api/src/main/java/com/provectus/kafka/ui/cluster/exception/GlobalErrorAttributes.java rename to kafka-ui-api/src/main/java/com/provectus/kafka/ui/exception/GlobalErrorAttributes.java index dc884367f18..b6557311947 100644 --- a/kafka-ui-api/src/main/java/com/provectus/kafka/ui/cluster/exception/GlobalErrorAttributes.java +++ b/kafka-ui-api/src/main/java/com/provectus/kafka/ui/exception/GlobalErrorAttributes.java @@ -1,4 +1,4 @@ -package com.provectus.kafka.ui.cluster.exception; +package com.provectus.kafka.ui.exception; import org.springframework.boot.web.reactive.error.DefaultErrorAttributes; import org.springframework.stereotype.Component; diff --git a/kafka-ui-api/src/main/java/com/provectus/kafka/ui/cluster/exception/GlobalErrorWebExceptionHandler.java b/kafka-ui-api/src/main/java/com/provectus/kafka/ui/exception/GlobalErrorWebExceptionHandler.java similarity index 97% rename from kafka-ui-api/src/main/java/com/provectus/kafka/ui/cluster/exception/GlobalErrorWebExceptionHandler.java rename to kafka-ui-api/src/main/java/com/provectus/kafka/ui/exception/GlobalErrorWebExceptionHandler.java index b1d232b7714..d53710ec693 100644 --- a/kafka-ui-api/src/main/java/com/provectus/kafka/ui/cluster/exception/GlobalErrorWebExceptionHandler.java +++ b/kafka-ui-api/src/main/java/com/provectus/kafka/ui/exception/GlobalErrorWebExceptionHandler.java @@ -1,4 +1,4 @@ -package com.provectus.kafka.ui.cluster.exception; +package com.provectus.kafka.ui.exception; import org.springframework.boot.autoconfigure.web.ResourceProperties; import org.springframework.boot.autoconfigure.web.reactive.error.AbstractErrorWebExceptionHandler; diff --git a/kafka-ui-api/src/main/java/com/provectus/kafka/ui/cluster/exception/NotFoundException.java b/kafka-ui-api/src/main/java/com/provectus/kafka/ui/exception/NotFoundException.java similarity index 85% rename from kafka-ui-api/src/main/java/com/provectus/kafka/ui/cluster/exception/NotFoundException.java rename to kafka-ui-api/src/main/java/com/provectus/kafka/ui/exception/NotFoundException.java index ff2cb1123bc..30407d5ed5f 100644 --- a/kafka-ui-api/src/main/java/com/provectus/kafka/ui/cluster/exception/NotFoundException.java +++ b/kafka-ui-api/src/main/java/com/provectus/kafka/ui/exception/NotFoundException.java @@ -1,4 +1,4 @@ -package com.provectus.kafka.ui.cluster.exception; +package com.provectus.kafka.ui.exception; import org.springframework.http.HttpStatus; diff --git a/kafka-ui-api/src/main/java/com/provectus/kafka/ui/cluster/exception/ReadOnlyException.java b/kafka-ui-api/src/main/java/com/provectus/kafka/ui/exception/ReadOnlyException.java similarity index 86% rename from kafka-ui-api/src/main/java/com/provectus/kafka/ui/cluster/exception/ReadOnlyException.java rename to kafka-ui-api/src/main/java/com/provectus/kafka/ui/exception/ReadOnlyException.java index 5002ccc5a08..5e975ef61cf 100644 --- a/kafka-ui-api/src/main/java/com/provectus/kafka/ui/cluster/exception/ReadOnlyException.java +++ b/kafka-ui-api/src/main/java/com/provectus/kafka/ui/exception/ReadOnlyException.java @@ -1,4 +1,4 @@ -package com.provectus.kafka.ui.cluster.exception; +package com.provectus.kafka.ui.exception; import org.springframework.http.HttpStatus; diff --git a/kafka-ui-api/src/main/java/com/provectus/kafka/ui/cluster/exception/RebalanceInProgressException.java b/kafka-ui-api/src/main/java/com/provectus/kafka/ui/exception/RebalanceInProgressException.java similarity index 86% rename from kafka-ui-api/src/main/java/com/provectus/kafka/ui/cluster/exception/RebalanceInProgressException.java rename to kafka-ui-api/src/main/java/com/provectus/kafka/ui/exception/RebalanceInProgressException.java index a6fe7c4865b..bafaae5d762 100644 --- a/kafka-ui-api/src/main/java/com/provectus/kafka/ui/cluster/exception/RebalanceInProgressException.java +++ b/kafka-ui-api/src/main/java/com/provectus/kafka/ui/exception/RebalanceInProgressException.java @@ -1,4 +1,4 @@ -package com.provectus.kafka.ui.cluster.exception; +package com.provectus.kafka.ui.exception; import org.springframework.http.HttpStatus; diff --git a/kafka-ui-api/src/main/java/com/provectus/kafka/ui/cluster/exception/UnprocessableEntityException.java b/kafka-ui-api/src/main/java/com/provectus/kafka/ui/exception/UnprocessableEntityException.java similarity index 86% rename from kafka-ui-api/src/main/java/com/provectus/kafka/ui/cluster/exception/UnprocessableEntityException.java rename to kafka-ui-api/src/main/java/com/provectus/kafka/ui/exception/UnprocessableEntityException.java index bafc8c81806..f9aeb1cc29e 100644 --- a/kafka-ui-api/src/main/java/com/provectus/kafka/ui/cluster/exception/UnprocessableEntityException.java +++ b/kafka-ui-api/src/main/java/com/provectus/kafka/ui/exception/UnprocessableEntityException.java @@ -1,4 +1,4 @@ -package com.provectus.kafka.ui.cluster.exception; +package com.provectus.kafka.ui.exception; import org.springframework.http.HttpStatus; diff --git a/kafka-ui-api/src/main/java/com/provectus/kafka/ui/cluster/exception/ValidationException.java b/kafka-ui-api/src/main/java/com/provectus/kafka/ui/exception/ValidationException.java similarity index 85% rename from kafka-ui-api/src/main/java/com/provectus/kafka/ui/cluster/exception/ValidationException.java rename to kafka-ui-api/src/main/java/com/provectus/kafka/ui/exception/ValidationException.java index ff2e9b72afa..1b218d9570e 100644 --- a/kafka-ui-api/src/main/java/com/provectus/kafka/ui/cluster/exception/ValidationException.java +++ b/kafka-ui-api/src/main/java/com/provectus/kafka/ui/exception/ValidationException.java @@ -1,4 +1,4 @@ -package com.provectus.kafka.ui.cluster.exception; +package com.provectus.kafka.ui.exception; import org.springframework.http.HttpStatus; diff --git a/kafka-ui-api/src/main/java/com/provectus/kafka/ui/cluster/mapper/ClusterMapper.java b/kafka-ui-api/src/main/java/com/provectus/kafka/ui/mapper/ClusterMapper.java similarity index 92% rename from kafka-ui-api/src/main/java/com/provectus/kafka/ui/cluster/mapper/ClusterMapper.java rename to kafka-ui-api/src/main/java/com/provectus/kafka/ui/mapper/ClusterMapper.java index befddfc3280..7a47620f2f6 100644 --- a/kafka-ui-api/src/main/java/com/provectus/kafka/ui/cluster/mapper/ClusterMapper.java +++ b/kafka-ui-api/src/main/java/com/provectus/kafka/ui/mapper/ClusterMapper.java @@ -1,10 +1,9 @@ -package com.provectus.kafka.ui.cluster.mapper; +package com.provectus.kafka.ui.mapper; -import com.provectus.kafka.ui.cluster.config.ClustersProperties; -import com.provectus.kafka.ui.cluster.model.*; -import com.provectus.kafka.ui.cluster.model.schemaregistry.InternalCompatibilityCheck; -import com.provectus.kafka.ui.cluster.model.schemaregistry.InternalCompatibilityLevel; +import com.provectus.kafka.ui.config.ClustersProperties; import com.provectus.kafka.ui.model.*; +import com.provectus.kafka.ui.model.schemaregistry.InternalCompatibilityCheck; +import com.provectus.kafka.ui.model.schemaregistry.InternalCompatibilityLevel; import java.util.Properties; import org.mapstruct.Mapper; import org.mapstruct.Mapping; diff --git a/kafka-ui-api/src/main/java/com/provectus/kafka/ui/cluster/mapper/KafkaConnectMapper.java b/kafka-ui-api/src/main/java/com/provectus/kafka/ui/mapper/KafkaConnectMapper.java similarity index 95% rename from kafka-ui-api/src/main/java/com/provectus/kafka/ui/cluster/mapper/KafkaConnectMapper.java rename to kafka-ui-api/src/main/java/com/provectus/kafka/ui/mapper/KafkaConnectMapper.java index 4010e102dd3..fe81ba89727 100644 --- a/kafka-ui-api/src/main/java/com/provectus/kafka/ui/cluster/mapper/KafkaConnectMapper.java +++ b/kafka-ui-api/src/main/java/com/provectus/kafka/ui/mapper/KafkaConnectMapper.java @@ -1,4 +1,4 @@ -package com.provectus.kafka.ui.cluster.mapper; +package com.provectus.kafka.ui.mapper; import com.provectus.kafka.ui.connect.model.ConnectorStatusConnector; import com.provectus.kafka.ui.connect.model.ConnectorTask; diff --git a/kafka-ui-api/src/main/java/com/provectus/kafka/ui/cluster/model/ConsumerPosition.java b/kafka-ui-api/src/main/java/com/provectus/kafka/ui/model/ConsumerPosition.java similarity index 62% rename from kafka-ui-api/src/main/java/com/provectus/kafka/ui/cluster/model/ConsumerPosition.java rename to kafka-ui-api/src/main/java/com/provectus/kafka/ui/model/ConsumerPosition.java index 36e934f8263..ee3e06e4a9b 100644 --- a/kafka-ui-api/src/main/java/com/provectus/kafka/ui/cluster/model/ConsumerPosition.java +++ b/kafka-ui-api/src/main/java/com/provectus/kafka/ui/model/ConsumerPosition.java @@ -1,11 +1,9 @@ -package com.provectus.kafka.ui.cluster.model; +package com.provectus.kafka.ui.model; import lombok.Value; import java.util.Map; -import com.provectus.kafka.ui.model.SeekType; - @Value public class ConsumerPosition { diff --git a/kafka-ui-api/src/main/java/com/provectus/kafka/ui/cluster/model/ExtendedAdminClient.java b/kafka-ui-api/src/main/java/com/provectus/kafka/ui/model/ExtendedAdminClient.java similarity index 86% rename from kafka-ui-api/src/main/java/com/provectus/kafka/ui/cluster/model/ExtendedAdminClient.java rename to kafka-ui-api/src/main/java/com/provectus/kafka/ui/model/ExtendedAdminClient.java index 69eeb032e11..c1525e87d02 100644 --- a/kafka-ui-api/src/main/java/com/provectus/kafka/ui/cluster/model/ExtendedAdminClient.java +++ b/kafka-ui-api/src/main/java/com/provectus/kafka/ui/model/ExtendedAdminClient.java @@ -1,6 +1,6 @@ -package com.provectus.kafka.ui.cluster.model; +package com.provectus.kafka.ui.model; -import com.provectus.kafka.ui.cluster.util.ClusterUtil; +import com.provectus.kafka.ui.util.ClusterUtil; import lombok.Data; import lombok.RequiredArgsConstructor; import org.apache.kafka.clients.admin.AdminClient; diff --git a/kafka-ui-api/src/main/java/com/provectus/kafka/ui/cluster/model/InternalBrokerDiskUsage.java b/kafka-ui-api/src/main/java/com/provectus/kafka/ui/model/InternalBrokerDiskUsage.java similarity index 80% rename from kafka-ui-api/src/main/java/com/provectus/kafka/ui/cluster/model/InternalBrokerDiskUsage.java rename to kafka-ui-api/src/main/java/com/provectus/kafka/ui/model/InternalBrokerDiskUsage.java index 42d57faba7b..70c16b5b4a6 100644 --- a/kafka-ui-api/src/main/java/com/provectus/kafka/ui/cluster/model/InternalBrokerDiskUsage.java +++ b/kafka-ui-api/src/main/java/com/provectus/kafka/ui/model/InternalBrokerDiskUsage.java @@ -1,4 +1,4 @@ -package com.provectus.kafka.ui.cluster.model; +package com.provectus.kafka.ui.model; import lombok.Builder; import lombok.Data; diff --git a/kafka-ui-api/src/main/java/com/provectus/kafka/ui/cluster/model/InternalBrokerMetrics.java b/kafka-ui-api/src/main/java/com/provectus/kafka/ui/model/InternalBrokerMetrics.java similarity index 66% rename from kafka-ui-api/src/main/java/com/provectus/kafka/ui/cluster/model/InternalBrokerMetrics.java rename to kafka-ui-api/src/main/java/com/provectus/kafka/ui/model/InternalBrokerMetrics.java index a7a872bcdc8..a5f788aa817 100644 --- a/kafka-ui-api/src/main/java/com/provectus/kafka/ui/cluster/model/InternalBrokerMetrics.java +++ b/kafka-ui-api/src/main/java/com/provectus/kafka/ui/model/InternalBrokerMetrics.java @@ -1,6 +1,5 @@ -package com.provectus.kafka.ui.cluster.model; +package com.provectus.kafka.ui.model; -import com.provectus.kafka.ui.model.Metric; import lombok.Builder; import lombok.Data; diff --git a/kafka-ui-api/src/main/java/com/provectus/kafka/ui/cluster/model/InternalClusterMetrics.java b/kafka-ui-api/src/main/java/com/provectus/kafka/ui/model/InternalClusterMetrics.java similarity index 91% rename from kafka-ui-api/src/main/java/com/provectus/kafka/ui/cluster/model/InternalClusterMetrics.java rename to kafka-ui-api/src/main/java/com/provectus/kafka/ui/model/InternalClusterMetrics.java index a411dbbac13..8d1105cd688 100644 --- a/kafka-ui-api/src/main/java/com/provectus/kafka/ui/cluster/model/InternalClusterMetrics.java +++ b/kafka-ui-api/src/main/java/com/provectus/kafka/ui/model/InternalClusterMetrics.java @@ -1,6 +1,5 @@ -package com.provectus.kafka.ui.cluster.model; +package com.provectus.kafka.ui.model; -import com.provectus.kafka.ui.model.Metric; import lombok.Builder; import lombok.Data; diff --git a/kafka-ui-api/src/main/java/com/provectus/kafka/ui/cluster/model/InternalPartition.java b/kafka-ui-api/src/main/java/com/provectus/kafka/ui/model/InternalPartition.java similarity index 91% rename from kafka-ui-api/src/main/java/com/provectus/kafka/ui/cluster/model/InternalPartition.java rename to kafka-ui-api/src/main/java/com/provectus/kafka/ui/model/InternalPartition.java index 87395e71ca4..8d4c1117051 100644 --- a/kafka-ui-api/src/main/java/com/provectus/kafka/ui/cluster/model/InternalPartition.java +++ b/kafka-ui-api/src/main/java/com/provectus/kafka/ui/model/InternalPartition.java @@ -1,4 +1,4 @@ -package com.provectus.kafka.ui.cluster.model; +package com.provectus.kafka.ui.model; import lombok.Builder; import lombok.Data; diff --git a/kafka-ui-api/src/main/java/com/provectus/kafka/ui/cluster/model/InternalReplica.java b/kafka-ui-api/src/main/java/com/provectus/kafka/ui/model/InternalReplica.java similarity index 84% rename from kafka-ui-api/src/main/java/com/provectus/kafka/ui/cluster/model/InternalReplica.java rename to kafka-ui-api/src/main/java/com/provectus/kafka/ui/model/InternalReplica.java index fb24bcf08be..a883c73c9bb 100644 --- a/kafka-ui-api/src/main/java/com/provectus/kafka/ui/cluster/model/InternalReplica.java +++ b/kafka-ui-api/src/main/java/com/provectus/kafka/ui/model/InternalReplica.java @@ -1,4 +1,4 @@ -package com.provectus.kafka.ui.cluster.model; +package com.provectus.kafka.ui.model; import lombok.Builder; import lombok.Data; diff --git a/kafka-ui-api/src/main/java/com/provectus/kafka/ui/cluster/model/InternalSegmentSizeDto.java b/kafka-ui-api/src/main/java/com/provectus/kafka/ui/model/InternalSegmentSizeDto.java similarity index 86% rename from kafka-ui-api/src/main/java/com/provectus/kafka/ui/cluster/model/InternalSegmentSizeDto.java rename to kafka-ui-api/src/main/java/com/provectus/kafka/ui/model/InternalSegmentSizeDto.java index cba7e031b7b..05f6aa80df1 100644 --- a/kafka-ui-api/src/main/java/com/provectus/kafka/ui/cluster/model/InternalSegmentSizeDto.java +++ b/kafka-ui-api/src/main/java/com/provectus/kafka/ui/model/InternalSegmentSizeDto.java @@ -1,4 +1,4 @@ -package com.provectus.kafka.ui.cluster.model; +package com.provectus.kafka.ui.model; import lombok.Builder; import lombok.Data; diff --git a/kafka-ui-api/src/main/java/com/provectus/kafka/ui/cluster/model/InternalTopic.java b/kafka-ui-api/src/main/java/com/provectus/kafka/ui/model/InternalTopic.java similarity index 86% rename from kafka-ui-api/src/main/java/com/provectus/kafka/ui/cluster/model/InternalTopic.java rename to kafka-ui-api/src/main/java/com/provectus/kafka/ui/model/InternalTopic.java index f027bcabf87..85abed22596 100644 --- a/kafka-ui-api/src/main/java/com/provectus/kafka/ui/cluster/model/InternalTopic.java +++ b/kafka-ui-api/src/main/java/com/provectus/kafka/ui/model/InternalTopic.java @@ -1,8 +1,7 @@ -package com.provectus.kafka.ui.cluster.model; +package com.provectus.kafka.ui.model; import lombok.Builder; import lombok.Data; -import org.apache.kafka.common.TopicPartition; import java.util.List; import java.util.Map; diff --git a/kafka-ui-api/src/main/java/com/provectus/kafka/ui/cluster/model/InternalTopicConfig.java b/kafka-ui-api/src/main/java/com/provectus/kafka/ui/model/InternalTopicConfig.java similarity index 81% rename from kafka-ui-api/src/main/java/com/provectus/kafka/ui/cluster/model/InternalTopicConfig.java rename to kafka-ui-api/src/main/java/com/provectus/kafka/ui/model/InternalTopicConfig.java index 1e34278cd99..65003ac97df 100644 --- a/kafka-ui-api/src/main/java/com/provectus/kafka/ui/cluster/model/InternalTopicConfig.java +++ b/kafka-ui-api/src/main/java/com/provectus/kafka/ui/model/InternalTopicConfig.java @@ -1,4 +1,4 @@ -package com.provectus.kafka.ui.cluster.model; +package com.provectus.kafka.ui.model; import lombok.Builder; diff --git a/kafka-ui-api/src/main/java/com/provectus/kafka/ui/cluster/model/KafkaCluster.java b/kafka-ui-api/src/main/java/com/provectus/kafka/ui/model/KafkaCluster.java similarity index 90% rename from kafka-ui-api/src/main/java/com/provectus/kafka/ui/cluster/model/KafkaCluster.java rename to kafka-ui-api/src/main/java/com/provectus/kafka/ui/model/KafkaCluster.java index 28b084437f5..361b2141948 100644 --- a/kafka-ui-api/src/main/java/com/provectus/kafka/ui/cluster/model/KafkaCluster.java +++ b/kafka-ui-api/src/main/java/com/provectus/kafka/ui/model/KafkaCluster.java @@ -1,6 +1,4 @@ -package com.provectus.kafka.ui.cluster.model; - -import com.provectus.kafka.ui.model.ServerStatus; +package com.provectus.kafka.ui.model; import java.util.List; import java.util.Properties; diff --git a/kafka-ui-api/src/main/java/com/provectus/kafka/ui/cluster/model/KafkaConnectCluster.java b/kafka-ui-api/src/main/java/com/provectus/kafka/ui/model/KafkaConnectCluster.java similarity index 79% rename from kafka-ui-api/src/main/java/com/provectus/kafka/ui/cluster/model/KafkaConnectCluster.java rename to kafka-ui-api/src/main/java/com/provectus/kafka/ui/model/KafkaConnectCluster.java index 352a8369ac3..403f56715f0 100644 --- a/kafka-ui-api/src/main/java/com/provectus/kafka/ui/cluster/model/KafkaConnectCluster.java +++ b/kafka-ui-api/src/main/java/com/provectus/kafka/ui/model/KafkaConnectCluster.java @@ -1,4 +1,4 @@ -package com.provectus.kafka.ui.cluster.model; +package com.provectus.kafka.ui.model; import lombok.Builder; import lombok.Data; diff --git a/kafka-ui-api/src/main/java/com/provectus/kafka/ui/cluster/model/schemaregistry/InternalCompatibilityCheck.java b/kafka-ui-api/src/main/java/com/provectus/kafka/ui/model/schemaregistry/InternalCompatibilityCheck.java similarity index 76% rename from kafka-ui-api/src/main/java/com/provectus/kafka/ui/cluster/model/schemaregistry/InternalCompatibilityCheck.java rename to kafka-ui-api/src/main/java/com/provectus/kafka/ui/model/schemaregistry/InternalCompatibilityCheck.java index da072c46f69..7c57634d873 100644 --- a/kafka-ui-api/src/main/java/com/provectus/kafka/ui/cluster/model/schemaregistry/InternalCompatibilityCheck.java +++ b/kafka-ui-api/src/main/java/com/provectus/kafka/ui/model/schemaregistry/InternalCompatibilityCheck.java @@ -1,4 +1,4 @@ -package com.provectus.kafka.ui.cluster.model.schemaregistry; +package com.provectus.kafka.ui.model.schemaregistry; import com.fasterxml.jackson.annotation.JsonProperty; import lombok.Data; diff --git a/kafka-ui-api/src/main/java/com/provectus/kafka/ui/cluster/model/schemaregistry/InternalCompatibilityLevel.java b/kafka-ui-api/src/main/java/com/provectus/kafka/ui/model/schemaregistry/InternalCompatibilityLevel.java similarity index 64% rename from kafka-ui-api/src/main/java/com/provectus/kafka/ui/cluster/model/schemaregistry/InternalCompatibilityLevel.java rename to kafka-ui-api/src/main/java/com/provectus/kafka/ui/model/schemaregistry/InternalCompatibilityLevel.java index d66fc80c8dd..9a7b8a9c9f6 100644 --- a/kafka-ui-api/src/main/java/com/provectus/kafka/ui/cluster/model/schemaregistry/InternalCompatibilityLevel.java +++ b/kafka-ui-api/src/main/java/com/provectus/kafka/ui/model/schemaregistry/InternalCompatibilityLevel.java @@ -1,4 +1,4 @@ -package com.provectus.kafka.ui.cluster.model.schemaregistry; +package com.provectus.kafka.ui.model.schemaregistry; import lombok.Data; diff --git a/kafka-ui-api/src/main/java/com/provectus/kafka/ui/cluster/model/schemaregistry/InternalNewSchema.java b/kafka-ui-api/src/main/java/com/provectus/kafka/ui/model/schemaregistry/InternalNewSchema.java similarity index 87% rename from kafka-ui-api/src/main/java/com/provectus/kafka/ui/cluster/model/schemaregistry/InternalNewSchema.java rename to kafka-ui-api/src/main/java/com/provectus/kafka/ui/model/schemaregistry/InternalNewSchema.java index b121943fe34..de8b638af3e 100644 --- a/kafka-ui-api/src/main/java/com/provectus/kafka/ui/cluster/model/schemaregistry/InternalNewSchema.java +++ b/kafka-ui-api/src/main/java/com/provectus/kafka/ui/model/schemaregistry/InternalNewSchema.java @@ -1,4 +1,4 @@ -package com.provectus.kafka.ui.cluster.model.schemaregistry; +package com.provectus.kafka.ui.model.schemaregistry; import com.fasterxml.jackson.annotation.JsonInclude; import com.provectus.kafka.ui.model.SchemaType; diff --git a/kafka-ui-api/src/main/java/com/provectus/kafka/ui/cluster/model/schemaregistry/SubjectIdResponse.java b/kafka-ui-api/src/main/java/com/provectus/kafka/ui/model/schemaregistry/SubjectIdResponse.java similarity index 58% rename from kafka-ui-api/src/main/java/com/provectus/kafka/ui/cluster/model/schemaregistry/SubjectIdResponse.java rename to kafka-ui-api/src/main/java/com/provectus/kafka/ui/model/schemaregistry/SubjectIdResponse.java index 3a6eefee279..bb8c5e8fb09 100644 --- a/kafka-ui-api/src/main/java/com/provectus/kafka/ui/cluster/model/schemaregistry/SubjectIdResponse.java +++ b/kafka-ui-api/src/main/java/com/provectus/kafka/ui/model/schemaregistry/SubjectIdResponse.java @@ -1,4 +1,4 @@ -package com.provectus.kafka.ui.cluster.model.schemaregistry; +package com.provectus.kafka.ui.model.schemaregistry; import lombok.Data; diff --git a/kafka-ui-api/src/main/java/com/provectus/kafka/ui/rest/MetricsRestController.java b/kafka-ui-api/src/main/java/com/provectus/kafka/ui/rest/MetricsRestController.java deleted file mode 100644 index a2672d7bfcd..00000000000 --- a/kafka-ui-api/src/main/java/com/provectus/kafka/ui/rest/MetricsRestController.java +++ /dev/null @@ -1,219 +0,0 @@ -package com.provectus.kafka.ui.rest; - -import com.provectus.kafka.ui.api.ApiClustersApi; -import com.provectus.kafka.ui.cluster.model.ConsumerPosition; -import com.provectus.kafka.ui.cluster.service.ClusterService; -import com.provectus.kafka.ui.cluster.service.SchemaRegistryService; -import com.provectus.kafka.ui.model.*; -import lombok.RequiredArgsConstructor; -import lombok.extern.log4j.Log4j2; -import org.apache.commons.lang3.tuple.Pair; -import org.springframework.http.HttpStatus; -import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.RestController; -import org.springframework.web.server.ServerWebExchange; -import reactor.core.publisher.Flux; -import reactor.core.publisher.Mono; - -import javax.validation.Valid; -import java.util.Collections; -import java.util.List; -import java.util.Optional; -import java.util.function.Function; - -@RestController -@RequiredArgsConstructor -@Log4j2 -public class MetricsRestController implements ApiClustersApi { - - private final ClusterService clusterService; - private final SchemaRegistryService schemaRegistryService; - - @Override - public Mono>> getClusters(ServerWebExchange exchange) { - return Mono.just(ResponseEntity.ok(Flux.fromIterable(clusterService.getClusters()))); - } - - @Override - public Mono> getBrokersMetrics(String clusterName, Integer id, ServerWebExchange exchange) { - return clusterService.getBrokerMetrics(clusterName, id) - .map(ResponseEntity::ok) - .onErrorReturn(ResponseEntity.notFound().build()); - } - - @Override - public Mono> getClusterMetrics(String clusterName, ServerWebExchange exchange) { - return clusterService.getClusterMetrics(clusterName) - .map(ResponseEntity::ok) - .onErrorReturn(ResponseEntity.notFound().build()); - } - - @Override - public Mono> getClusterStats(String clusterName, ServerWebExchange exchange) { - return clusterService.getClusterStats(clusterName) - .map(ResponseEntity::ok) - .onErrorReturn(ResponseEntity.notFound().build()); - } - - @Override - public Mono>> getTopics(String clusterName, ServerWebExchange exchange) { - return Mono.just(ResponseEntity.ok(Flux.fromIterable(clusterService.getTopics(clusterName)))); - } - - @Override - public Mono> getTopicDetails(String clusterName, String topicName, ServerWebExchange exchange) { - return Mono.just( - clusterService.getTopicDetails(clusterName, topicName) - .map(ResponseEntity::ok) - .orElse(ResponseEntity.notFound().build()) - ); - } - - @Override - public Mono>> getTopicConfigs(String clusterName, String topicName, ServerWebExchange exchange) { - return Mono.just( - clusterService.getTopicConfigs(clusterName, topicName) - .map(Flux::fromIterable) - .map(ResponseEntity::ok) - .orElse(ResponseEntity.notFound().build()) - ); - } - - @Override - public Mono>> getTopicMessages(String clusterName, String topicName, @Valid SeekType seekType, @Valid List seekTo, @Valid Integer limit, @Valid String q, ServerWebExchange exchange) { - return parseConsumerPosition(seekType, seekTo) - .map(consumerPosition -> ResponseEntity.ok(clusterService.getMessages(clusterName, topicName, consumerPosition, q, limit))); - } - - @Override - public Mono> deleteTopicMessages(String clusterName, String topicName, @Valid List partitions, ServerWebExchange exchange) { - return clusterService.deleteTopicMessages(clusterName, topicName, Optional.ofNullable(partitions).orElse(List.of())) - .map(ResponseEntity::ok); - } - - @Override - public Mono> createTopic(String clusterName, @Valid Mono topicFormData, ServerWebExchange exchange) { - return clusterService.createTopic(clusterName, topicFormData) - .map(s -> new ResponseEntity<>(s, HttpStatus.OK)) - .switchIfEmpty(Mono.just(ResponseEntity.notFound().build())); - } - - @Override - public Mono>> getBrokers(String clusterName, ServerWebExchange exchange) { - return Mono.just(ResponseEntity.ok(clusterService.getBrokers(clusterName))); - } - - @Override - public Mono>> getConsumerGroups(String clusterName, ServerWebExchange exchange) { - return clusterService.getConsumerGroups(clusterName) - .map(Flux::fromIterable) - .map(ResponseEntity::ok) - .switchIfEmpty(Mono.just(ResponseEntity.notFound().build())); // TODO: check behaviour on cluster not found and empty groups list - } - - @Override - public Mono> getLatestSchema(String clusterName, String subject, ServerWebExchange exchange) { - return schemaRegistryService.getLatestSchemaVersionBySubject(clusterName, subject).map(ResponseEntity::ok); - } - - @Override - public Mono> getSchemaByVersion(String clusterName, String subject, Integer version, ServerWebExchange exchange) { - return schemaRegistryService.getSchemaSubjectByVersion(clusterName, subject, version).map(ResponseEntity::ok); - } - - @Override - public Mono>> getSchemas(String clusterName, ServerWebExchange exchange) { - Flux subjects = schemaRegistryService.getAllLatestVersionSchemas(clusterName); - return Mono.just(ResponseEntity.ok(subjects)); - } - - @Override - public Mono>> getAllVersionsBySubject(String clusterName, String subjectName, ServerWebExchange exchange) { - Flux schemas = schemaRegistryService.getAllVersionsBySubject(clusterName, subjectName); - return Mono.just(ResponseEntity.ok(schemas)); - } - - @Override - public Mono> deleteLatestSchema(String clusterName, String subject, ServerWebExchange exchange) { - return schemaRegistryService.deleteLatestSchemaSubject(clusterName, subject); - } - - @Override - public Mono> deleteSchemaByVersion(String clusterName, String subjectName, Integer version, ServerWebExchange exchange) { - return schemaRegistryService.deleteSchemaSubjectByVersion(clusterName, subjectName, version); - } - - @Override - public Mono> deleteSchema(String clusterName, String subjectName, ServerWebExchange exchange) { - return schemaRegistryService.deleteSchemaSubjectEntirely(clusterName, subjectName); - } - - @Override - public Mono> createNewSchema(String clusterName, - @Valid Mono newSchemaSubject, - ServerWebExchange exchange) { - return schemaRegistryService - .registerNewSchema(clusterName, newSchemaSubject) - .map(ResponseEntity::ok); - } - - @Override - public Mono> getConsumerGroup(String clusterName, String consumerGroupId, ServerWebExchange exchange) { - return clusterService.getConsumerGroupDetail(clusterName, consumerGroupId).map(ResponseEntity::ok); - } - - @Override - public Mono> updateTopic(String clusterId, String topicName, @Valid Mono topicFormData, ServerWebExchange exchange) { - return clusterService.updateTopic(clusterId, topicName, topicFormData).map(ResponseEntity::ok); - } - - @Override - public Mono> deleteTopic(String clusterName, String topicName, ServerWebExchange exchange) { - return clusterService.deleteTopic(clusterName, topicName).map(ResponseEntity::ok); - } - - @Override - public Mono> getGlobalSchemaCompatibilityLevel(String clusterName, ServerWebExchange exchange) { - return schemaRegistryService.getGlobalSchemaCompatibilityLevel(clusterName) - .map(ResponseEntity::ok) - .defaultIfEmpty(ResponseEntity.notFound().build()); - } - - @Override - public Mono> updateGlobalSchemaCompatibilityLevel(String clusterName, @Valid Mono compatibilityLevel, ServerWebExchange exchange) { - log.info("Updating schema compatibility globally"); - return schemaRegistryService.updateSchemaCompatibility(clusterName, compatibilityLevel) - .map(ResponseEntity::ok); - } - - @Override - public Mono> checkSchemaCompatibility(String clusterName, String subject, - @Valid Mono newSchemaSubject, - ServerWebExchange exchange) { - return schemaRegistryService.checksSchemaCompatibility(clusterName, subject, newSchemaSubject) - .map(ResponseEntity::ok); - } - - @Override - public Mono> updateSchemaCompatibilityLevel(String clusterName, String subject, @Valid Mono compatibilityLevel, ServerWebExchange exchange) { - log.info("Updating schema compatibility for subject: {}", subject); - return schemaRegistryService.updateSchemaCompatibility(clusterName, subject, compatibilityLevel) - .map(ResponseEntity::ok); - } - - private Mono parseConsumerPosition(SeekType seekType, List seekTo) { - return Mono.justOrEmpty(seekTo) - .defaultIfEmpty(Collections.emptyList()) - .flatMapIterable(Function.identity()) - .map(p -> { - String[] splited = p.split("::"); - if (splited.length != 2) { - throw new IllegalArgumentException("Wrong seekTo argument format. See API docs for details"); - } - - return Pair.of(Integer.parseInt(splited[0]), Long.parseLong(splited[1])); - }) - .collectMap(Pair::getKey, Pair::getValue) - .map(positions -> new ConsumerPosition(seekType != null ? seekType : SeekType.BEGINNING, positions)); - } -} diff --git a/kafka-ui-api/src/main/java/com/provectus/kafka/ui/cluster/service/ClusterService.java b/kafka-ui-api/src/main/java/com/provectus/kafka/ui/service/ClusterService.java similarity index 94% rename from kafka-ui-api/src/main/java/com/provectus/kafka/ui/cluster/service/ClusterService.java rename to kafka-ui-api/src/main/java/com/provectus/kafka/ui/service/ClusterService.java index 4d4a8eaf9ad..17da7d271f9 100644 --- a/kafka-ui-api/src/main/java/com/provectus/kafka/ui/cluster/service/ClusterService.java +++ b/kafka-ui-api/src/main/java/com/provectus/kafka/ui/service/ClusterService.java @@ -1,13 +1,11 @@ -package com.provectus.kafka.ui.cluster.service; - -import com.provectus.kafka.ui.cluster.exception.NotFoundException; -import com.provectus.kafka.ui.cluster.mapper.ClusterMapper; -import com.provectus.kafka.ui.cluster.model.ClustersStorage; -import com.provectus.kafka.ui.cluster.model.ConsumerPosition; -import com.provectus.kafka.ui.cluster.model.InternalTopic; -import com.provectus.kafka.ui.cluster.model.KafkaCluster; -import com.provectus.kafka.ui.cluster.util.ClusterUtil; -import com.provectus.kafka.ui.kafka.KafkaService; +package com.provectus.kafka.ui.service; + +import com.provectus.kafka.ui.exception.NotFoundException; +import com.provectus.kafka.ui.mapper.ClusterMapper; +import com.provectus.kafka.ui.model.ConsumerPosition; +import com.provectus.kafka.ui.model.InternalTopic; +import com.provectus.kafka.ui.model.KafkaCluster; +import com.provectus.kafka.ui.util.ClusterUtil; import com.provectus.kafka.ui.model.*; import lombok.RequiredArgsConstructor; import lombok.SneakyThrows; diff --git a/kafka-ui-api/src/main/java/com/provectus/kafka/ui/cluster/ClustersMetricsScheduler.java b/kafka-ui-api/src/main/java/com/provectus/kafka/ui/service/ClustersMetricsScheduler.java similarity index 84% rename from kafka-ui-api/src/main/java/com/provectus/kafka/ui/cluster/ClustersMetricsScheduler.java rename to kafka-ui-api/src/main/java/com/provectus/kafka/ui/service/ClustersMetricsScheduler.java index f6038d01e2d..5a78d212c11 100644 --- a/kafka-ui-api/src/main/java/com/provectus/kafka/ui/cluster/ClustersMetricsScheduler.java +++ b/kafka-ui-api/src/main/java/com/provectus/kafka/ui/service/ClustersMetricsScheduler.java @@ -1,7 +1,5 @@ -package com.provectus.kafka.ui.cluster; +package com.provectus.kafka.ui.service; -import com.provectus.kafka.ui.cluster.model.ClustersStorage; -import com.provectus.kafka.ui.cluster.service.MetricsUpdateService; import lombok.RequiredArgsConstructor; import lombok.extern.log4j.Log4j2; import org.springframework.scheduling.annotation.Scheduled; diff --git a/kafka-ui-api/src/main/java/com/provectus/kafka/ui/cluster/model/ClustersStorage.java b/kafka-ui-api/src/main/java/com/provectus/kafka/ui/service/ClustersStorage.java similarity index 88% rename from kafka-ui-api/src/main/java/com/provectus/kafka/ui/cluster/model/ClustersStorage.java rename to kafka-ui-api/src/main/java/com/provectus/kafka/ui/service/ClustersStorage.java index ffbeb6d585f..50da1cdd522 100644 --- a/kafka-ui-api/src/main/java/com/provectus/kafka/ui/cluster/model/ClustersStorage.java +++ b/kafka-ui-api/src/main/java/com/provectus/kafka/ui/service/ClustersStorage.java @@ -1,7 +1,8 @@ -package com.provectus.kafka.ui.cluster.model; +package com.provectus.kafka.ui.service; -import com.provectus.kafka.ui.cluster.config.ClustersProperties; -import com.provectus.kafka.ui.cluster.mapper.ClusterMapper; +import com.provectus.kafka.ui.config.ClustersProperties; +import com.provectus.kafka.ui.mapper.ClusterMapper; +import com.provectus.kafka.ui.model.KafkaCluster; import lombok.RequiredArgsConstructor; import org.mapstruct.factory.Mappers; import org.springframework.stereotype.Component; diff --git a/kafka-ui-api/src/main/java/com/provectus/kafka/ui/cluster/service/ConsumingService.java b/kafka-ui-api/src/main/java/com/provectus/kafka/ui/service/ConsumingService.java similarity index 94% rename from kafka-ui-api/src/main/java/com/provectus/kafka/ui/cluster/service/ConsumingService.java rename to kafka-ui-api/src/main/java/com/provectus/kafka/ui/service/ConsumingService.java index 97cedf8d383..fa9da8fb3e7 100644 --- a/kafka-ui-api/src/main/java/com/provectus/kafka/ui/cluster/service/ConsumingService.java +++ b/kafka-ui-api/src/main/java/com/provectus/kafka/ui/service/ConsumingService.java @@ -1,13 +1,12 @@ -package com.provectus.kafka.ui.cluster.service; +package com.provectus.kafka.ui.service; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; -import com.provectus.kafka.ui.cluster.deserialization.DeserializationService; -import com.provectus.kafka.ui.cluster.deserialization.RecordDeserializer; -import com.provectus.kafka.ui.cluster.model.ConsumerPosition; -import com.provectus.kafka.ui.cluster.model.KafkaCluster; -import com.provectus.kafka.ui.cluster.util.ClusterUtil; -import com.provectus.kafka.ui.kafka.KafkaService; +import com.provectus.kafka.ui.deserialization.DeserializationService; +import com.provectus.kafka.ui.deserialization.RecordDeserializer; +import com.provectus.kafka.ui.model.ConsumerPosition; +import com.provectus.kafka.ui.model.KafkaCluster; +import com.provectus.kafka.ui.util.ClusterUtil; import com.provectus.kafka.ui.model.SeekType; import com.provectus.kafka.ui.model.TopicMessage; import lombok.RequiredArgsConstructor; diff --git a/kafka-ui-api/src/main/java/com/provectus/kafka/ui/cluster/service/KafkaConnectService.java b/kafka-ui-api/src/main/java/com/provectus/kafka/ui/service/KafkaConnectService.java similarity index 94% rename from kafka-ui-api/src/main/java/com/provectus/kafka/ui/cluster/service/KafkaConnectService.java rename to kafka-ui-api/src/main/java/com/provectus/kafka/ui/service/KafkaConnectService.java index 9362103ffa6..7beab02eba7 100644 --- a/kafka-ui-api/src/main/java/com/provectus/kafka/ui/cluster/service/KafkaConnectService.java +++ b/kafka-ui-api/src/main/java/com/provectus/kafka/ui/service/KafkaConnectService.java @@ -1,12 +1,11 @@ -package com.provectus.kafka.ui.cluster.service; - -import com.provectus.kafka.ui.cluster.client.KafkaConnectClients; -import com.provectus.kafka.ui.cluster.exception.NotFoundException; -import com.provectus.kafka.ui.cluster.mapper.ClusterMapper; -import com.provectus.kafka.ui.cluster.mapper.KafkaConnectMapper; -import com.provectus.kafka.ui.cluster.model.ClustersStorage; -import com.provectus.kafka.ui.cluster.model.KafkaCluster; -import com.provectus.kafka.ui.cluster.model.KafkaConnectCluster; +package com.provectus.kafka.ui.service; + +import com.provectus.kafka.ui.client.KafkaConnectClients; +import com.provectus.kafka.ui.exception.NotFoundException; +import com.provectus.kafka.ui.mapper.ClusterMapper; +import com.provectus.kafka.ui.mapper.KafkaConnectMapper; +import com.provectus.kafka.ui.model.KafkaCluster; +import com.provectus.kafka.ui.model.KafkaConnectCluster; import com.provectus.kafka.ui.model.*; import lombok.RequiredArgsConstructor; import lombok.extern.log4j.Log4j2; @@ -38,7 +37,6 @@ public Mono> getConnects(String clusterName) { ); } - public Flux getConnectors(String clusterName, String connectName) { return getConnectAddress(clusterName, connectName) .flatMapMany(connect -> diff --git a/kafka-ui-api/src/main/java/com/provectus/kafka/ui/kafka/KafkaService.java b/kafka-ui-api/src/main/java/com/provectus/kafka/ui/service/KafkaService.java similarity index 98% rename from kafka-ui-api/src/main/java/com/provectus/kafka/ui/kafka/KafkaService.java rename to kafka-ui-api/src/main/java/com/provectus/kafka/ui/service/KafkaService.java index bd85298de64..fb6fbb78b12 100644 --- a/kafka-ui-api/src/main/java/com/provectus/kafka/ui/kafka/KafkaService.java +++ b/kafka-ui-api/src/main/java/com/provectus/kafka/ui/service/KafkaService.java @@ -1,15 +1,14 @@ -package com.provectus.kafka.ui.kafka; +package com.provectus.kafka.ui.service; -import com.provectus.kafka.ui.cluster.model.*; -import com.provectus.kafka.ui.cluster.util.ClusterUtil; -import com.provectus.kafka.ui.cluster.util.JmxClusterUtil; -import com.provectus.kafka.ui.cluster.util.JmxMetricsName; -import com.provectus.kafka.ui.cluster.util.JmxMetricsValueName; +import com.provectus.kafka.ui.model.*; +import com.provectus.kafka.ui.util.ClusterUtil; +import com.provectus.kafka.ui.util.JmxClusterUtil; +import com.provectus.kafka.ui.util.JmxMetricsName; +import com.provectus.kafka.ui.util.JmxMetricsValueName; import com.provectus.kafka.ui.model.ConsumerGroup; import com.provectus.kafka.ui.model.Metric; import com.provectus.kafka.ui.model.ServerStatus; import com.provectus.kafka.ui.model.TopicFormData; -import com.provectus.kafka.ui.zookeeper.ZookeeperService; import lombok.RequiredArgsConstructor; import lombok.SneakyThrows; import lombok.extern.log4j.Log4j2; diff --git a/kafka-ui-api/src/main/java/com/provectus/kafka/ui/cluster/service/MetricsUpdateService.java b/kafka-ui-api/src/main/java/com/provectus/kafka/ui/service/MetricsUpdateService.java similarity index 76% rename from kafka-ui-api/src/main/java/com/provectus/kafka/ui/cluster/service/MetricsUpdateService.java rename to kafka-ui-api/src/main/java/com/provectus/kafka/ui/service/MetricsUpdateService.java index 8860468e20c..26db6b39526 100644 --- a/kafka-ui-api/src/main/java/com/provectus/kafka/ui/cluster/service/MetricsUpdateService.java +++ b/kafka-ui-api/src/main/java/com/provectus/kafka/ui/service/MetricsUpdateService.java @@ -1,7 +1,6 @@ -package com.provectus.kafka.ui.cluster.service; +package com.provectus.kafka.ui.service; -import com.provectus.kafka.ui.cluster.model.KafkaCluster; -import com.provectus.kafka.ui.kafka.KafkaService; +import com.provectus.kafka.ui.model.KafkaCluster; import lombok.RequiredArgsConstructor; import lombok.extern.log4j.Log4j2; import org.springframework.stereotype.Service; diff --git a/kafka-ui-api/src/main/java/com/provectus/kafka/ui/cluster/service/SchemaRegistryService.java b/kafka-ui-api/src/main/java/com/provectus/kafka/ui/service/SchemaRegistryService.java similarity index 94% rename from kafka-ui-api/src/main/java/com/provectus/kafka/ui/cluster/service/SchemaRegistryService.java rename to kafka-ui-api/src/main/java/com/provectus/kafka/ui/service/SchemaRegistryService.java index b364cbc8299..b3544f7b904 100644 --- a/kafka-ui-api/src/main/java/com/provectus/kafka/ui/cluster/service/SchemaRegistryService.java +++ b/kafka-ui-api/src/main/java/com/provectus/kafka/ui/service/SchemaRegistryService.java @@ -1,15 +1,14 @@ -package com.provectus.kafka.ui.cluster.service; +package com.provectus.kafka.ui.service; -import com.provectus.kafka.ui.cluster.exception.DuplicateEntityException; -import com.provectus.kafka.ui.cluster.exception.NotFoundException; -import com.provectus.kafka.ui.cluster.exception.UnprocessableEntityException; -import com.provectus.kafka.ui.cluster.mapper.ClusterMapper; -import com.provectus.kafka.ui.cluster.model.ClustersStorage; -import com.provectus.kafka.ui.cluster.model.KafkaCluster; -import com.provectus.kafka.ui.cluster.model.schemaregistry.InternalCompatibilityCheck; -import com.provectus.kafka.ui.cluster.model.schemaregistry.InternalCompatibilityLevel; -import com.provectus.kafka.ui.cluster.model.schemaregistry.InternalNewSchema; -import com.provectus.kafka.ui.cluster.model.schemaregistry.SubjectIdResponse; +import com.provectus.kafka.ui.exception.DuplicateEntityException; +import com.provectus.kafka.ui.exception.NotFoundException; +import com.provectus.kafka.ui.exception.UnprocessableEntityException; +import com.provectus.kafka.ui.mapper.ClusterMapper; +import com.provectus.kafka.ui.model.KafkaCluster; +import com.provectus.kafka.ui.model.schemaregistry.InternalCompatibilityCheck; +import com.provectus.kafka.ui.model.schemaregistry.InternalCompatibilityLevel; +import com.provectus.kafka.ui.model.schemaregistry.InternalNewSchema; +import com.provectus.kafka.ui.model.schemaregistry.SubjectIdResponse; import com.provectus.kafka.ui.model.*; import lombok.RequiredArgsConstructor; import lombok.extern.log4j.Log4j2; diff --git a/kafka-ui-api/src/main/java/com/provectus/kafka/ui/zookeeper/ZookeeperService.java b/kafka-ui-api/src/main/java/com/provectus/kafka/ui/service/ZookeeperService.java similarity index 91% rename from kafka-ui-api/src/main/java/com/provectus/kafka/ui/zookeeper/ZookeeperService.java rename to kafka-ui-api/src/main/java/com/provectus/kafka/ui/service/ZookeeperService.java index 855ea62c46f..7c391abc1a8 100644 --- a/kafka-ui-api/src/main/java/com/provectus/kafka/ui/zookeeper/ZookeeperService.java +++ b/kafka-ui-api/src/main/java/com/provectus/kafka/ui/service/ZookeeperService.java @@ -1,13 +1,12 @@ -package com.provectus.kafka.ui.zookeeper; +package com.provectus.kafka.ui.service; -import com.provectus.kafka.ui.cluster.model.KafkaCluster; +import com.provectus.kafka.ui.model.KafkaCluster; import java.util.concurrent.ConcurrentHashMap; import lombok.RequiredArgsConstructor; import lombok.extern.log4j.Log4j2; import org.I0Itec.zkclient.ZkClient; import org.springframework.stereotype.Service; -import java.util.HashMap; import java.util.Map; @Service diff --git a/kafka-ui-api/src/main/java/com/provectus/kafka/ui/cluster/util/ClusterUtil.java b/kafka-ui-api/src/main/java/com/provectus/kafka/ui/util/ClusterUtil.java similarity index 97% rename from kafka-ui-api/src/main/java/com/provectus/kafka/ui/cluster/util/ClusterUtil.java rename to kafka-ui-api/src/main/java/com/provectus/kafka/ui/util/ClusterUtil.java index 9fa45a71dab..fa75449439f 100644 --- a/kafka-ui-api/src/main/java/com/provectus/kafka/ui/cluster/util/ClusterUtil.java +++ b/kafka-ui-api/src/main/java/com/provectus/kafka/ui/util/ClusterUtil.java @@ -1,7 +1,6 @@ -package com.provectus.kafka.ui.cluster.util; +package com.provectus.kafka.ui.util; -import com.provectus.kafka.ui.cluster.deserialization.RecordDeserializer; -import com.provectus.kafka.ui.cluster.model.*; +import com.provectus.kafka.ui.deserialization.RecordDeserializer; import com.provectus.kafka.ui.model.*; import lombok.extern.slf4j.Slf4j; import org.apache.kafka.clients.admin.*; @@ -22,7 +21,7 @@ import java.util.stream.Collectors; import java.util.stream.Stream; -import static com.provectus.kafka.ui.kafka.KafkaConstants.TOPIC_DEFAULT_CONFIGS; +import static com.provectus.kafka.ui.util.KafkaConstants.TOPIC_DEFAULT_CONFIGS; import static org.apache.kafka.common.config.TopicConfig.MESSAGE_FORMAT_VERSION_CONFIG; @Slf4j diff --git a/kafka-ui-api/src/main/java/com/provectus/kafka/ui/cluster/util/JmxClusterUtil.java b/kafka-ui-api/src/main/java/com/provectus/kafka/ui/util/JmxClusterUtil.java similarity index 99% rename from kafka-ui-api/src/main/java/com/provectus/kafka/ui/cluster/util/JmxClusterUtil.java rename to kafka-ui-api/src/main/java/com/provectus/kafka/ui/util/JmxClusterUtil.java index b4090d9b92e..ec923085b03 100644 --- a/kafka-ui-api/src/main/java/com/provectus/kafka/ui/cluster/util/JmxClusterUtil.java +++ b/kafka-ui-api/src/main/java/com/provectus/kafka/ui/util/JmxClusterUtil.java @@ -1,4 +1,4 @@ -package com.provectus.kafka.ui.cluster.util; +package com.provectus.kafka.ui.util; import com.provectus.kafka.ui.model.Metric; import lombok.RequiredArgsConstructor; diff --git a/kafka-ui-api/src/main/java/com/provectus/kafka/ui/cluster/util/JmxMetricsName.java b/kafka-ui-api/src/main/java/com/provectus/kafka/ui/util/JmxMetricsName.java similarity index 94% rename from kafka-ui-api/src/main/java/com/provectus/kafka/ui/cluster/util/JmxMetricsName.java rename to kafka-ui-api/src/main/java/com/provectus/kafka/ui/util/JmxMetricsName.java index 842c9d57907..5b15b4e093e 100644 --- a/kafka-ui-api/src/main/java/com/provectus/kafka/ui/cluster/util/JmxMetricsName.java +++ b/kafka-ui-api/src/main/java/com/provectus/kafka/ui/util/JmxMetricsName.java @@ -1,4 +1,4 @@ -package com.provectus.kafka.ui.cluster.util; +package com.provectus.kafka.ui.util; public enum JmxMetricsName { MessagesInPerSec, diff --git a/kafka-ui-api/src/main/java/com/provectus/kafka/ui/cluster/util/JmxMetricsValueName.java b/kafka-ui-api/src/main/java/com/provectus/kafka/ui/util/JmxMetricsValueName.java similarity index 73% rename from kafka-ui-api/src/main/java/com/provectus/kafka/ui/cluster/util/JmxMetricsValueName.java rename to kafka-ui-api/src/main/java/com/provectus/kafka/ui/util/JmxMetricsValueName.java index 182d144a36b..7146d9e9947 100644 --- a/kafka-ui-api/src/main/java/com/provectus/kafka/ui/cluster/util/JmxMetricsValueName.java +++ b/kafka-ui-api/src/main/java/com/provectus/kafka/ui/util/JmxMetricsValueName.java @@ -1,4 +1,4 @@ -package com.provectus.kafka.ui.cluster.util; +package com.provectus.kafka.ui.util; public enum JmxMetricsValueName { Count, diff --git a/kafka-ui-api/src/main/java/com/provectus/kafka/ui/cluster/util/JmxPoolFactory.java b/kafka-ui-api/src/main/java/com/provectus/kafka/ui/util/JmxPoolFactory.java similarity index 95% rename from kafka-ui-api/src/main/java/com/provectus/kafka/ui/cluster/util/JmxPoolFactory.java rename to kafka-ui-api/src/main/java/com/provectus/kafka/ui/util/JmxPoolFactory.java index 89ce72c60ff..3cfa38102d3 100644 --- a/kafka-ui-api/src/main/java/com/provectus/kafka/ui/cluster/util/JmxPoolFactory.java +++ b/kafka-ui-api/src/main/java/com/provectus/kafka/ui/util/JmxPoolFactory.java @@ -1,4 +1,4 @@ -package com.provectus.kafka.ui.cluster.util; +package com.provectus.kafka.ui.util; import lombok.extern.slf4j.Slf4j; import org.apache.commons.pool2.BaseKeyedPooledObjectFactory; diff --git a/kafka-ui-api/src/main/java/com/provectus/kafka/ui/kafka/KafkaConstants.java b/kafka-ui-api/src/main/java/com/provectus/kafka/ui/util/KafkaConstants.java similarity index 98% rename from kafka-ui-api/src/main/java/com/provectus/kafka/ui/kafka/KafkaConstants.java rename to kafka-ui-api/src/main/java/com/provectus/kafka/ui/util/KafkaConstants.java index ed226414074..feb2897b820 100644 --- a/kafka-ui-api/src/main/java/com/provectus/kafka/ui/kafka/KafkaConstants.java +++ b/kafka-ui-api/src/main/java/com/provectus/kafka/ui/util/KafkaConstants.java @@ -1,4 +1,4 @@ -package com.provectus.kafka.ui.kafka; +package com.provectus.kafka.ui.util; import java.util.AbstractMap; import java.util.Map; diff --git a/kafka-ui-api/src/test/java/com/provectus/kafka/ui/SchemaRegistryServiceTests.java b/kafka-ui-api/src/test/java/com/provectus/kafka/ui/SchemaRegistryServiceTests.java index 07d05cade60..92604e1c2bc 100644 --- a/kafka-ui-api/src/test/java/com/provectus/kafka/ui/SchemaRegistryServiceTests.java +++ b/kafka-ui-api/src/test/java/com/provectus/kafka/ui/SchemaRegistryServiceTests.java @@ -65,7 +65,7 @@ void shouldBeBadRequestIfNoSchemaType() { .post() .uri("/api/clusters/{clusterName}/schemas", LOCAL) .contentType(MediaType.APPLICATION_JSON) - .body(BodyInserters.fromValue(schema.formatted(subject))) + .body(BodyInserters.fromValue(String.format(schema, subject))) .exchange() .expectStatus().isBadRequest(); } @@ -78,7 +78,7 @@ void shouldReturn409WhenSchemaDuplicatesThePreviousVersion() { .post() .uri("/api/clusters/{clusterName}/schemas", LOCAL) .contentType(MediaType.APPLICATION_JSON) - .body(BodyInserters.fromValue(schema.formatted(subject))) + .body(BodyInserters.fromValue(String.format(schema, subject))) .exchange() .expectStatus().isEqualTo(HttpStatus.OK); @@ -86,7 +86,7 @@ void shouldReturn409WhenSchemaDuplicatesThePreviousVersion() { .post() .uri("/api/clusters/{clusterName}/schemas", LOCAL) .contentType(MediaType.APPLICATION_JSON) - .body(BodyInserters.fromValue(schema.formatted(subject))) + .body(BodyInserters.fromValue(String.format(schema, subject))) .exchange() .expectStatus().isEqualTo(HttpStatus.CONFLICT); } @@ -201,7 +201,12 @@ private void createNewSubjectAndAssert(String subject) { .post() .uri("/api/clusters/{clusterName}/schemas", LOCAL) .contentType(MediaType.APPLICATION_JSON) - .body(BodyInserters.fromValue("{\"subject\":\"%s\",\"schemaType\":\"AVRO\",\"schema\":\"{\\\"type\\\": \\\"string\\\"}\"}".formatted(subject))) + .body(BodyInserters.fromValue( + String.format( + "{\"subject\":\"%s\",\"schemaType\":\"AVRO\",\"schema\":\"{\\\"type\\\": \\\"string\\\"}\"}", + subject + ) + )) .exchange() .expectStatus().isOk() .expectBody(SchemaSubject.class) diff --git a/kafka-ui-api/src/test/java/com/provectus/kafka/ui/cluster/deserialization/SchemaRegistryRecordDeserializerTest.java b/kafka-ui-api/src/test/java/com/provectus/kafka/ui/deserialization/SchemaRegistryRecordDeserializerTest.java similarity index 90% rename from kafka-ui-api/src/test/java/com/provectus/kafka/ui/cluster/deserialization/SchemaRegistryRecordDeserializerTest.java rename to kafka-ui-api/src/test/java/com/provectus/kafka/ui/deserialization/SchemaRegistryRecordDeserializerTest.java index 3dbc716b21c..b804509e01d 100644 --- a/kafka-ui-api/src/test/java/com/provectus/kafka/ui/cluster/deserialization/SchemaRegistryRecordDeserializerTest.java +++ b/kafka-ui-api/src/test/java/com/provectus/kafka/ui/deserialization/SchemaRegistryRecordDeserializerTest.java @@ -1,7 +1,7 @@ -package com.provectus.kafka.ui.cluster.deserialization; +package com.provectus.kafka.ui.deserialization; import com.fasterxml.jackson.databind.ObjectMapper; -import com.provectus.kafka.ui.cluster.model.KafkaCluster; +import com.provectus.kafka.ui.model.KafkaCluster; import org.apache.kafka.clients.consumer.ConsumerRecord; import org.apache.kafka.common.utils.Bytes; import org.junit.jupiter.api.Test; diff --git a/kafka-ui-contract/src/main/resources/swagger/kafka-connect-api.yaml b/kafka-ui-contract/src/main/resources/swagger/kafka-connect-api.yaml index 0581c5f3bc7..237da9abb20 100644 --- a/kafka-ui-contract/src/main/resources/swagger/kafka-connect-api.yaml +++ b/kafka-ui-contract/src/main/resources/swagger/kafka-connect-api.yaml @@ -17,7 +17,7 @@ paths: /connectors: get: tags: - - /connect + - KafkaConnectClient summary: get all connectors from Kafka Connect service operationId: getConnectors responses: @@ -31,7 +31,7 @@ paths: type: string post: tags: - - /connect + - KafkaConnectClient summary: create new connector operationId: createConnector requestBody: @@ -56,7 +56,7 @@ paths: /connectors/{connectorName}: get: tags: - - /connect + - KafkaConnectClient summary: get information about the connector operationId: getConnector parameters: @@ -74,7 +74,7 @@ paths: $ref: '#/components/schemas/Connector' delete: tags: - - /connect + - KafkaConnectClient summary: delete connector operationId: deleteConnector parameters: @@ -92,7 +92,7 @@ paths: /connectors/{connectorName}/config: get: tags: - - /connect + - KafkaConnectClient summary: get connector configuration operationId: getConnectorConfig parameters: @@ -110,7 +110,7 @@ paths: $ref: '#/components/schemas/ConnectorConfig' put: tags: - - /connect + - KafkaConnectClient summary: update or create connector with provided config operationId: setConnectorConfig parameters: @@ -142,7 +142,7 @@ paths: /connectors/{connectorName}/status: get: tags: - - /connect + - KafkaConnectClient summary: get connector status operationId: getConnectorStatus parameters: @@ -162,7 +162,7 @@ paths: /connectors/{connectorName}/restart: post: tags: - - /connect + - KafkaConnectClient summary: restart the connector operationId: restartConnector parameters: @@ -180,7 +180,7 @@ paths: /connectors/{connectorName}/pause: put: tags: - - /connect + - KafkaConnectClient summary: pause the connector operationId: pauseConnector parameters: @@ -196,7 +196,7 @@ paths: /connectors/{connectorName}/resume: put: tags: - - /connect + - KafkaConnectClient summary: resume the connector operationId: resumeConnector parameters: @@ -212,7 +212,7 @@ paths: /connectors/{connectorName}/tasks: get: tags: - - /connect + - KafkaConnectClient summary: get connector tasks operationId: getConnectorTasks parameters: @@ -234,7 +234,7 @@ paths: /connectors/{connectorName}/tasks/{taskId}/status: get: tags: - - /connect + - KafkaConnectClient summary: get connector task status operationId: getConnectorTaskStatus parameters: @@ -259,7 +259,7 @@ paths: /connectors/{connectorName}/tasks/{taskId}/restart: post: tags: - - /connect + - KafkaConnectClient summary: restart connector task operationId: restartConnectorTask parameters: @@ -280,7 +280,7 @@ paths: /connector-plugins: get: tags: - - /connect + - KafkaConnectClient summary: get connector plugins operationId: getConnectorPlugins responses: @@ -296,7 +296,7 @@ paths: /connector-plugins/{pluginName}/config/validate: put: tags: - - /connect + - KafkaConnectClient summary: validate connector plugin configuration operationId: validateConnectorPluginConfig parameters: diff --git a/kafka-ui-contract/src/main/resources/swagger/kafka-ui-api.yaml b/kafka-ui-contract/src/main/resources/swagger/kafka-ui-api.yaml index 991103cc759..e20fb81d90a 100644 --- a/kafka-ui-contract/src/main/resources/swagger/kafka-ui-api.yaml +++ b/kafka-ui-contract/src/main/resources/swagger/kafka-ui-api.yaml @@ -18,7 +18,7 @@ paths: /api/clusters: get: tags: - - /api/clusters + - Clusters summary: getClusters operationId: getClusters responses: @@ -34,7 +34,7 @@ paths: /api/clusters/{clusterName}/brokers: get: tags: - - /api/clusters + - Brokers summary: getBrokers operationId: getBrokers parameters: @@ -56,7 +56,7 @@ paths: /api/clusters/{clusterName}/metrics: get: tags: - - /api/clusters + - Clusters summary: getClusterMetrics operationId: getClusterMetrics parameters: @@ -76,7 +76,7 @@ paths: /api/clusters/{clusterName}/stats: get: tags: - - /api/clusters + - Clusters summary: getClusterStats operationId: getClusterStats parameters: @@ -96,7 +96,7 @@ paths: /api/clusters/{clusterName}/brokers/{id}/metrics: get: tags: - - /api/clusters + - Brokers summary: getBrokersMetrics operationId: getBrokersMetrics parameters: @@ -121,7 +121,7 @@ paths: /api/clusters/{clusterName}/topics: get: tags: - - /api/clusters + - Topics summary: getTopics operationId: getTopics parameters: @@ -141,7 +141,7 @@ paths: $ref: '#/components/schemas/Topic' post: tags: - - /api/clusters + - Topics summary: createTopic operationId: createTopic parameters: @@ -166,7 +166,7 @@ paths: /api/clusters/{clusterName}/topics/{topicName}: get: tags: - - /api/clusters + - Topics summary: getTopicDetails operationId: getTopicDetails parameters: @@ -189,7 +189,7 @@ paths: $ref: '#/components/schemas/TopicDetails' patch: tags: - - /api/clusters + - Topics summary: updateTopic operationId: updateTopic parameters: @@ -217,7 +217,7 @@ paths: $ref: '#/components/schemas/Topic' delete: tags: - - /api/clusters + - Topics summary: deleteTopic operationId: deleteTopic parameters: @@ -240,7 +240,7 @@ paths: /api/clusters/{clusterName}/topics/{topicName}/config: get: tags: - - /api/clusters + - Topics summary: getTopicConfigs operationId: getTopicConfigs parameters: @@ -267,7 +267,7 @@ paths: /api/clusters/{clusterName}/topics/{topicName}/messages: get: tags: - - /api/clusters + - Messages summary: getTopicMessages operationId: getTopicMessages parameters: @@ -311,7 +311,7 @@ paths: $ref: '#/components/schemas/TopicMessage' delete: tags: - - /api/clusters + - Messages summary: deleteTopicMessages operationId: deleteTopicMessages parameters: @@ -341,7 +341,7 @@ paths: /api/clusters/{clusterName}/consumer-groups/{id}: get: tags: - - /api/clusters + - Consumer Groups summary: get Consumer Group By Id operationId: getConsumerGroup parameters: @@ -366,7 +366,7 @@ paths: /api/clusters/{clusterName}/consumerGroups: get: tags: - - /api/clusters + - Consumer Groups summary: get all ConsumerGroups operationId: getConsumerGroups parameters: @@ -388,7 +388,7 @@ paths: /api/clusters/{clusterName}/schemas: post: tags: - - /api/clusters + - Schemas summary: create a new subject schema operationId: createNewSchema parameters: @@ -417,7 +417,7 @@ paths: description: Invalid parameters get: tags: - - /api/clusters + - Schemas summary: get all schemas of latest version from Schema Registry service operationId: getSchemas parameters: @@ -439,7 +439,7 @@ paths: /api/clusters/{clusterName}/schemas/{subject}: delete: tags: - - /api/clusters + - Schemas summary: delete schema from Schema Registry service operationId: deleteSchema parameters: @@ -462,7 +462,7 @@ paths: /api/clusters/{clusterName}/schemas/{subject}/versions: get: tags: - - /api/clusters + - Schemas summary: get all version of subject from Schema Registry service operationId: getAllVersionsBySubject parameters: @@ -489,7 +489,7 @@ paths: /api/clusters/{clusterName}/schemas/{subject}/latest: get: tags: - - /api/clusters + - Schemas summary: get the latest schema from Schema Registry service operationId: getLatestSchema parameters: @@ -512,7 +512,7 @@ paths: $ref: '#/components/schemas/SchemaSubject' delete: tags: - - /api/clusters + - Schemas summary: delete the latest schema from schema registry operationId: deleteLatestSchema parameters: @@ -536,7 +536,7 @@ paths: /api/clusters/{clusterName}/schemas/{subject}/versions/{version}: get: tags: - - /api/clusters + - Schemas summary: get schema by version from Schema Registry service operationId: getSchemaByVersion parameters: @@ -564,7 +564,7 @@ paths: $ref: '#/components/schemas/SchemaSubject' delete: tags: - - /api/clusters + - Schemas summary: delete schema by version from schema registry operationId: deleteSchemaByVersion parameters: @@ -592,7 +592,7 @@ paths: /api/clusters/{clusterName}/schemas/compatibility: get: tags: - - /api/clusters + - Schemas summary: Get global schema compatibility level operationId: getGlobalSchemaCompatibilityLevel parameters: @@ -610,7 +610,7 @@ paths: $ref: '#/components/schemas/CompatibilityLevel' put: tags: - - /api/clusters + - Schemas summary: Update compatibility level globally operationId: updateGlobalSchemaCompatibilityLevel parameters: @@ -633,7 +633,7 @@ paths: /api/clusters/{clusterName}/schemas/{subject}/compatibility: put: tags: - - /api/clusters + - Schemas summary: Update compatibility level for specific schema. operationId: updateSchemaCompatibilityLevel parameters: @@ -661,7 +661,7 @@ paths: /api/clusters/{clusterName}/schemas/{subject}/check: post: tags: - - /api/clusters + - Schemas summary: Check compatibility of the schema. operationId: checkSchemaCompatibility parameters: @@ -693,7 +693,7 @@ paths: /api/clusters/{clusterName}/connects: get: tags: - - /api/clusters/connects + - Kafka Connect summary: get all kafka connect instances operationId: getConnects parameters: @@ -715,7 +715,7 @@ paths: /api/clusters/{clusterName}/connects/{connectName}/connectors: get: tags: - - /api/clusters/connects + - Kafka Connect summary: get all connectors from Kafka Connect service operationId: getConnectors parameters: @@ -740,7 +740,7 @@ paths: type: string post: tags: - - /api/clusters/connects + - Kafka Connect summary: create new connector operationId: createConnector parameters: @@ -772,7 +772,7 @@ paths: /api/clusters/{clusterName}/connects/{connectName}/connectors/{connectorName}: get: tags: - - /api/clusters/connects + - Kafka Connect summary: get information about the connector operationId: getConnector parameters: @@ -800,7 +800,7 @@ paths: $ref: '#/components/schemas/Connector' delete: tags: - - /api/clusters/connects + - Kafka Connect summary: delete connector operationId: deleteConnector parameters: @@ -828,7 +828,7 @@ paths: /api/clusters/{clusterName}/connects/{connectName}/connectors/{connectorName}/action/{action}: post: tags: - - /api/clusters/connects + - Kafka Connect summary: update connector state (restart, pause or resume) operationId: updateConnectorState parameters: @@ -861,7 +861,7 @@ paths: /api/clusters/{clusterName}/connects/{connectName}/connectors/{connectorName}/config: get: tags: - - /api/clusters/connects + - Kafka Connect summary: get connector configuration operationId: getConnectorConfig parameters: @@ -889,7 +889,7 @@ paths: $ref: '#/components/schemas/ConnectorConfig' put: tags: - - /api/clusters/connects + - Kafka Connect summary: update or create connector with provided config operationId: setConnectorConfig parameters: @@ -926,7 +926,7 @@ paths: /api/clusters/{clusterName}/connects/{connectName}/connectors/{connectorName}/tasks: get: tags: - - /api/clusters/connects + - Kafka Connect summary: get connector tasks operationId: getConnectorTasks parameters: @@ -958,7 +958,7 @@ paths: /api/clusters/{clusterName}/connects/{connectName}/connectors/{connectorName}/tasks/{taskId}/action/restart: post: tags: - - /api/clusters/connects + - Kafka Connect summary: restart connector task operationId: restartConnectorTask parameters: @@ -989,7 +989,7 @@ paths: /api/clusters/{clusterName}/connects/{connectName}/plugins: get: tags: - - /api/clusters/connects + - Kafka Connect summary: get connector plugins operationId: getConnectorPlugins parameters: @@ -1016,7 +1016,7 @@ paths: /api/clusters/{clusterName}/connects/{connectName}/plugins/{pluginName}/config/validate: put: tags: - - /api/clusters/connects + - Kafka Connect summary: validate connector plugin configuration operationId: validateConnectorPluginConfig parameters: diff --git a/kafka-ui-react-app/src/redux/actions/thunks.ts b/kafka-ui-react-app/src/redux/actions/thunks.ts index 36e1ccaeb0b..23171cc1d46 100644 --- a/kafka-ui-react-app/src/redux/actions/thunks.ts +++ b/kafka-ui-react-app/src/redux/actions/thunks.ts @@ -1,5 +1,10 @@ import { - ApiClustersApi, + ClustersApi, + BrokersApi, + TopicsApi, + ConsumerGroupsApi, + SchemasApi, + MessagesApi, Configuration, Cluster, Topic, @@ -24,12 +29,17 @@ import { BASE_PARAMS } from 'lib/constants'; import * as actions from './actions'; const apiClientConf = new Configuration(BASE_PARAMS); -export const apiClient = new ApiClustersApi(apiClientConf); +export const clustersApiClient = new ClustersApi(apiClientConf); +export const brokersApiClient = new BrokersApi(apiClientConf); +export const topicsApiClient = new TopicsApi(apiClientConf); +export const consumerGroupsApiClient = new ConsumerGroupsApi(apiClientConf); +export const schemasApiClient = new SchemasApi(apiClientConf); +export const messagesApiClient = new MessagesApi(apiClientConf); export const fetchClustersList = (): PromiseThunkResult => async (dispatch) => { dispatch(actions.fetchClusterListAction.request()); try { - const clusters: Cluster[] = await apiClient.getClusters(); + const clusters: Cluster[] = await clustersApiClient.getClusters(); dispatch(actions.fetchClusterListAction.success(clusters)); } catch (e) { dispatch(actions.fetchClusterListAction.failure()); @@ -41,7 +51,7 @@ export const fetchClusterStats = ( ): PromiseThunkResult => async (dispatch) => { dispatch(actions.fetchClusterStatsAction.request()); try { - const payload = await apiClient.getClusterStats({ clusterName }); + const payload = await clustersApiClient.getClusterStats({ clusterName }); dispatch(actions.fetchClusterStatsAction.success(payload)); } catch (e) { dispatch(actions.fetchClusterStatsAction.failure()); @@ -53,7 +63,7 @@ export const fetchClusterMetrics = ( ): PromiseThunkResult => async (dispatch) => { dispatch(actions.fetchClusterMetricsAction.request()); try { - const payload = await apiClient.getClusterMetrics({ clusterName }); + const payload = await clustersApiClient.getClusterMetrics({ clusterName }); dispatch(actions.fetchClusterMetricsAction.success(payload)); } catch (e) { dispatch(actions.fetchClusterMetricsAction.failure()); @@ -65,7 +75,7 @@ export const fetchBrokers = ( ): PromiseThunkResult => async (dispatch) => { dispatch(actions.fetchBrokersAction.request()); try { - const payload = await apiClient.getBrokers({ clusterName }); + const payload = await brokersApiClient.getBrokers({ clusterName }); dispatch(actions.fetchBrokersAction.success(payload)); } catch (e) { dispatch(actions.fetchBrokersAction.failure()); @@ -78,7 +88,7 @@ export const fetchBrokerMetrics = ( ): PromiseThunkResult => async (dispatch) => { dispatch(actions.fetchBrokerMetricsAction.request()); try { - const payload = await apiClient.getBrokersMetrics({ + const payload = await brokersApiClient.getBrokersMetrics({ clusterName, id: brokerId, }); @@ -93,7 +103,7 @@ export const fetchTopicsList = ( ): PromiseThunkResult => async (dispatch) => { dispatch(actions.fetchTopicsListAction.request()); try { - const topics = await apiClient.getTopics({ clusterName }); + const topics = await topicsApiClient.getTopics({ clusterName }); dispatch(actions.fetchTopicsListAction.success(topics)); } catch (e) { dispatch(actions.fetchTopicsListAction.failure()); @@ -107,7 +117,7 @@ export const fetchTopicMessages = ( ): PromiseThunkResult => async (dispatch) => { dispatch(actions.fetchTopicMessagesAction.request()); try { - const messages = await apiClient.getTopicMessages({ + const messages = await messagesApiClient.getTopicMessages({ clusterName, topicName, ...queryParams, @@ -124,7 +134,7 @@ export const fetchTopicDetails = ( ): PromiseThunkResult => async (dispatch) => { dispatch(actions.fetchTopicDetailsAction.request()); try { - const topicDetails = await apiClient.getTopicDetails({ + const topicDetails = await topicsApiClient.getTopicDetails({ clusterName, topicName, }); @@ -145,7 +155,10 @@ export const fetchTopicConfig = ( ): PromiseThunkResult => async (dispatch) => { dispatch(actions.fetchTopicConfigAction.request()); try { - const config = await apiClient.getTopicConfigs({ clusterName, topicName }); + const config = await topicsApiClient.getTopicConfigs({ + clusterName, + topicName, + }); dispatch(actions.fetchTopicConfigAction.success({ topicName, config })); } catch (e) { dispatch(actions.fetchTopicConfigAction.failure()); @@ -194,7 +207,7 @@ export const createTopic = ( ): PromiseThunkResult => async (dispatch) => { dispatch(actions.createTopicAction.request()); try { - const topic: Topic = await apiClient.createTopic({ + const topic: Topic = await topicsApiClient.createTopic({ clusterName, topicFormData: formatTopicFormData(form), }); @@ -210,7 +223,7 @@ export const updateTopic = ( ): PromiseThunkResult => async (dispatch) => { dispatch(actions.updateTopicAction.request()); try { - const topic: Topic = await apiClient.updateTopic({ + const topic: Topic = await topicsApiClient.updateTopic({ clusterName, topicName: form.name, topicFormData: formatTopicFormData(form), @@ -226,7 +239,9 @@ export const fetchConsumerGroupsList = ( ): PromiseThunkResult => async (dispatch) => { dispatch(actions.fetchConsumerGroupsAction.request()); try { - const consumerGroups = await apiClient.getConsumerGroups({ clusterName }); + const consumerGroups = await consumerGroupsApiClient.getConsumerGroups({ + clusterName, + }); dispatch(actions.fetchConsumerGroupsAction.success(consumerGroups)); } catch (e) { dispatch(actions.fetchConsumerGroupsAction.failure()); @@ -239,10 +254,12 @@ export const fetchConsumerGroupDetails = ( ): PromiseThunkResult => async (dispatch) => { dispatch(actions.fetchConsumerGroupDetailsAction.request()); try { - const consumerGroupDetails = await apiClient.getConsumerGroup({ - clusterName, - id: consumerGroupID, - }); + const consumerGroupDetails = await consumerGroupsApiClient.getConsumerGroup( + { + clusterName, + id: consumerGroupID, + } + ); dispatch( actions.fetchConsumerGroupDetailsAction.success({ consumerGroupID, @@ -259,7 +276,7 @@ export const fetchSchemasByClusterName = ( ): PromiseThunkResult => async (dispatch) => { dispatch(actions.fetchSchemasByClusterNameAction.request()); try { - const schemas = await apiClient.getSchemas({ clusterName }); + const schemas = await schemasApiClient.getSchemas({ clusterName }); dispatch(actions.fetchSchemasByClusterNameAction.success(schemas)); } catch (e) { dispatch(actions.fetchSchemasByClusterNameAction.failure()); @@ -273,7 +290,7 @@ export const fetchSchemaVersions = ( if (!subject) return; dispatch(actions.fetchSchemaVersionsAction.request()); try { - const versions = await apiClient.getAllVersionsBySubject({ + const versions = await schemasApiClient.getAllVersionsBySubject({ clusterName, subject, }); @@ -289,7 +306,7 @@ export const createSchema = ( ): PromiseThunkResult => async (dispatch) => { dispatch(actions.createSchemaAction.request()); try { - const schema: SchemaSubject = await apiClient.createNewSchema({ + const schema: SchemaSubject = await schemasApiClient.createNewSchema({ clusterName, newSchemaSubject, });