* added deleteTopic operation * added not found response
This commit is contained in:
parent
ae1acbce9b
commit
a9cb9567d6
4 changed files with 55 additions and 0 deletions
|
@ -1,5 +1,6 @@
|
|||
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;
|
||||
|
@ -169,12 +170,27 @@ public class ClusterService {
|
|||
).orElse(Mono.empty());
|
||||
}
|
||||
|
||||
public Mono<Void> deleteTopic(String clusterName, String topicName) {
|
||||
var cluster = clustersStorage.getClusterByName(clusterName)
|
||||
.orElseThrow(() -> new NotFoundException("No such cluster"));
|
||||
getTopicDetails(clusterName, topicName)
|
||||
.orElseThrow(() -> new NotFoundException("No such topic"));
|
||||
return kafkaService.deleteTopic(cluster, topicName)
|
||||
.doOnNext(t -> updateCluster(topicName, clusterName, cluster));
|
||||
}
|
||||
|
||||
private KafkaCluster updateCluster(InternalTopic topic, String clusterName, KafkaCluster cluster) {
|
||||
final KafkaCluster updatedCluster = kafkaService.getUpdatedCluster(cluster, topic);
|
||||
clustersStorage.setKafkaCluster(clusterName, updatedCluster);
|
||||
return updatedCluster;
|
||||
}
|
||||
|
||||
private KafkaCluster updateCluster(String topicToDelete, String clusterName, KafkaCluster cluster) {
|
||||
final KafkaCluster updatedCluster = kafkaService.getUpdatedCluster(cluster, topicToDelete);
|
||||
clustersStorage.setKafkaCluster(clusterName, updatedCluster);
|
||||
return updatedCluster;
|
||||
}
|
||||
|
||||
public Flux<TopicMessage> getMessages(String clusterName, String topicName, ConsumerPosition consumerPosition, String query, Integer limit) {
|
||||
return clustersStorage.getClusterByName(clusterName)
|
||||
.map(c -> consumingService.loadMessages(c, topicName, consumerPosition, query, limit))
|
||||
|
|
|
@ -56,6 +56,12 @@ public class KafkaService {
|
|||
return cluster.toBuilder().topics(topics).build();
|
||||
}
|
||||
|
||||
public KafkaCluster getUpdatedCluster(KafkaCluster cluster, String topicToDelete) {
|
||||
final Map<String, InternalTopic> topics = new HashMap<>(cluster.getTopics());
|
||||
topics.remove(topicToDelete);
|
||||
return cluster.toBuilder().topics(topics).build();
|
||||
}
|
||||
|
||||
@SneakyThrows
|
||||
public Mono<KafkaCluster> getUpdatedCluster(KafkaCluster cluster) {
|
||||
return getOrCreateAdminClient(cluster)
|
||||
|
@ -184,6 +190,13 @@ public class KafkaService {
|
|||
return getOrCreateAdminClient(cluster).flatMap(ac -> createTopic(ac.getAdminClient(), topicFormData));
|
||||
}
|
||||
|
||||
public Mono<Void> deleteTopic(KafkaCluster cluster, String topicName) {
|
||||
return getOrCreateAdminClient(cluster)
|
||||
.map(ExtendedAdminClient::getAdminClient)
|
||||
.map(adminClient -> adminClient.deleteTopics(List.of(topicName)))
|
||||
.then();
|
||||
}
|
||||
|
||||
@SneakyThrows
|
||||
public Mono<InternalTopic> createTopic(AdminClient adminClient, Mono<TopicFormData> topicFormData) {
|
||||
return topicFormData.flatMap(
|
||||
|
|
|
@ -158,6 +158,11 @@ public class MetricsRestController implements ApiClustersApi {
|
|||
return clusterService.updateTopic(clusterId, topicName, topicFormData).map(ResponseEntity::ok);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Mono<ResponseEntity<Void>> deleteTopic(String clusterName, String topicName, ServerWebExchange exchange) {
|
||||
return clusterService.deleteTopic(clusterName, topicName).map(ResponseEntity::ok);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Mono<ResponseEntity<CompatibilityLevel>> getGlobalSchemaCompatibilityLevel(String clusterName, ServerWebExchange exchange) {
|
||||
return schemaRegistryService.getGlobalSchemaCompatibilityLevel(clusterName)
|
||||
|
|
|
@ -215,6 +215,27 @@ paths:
|
|||
application/json:
|
||||
schema:
|
||||
$ref: '#/components/schemas/Topic'
|
||||
delete:
|
||||
tags:
|
||||
- /api/clusters
|
||||
summary: deleteTopic
|
||||
operationId: deleteTopic
|
||||
parameters:
|
||||
- name: clusterName
|
||||
in: path
|
||||
required: true
|
||||
schema:
|
||||
type: string
|
||||
- name: topicName
|
||||
in: path
|
||||
required: true
|
||||
schema:
|
||||
type: string
|
||||
responses:
|
||||
200:
|
||||
description: OK
|
||||
404:
|
||||
description: Not found
|
||||
|
||||
/api/clusters/{clusterName}/topics/{topicName}/config:
|
||||
get:
|
||||
|
|
Loading…
Add table
Reference in a new issue